about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xsrc/include/box64context.h25
-rwxr-xr-xsrc/include/library.h4
-rwxr-xr-xsrc/include/wrappedlibs.h4
-rwxr-xr-xsrc/librarian/librarian.c6
-rwxr-xr-xsrc/librarian/library.c291
-rwxr-xr-xsrc/librarian/library_private.h32
-rwxr-xr-xsrc/libtools/obstack.c12
-rwxr-xr-xsrc/wrapped/wrappedbz2.c12
-rwxr-xr-xsrc/wrapped/wrappedcrashhandler.c2
-rwxr-xr-xsrc/wrapped/wrappedglib2.c2
-rwxr-xr-xsrc/wrapped/wrappedgobject2.c12
-rwxr-xr-xsrc/wrapped/wrappedgtkx112.c6
-rwxr-xr-xsrc/wrapped/wrappedldlinux.c2
-rwxr-xr-xsrc/wrapped/wrappedlib_init.h44
-rwxr-xr-xsrc/wrapped/wrappedlibasound.c2
-rwxr-xr-xsrc/wrapped/wrappedlibc.c26
-rwxr-xr-xsrc/wrapped/wrappedlibgl.c6
-rwxr-xr-xsrc/wrapped/wrappedlibglu.c1
-rwxr-xr-xsrc/wrapped/wrappedlibm.c2
-rwxr-xr-xsrc/wrapped/wrappedlibpcre.c2
-rwxr-xr-xsrc/wrapped/wrappedlibssl.c6
-rwxr-xr-xsrc/wrapped/wrappedlibusb1.c6
-rwxr-xr-xsrc/wrapped/wrappedlibvorbis.c6
-rwxr-xr-xsrc/wrapped/wrappedlibx11.c52
-rwxr-xr-xsrc/wrapped/wrappedlibxext.c6
-rwxr-xr-xsrc/wrapped/wrappedlibz.c4
-rwxr-xr-xsrc/wrapped/wrappednss3.c12
-rwxr-xr-xsrc/wrapped/wrappedpulse.c22
-rwxr-xr-xsrc/wrapped/wrappedsdl1.c17
-rwxr-xr-xsrc/wrapped/wrappedsdl1mixer.c2
-rwxr-xr-xsrc/wrapped/wrappedsdl2.c26
-rwxr-xr-xsrc/wrapped/wrappedsdl2mixer.c2
-rwxr-xr-xsrc/wrapped/wrappedtcmallocminimal.c2
-rw-r--r--src/wrapped/wrappedunwind.c2
-rwxr-xr-xsrc/wrapped/wrappedutil.c2
-rwxr-xr-xsrc/wrapped/wrappedvorbisfile.c4
-rwxr-xr-xsrc/wrapped/wrappedvulkan.c6
-rw-r--r--src/wrapped/wrappedwaylandclient.c6
-rw-r--r--src/wrapped/wrappedwaylandcursor.c6
-rw-r--r--src/wrapped/wrappedwaylandegl.c6
-rwxr-xr-xsrc/wrapped/wrappedxml2.c22
-rw-r--r--src/wrapped/wrappercallback.h3
42 files changed, 334 insertions, 379 deletions
diff --git a/src/include/box64context.h b/src/include/box64context.h
index 5dc2399d..036a2b6d 100755
--- a/src/include/box64context.h
+++ b/src/include/box64context.h
@@ -136,23 +136,14 @@ typedef struct box64context_s {
     pthread_mutex_t     mutex_bridge;
 
     library_t           *libclib;       // shortcut to libc library (if loaded, so probably yes)
-    library_t           *sdl1lib;       // shortcut to SDL1 library (if loaded)
-    void*               sdl1allocrw;
-    void*               sdl1freerw;
     library_t           *sdl1mixerlib;
-    library_t           *sdl2lib;       // shortcut to SDL2 library (if loaded)
-    void*               sdl2allocrw;
-    void*               sdl2freerw;
+    library_t           *sdl2lib;
     library_t           *sdl2mixerlib;
-    library_t           *x11lib;
-    library_t           *zlib;
-    library_t           *vorbisfile;
-    library_t           *vorbis;
-    library_t           *asound;
-    library_t           *pulse;
-    library_t           *d3dadapter9;
-    library_t           *libglu;
     linkmap_t           *linkmap;
+    void*               sdl1allocrw;    // SDL1 AllocRW/FreeRW function
+    void*               sdl1freerw;
+    void*               sdl2allocrw;    // SDL2 AllocRW/FreeRW function
+    void*               sdl2freerw;
 
     int                 deferedInit;
     elfheader_t         **deferedInitList;
@@ -166,9 +157,9 @@ typedef struct box64context_s {
 
     uintptr_t           *auxval_start;
 
-    cleanup_t   *cleanups;          // atexit functions
-    int         clean_sz;
-    int         clean_cap;
+    cleanup_t           *cleanups;          // atexit functions
+    int                 clean_sz;
+    int                 clean_cap;
 
     zydis_dec_t         *dec;           // trace
 
diff --git a/src/include/library.h b/src/include/library.h
index 006e61f4..1bd9be3a 100755
--- a/src/include/library.h
+++ b/src/include/library.h
@@ -10,6 +10,10 @@ typedef struct box64context_s  box64context_t;
 typedef struct x64emu_s        x64emu_t;
 typedef struct needed_libs_s   needed_libs_t;
 
+#define LIB_NATIVE      0
+#define LIB_EMULATED    1
+#define LIB_UNNKNOW     -1
+
 library_t *NewLibrary(const char* path, box64context_t* box64);
 int AddSymbolsLibrary(lib_t* maplib, library_t* lib, x64emu_t* emu);
 int FinalizeLibrary(library_t* lib, lib_t* local_maplib, int bindnow, x64emu_t* emu);
diff --git a/src/include/wrappedlibs.h b/src/include/wrappedlibs.h
index 6cb350c4..5ff61939 100755
--- a/src/include/wrappedlibs.h
+++ b/src/include/wrappedlibs.h
@@ -10,8 +10,8 @@ typedef void (*wrappedlib_fini_t)(library_t * lib);
 typedef int (*wrappedlib_get_t)(library_t* lib, const char* name, uintptr_t *offs, uintptr_t *sz, int version, const char* vername, int local);
 
 void setNeededLibs(library_t* lib, int n, ...);
-#define SETALT(A)       lib->altmy = strdup(#A)
-#define SETALTPREFIX(A) lib->priv.w.altprefix = strdup(A)
+#define SETALT(A)       lib->w.altmy = strdup(#A)
+#define SETALTPREFIX(A) lib->w.altprefix = strdup(A)
 
 typedef struct wrappedlib_s {
     const char*         name;
diff --git a/src/librarian/librarian.c b/src/librarian/librarian.c
index cf5c9400..e871b68e 100755
--- a/src/librarian/librarian.c
+++ b/src/librarian/librarian.c
@@ -287,7 +287,7 @@ int AddNeededLib_add(lib_t* maplib, needed_libs_t* neededlibs, library_t* deplib
         return 1;
     }
 
-    if (lib->type == 1) {
+    if (lib->type == LIB_EMULATED) {
         // Need to add library to the linkmap (put here so the link is ordered)
         linkmap_t *lm = addLinkMapLib(lib);
         if(!lm) {
@@ -295,9 +295,9 @@ int AddNeededLib_add(lib_t* maplib, needed_libs_t* neededlibs, library_t* deplib
             printf_log(LOG_DEBUG, "Failure to add lib linkmap\n");
             return 1;
         }
-        lm->l_addr = (Elf64_Addr)GetElfDelta(my_context->elfs[lib->priv.n.elf_index]);
+        lm->l_addr = (Elf64_Addr)GetElfDelta(my_context->elfs[lib->e.elf_index]);
         lm->l_name = lib->name;
-        lm->l_ld = GetDynamicSection(my_context->elfs[lib->priv.n.elf_index]);
+        lm->l_ld = GetDynamicSection(my_context->elfs[lib->e.elf_index]);
     }
     return 0;
 }
diff --git a/src/librarian/library.c b/src/librarian/library.c
index d12b4d3f..1d6fb4bd 100755
--- a/src/librarian/library.c
+++ b/src/librarian/library.c
@@ -82,37 +82,37 @@ int NbDot(const char* name)
 }
 
 void NativeLib_CommonInit(library_t *lib) {
-    lib->priv.w.bridge = NewBridge();
+    lib->w.bridge = NewBridge();
     
-    lib->symbolmap = kh_init(symbolmap);
-    lib->wsymbolmap = kh_init(symbolmap);
-    lib->mysymbolmap = kh_init(symbolmap);
-    lib->wmysymbolmap = kh_init(symbolmap);
-    lib->stsymbolmap = kh_init(symbolmap);
-    lib->symbol2map = kh_init(symbol2map);
-    lib->datamap = kh_init(datamap);
-    lib->wdatamap = kh_init(datamap);
-    lib->mydatamap = kh_init(datamap);
+    lib->w.symbolmap = kh_init(symbolmap);
+    lib->w.wsymbolmap = kh_init(symbolmap);
+    lib->w.mysymbolmap = kh_init(symbolmap);
+    lib->w.wmysymbolmap = kh_init(symbolmap);
+    lib->w.stsymbolmap = kh_init(symbolmap);
+    lib->w.symbol2map = kh_init(symbol2map);
+    lib->w.datamap = kh_init(datamap);
+    lib->w.wdatamap = kh_init(datamap);
+    lib->w.mydatamap = kh_init(datamap);
 }
 
 void EmuLib_Fini(library_t* lib)
 {
-    kh_destroy(mapsymbols, lib->priv.n.mapsymbols);
-    kh_destroy(mapsymbols, lib->priv.n.localsymbols);
+    kh_destroy(mapsymbols, lib->e.mapsymbols);
+    kh_destroy(mapsymbols, lib->e.localsymbols);
 }
 void NativeLib_FinishFini(library_t* lib)
 {
-    if(lib->priv.w.lib)
-        dlclose(lib->priv.w.lib);
-    lib->priv.w.lib = NULL;
-    if(lib->priv.w.altprefix)
-        box_free(lib->priv.w.altprefix);
-    if(lib->priv.w.neededlibs) {
-        for(int i=0; i<lib->priv.w.needed; ++i)
-            box_free(lib->priv.w.neededlibs[i]);
-        box_free(lib->priv.w.neededlibs);
+    if(lib->w.lib)
+        dlclose(lib->w.lib);
+    lib->w.lib = NULL;
+    if(lib->w.altprefix)
+        box_free(lib->w.altprefix);
+    if(lib->w.neededlibs) {
+        for(int i=0; i<lib->w.needed; ++i)
+            box_free(lib->w.neededlibs[i]);
+        box_free(lib->w.neededlibs);
     }
-    FreeBridge(&lib->priv.w.bridge);
+    FreeBridge(&lib->w.bridge);
 }
 
 int WrappedLib_defget(library_t* lib, const char* name, uintptr_t *offs, uintptr_t *sz, int version, const char* vername, int local) {
@@ -131,14 +131,14 @@ int EmuLib_Get(library_t* lib, const char* name, uintptr_t *offs, uintptr_t *sz,
 {
     // symbols...
     uintptr_t start, end;
-    if(GetSymbolStartEnd(lib->priv.n.mapsymbols, name, &start, &end, version, vername, local))
+    if(GetSymbolStartEnd(lib->e.mapsymbols, name, &start, &end, version, vername, local))
     {
         *offs = start;
         *sz = end-start;
         return 1;
     }
     // weak symbols...
-    if(GetSymbolStartEnd(lib->priv.n.weaksymbols, name, &start, &end, version, vername, local))
+    if(GetSymbolStartEnd(lib->e.weaksymbols, name, &start, &end, version, vername, local))
     {
         *offs = start;
         *sz = end-start;
@@ -161,7 +161,7 @@ int WrappedLib_defgetnoweak(library_t* lib, const char* name, uintptr_t *offs, u
 int EmuLib_GetNoWeak(library_t* lib, const char* name, uintptr_t *offs, uintptr_t *sz, int version, const char* vername, int local)
 {
     uintptr_t start, end;
-    if(GetSymbolStartEnd(lib->priv.n.mapsymbols, name, &start, &end, version, vername, local))
+    if(GetSymbolStartEnd(lib->e.mapsymbols, name, &start, &end, version, vername, local))
     {
         *offs = start;
         *sz = end-start;
@@ -172,7 +172,7 @@ int EmuLib_GetNoWeak(library_t* lib, const char* name, uintptr_t *offs, uintptr_
 int EmuLib_GetLocal(library_t* lib, const char* name, uintptr_t *offs, uintptr_t *sz, int version, const char* vername, int local)
 {
     uintptr_t start, end;
-    if(GetSymbolStartEnd(lib->priv.n.localsymbols, name, &start, &end, version, vername, local))
+    if(GetSymbolStartEnd(lib->e.localsymbols, name, &start, &end, version, vername, local))
     {
         *offs = start;
         *sz = end-start;
@@ -199,15 +199,13 @@ static void initNativeLib(library_t *lib, box64context_t* context) {
                 return; // non blocker...
             }
             printf_log(LOG_INFO, "Using native(wrapped) %s\n", lib->name);
-            lib->priv.w.box64lib = context->box64lib;
-            lib->context = context;
             lib->fini = wrappedlibs[i].fini;
             lib->get = wrappedlibs[i].get;
             lib->getnoweak = wrappedlibs[i].getnoweak;
             lib->getlocal = NativeLib_GetLocal;
-            lib->type = 0;
+            lib->type = LIB_NATIVE;
             // Call librarian to load all dependant elf
-            if(AddNeededLib(context->maplib, &lib->needed, lib, 0, 0, (const char**)lib->priv.w.neededlibs, lib->priv.w.needed, context, thread_get_emu())) {
+            if(AddNeededLib(context->maplib, &lib->needed, lib, 0, 0, (const char**)lib->w.neededlibs, lib->w.needed, context, thread_get_emu())) {
                 printf_log(LOG_NONE, "Error: loading a needed libs in elf %s\n", lib->name);
                 return;
             }
@@ -219,7 +217,7 @@ static void initNativeLib(library_t *lib, box64context_t* context) {
                 break;
             }
             struct link_map real_lm;
-            if(dlinfo(lib->priv.w.lib, RTLD_DI_LINKMAP, &real_lm)) {
+            if(dlinfo(lib->w.lib, RTLD_DI_LINKMAP, &real_lm)) {
                 printf_log(LOG_DEBUG, "Failed to dlinfo lib %s\n", lib->name);
             }
             lm->l_addr = real_lm.l_addr;
@@ -269,15 +267,16 @@ static int loadEmulatedLib(const char* libname, library_t *lib, box64context_t*
 
         ElfAttachLib(elf_header, lib);
 
-        lib->type = 1;
+        lib->type = LIB_EMULATED;
         lib->fini = EmuLib_Fini;
         lib->get = EmuLib_Get;
         lib->getnoweak = EmuLib_GetNoWeak;
         lib->getlocal = EmuLib_GetLocal;
-        lib->priv.n.elf_index = mainelf;
-        lib->priv.n.mapsymbols = kh_init(mapsymbols);
-        lib->priv.n.weaksymbols = kh_init(mapsymbols);
-        lib->priv.n.localsymbols = kh_init(mapsymbols);
+        lib->e.elf_index = mainelf;
+        lib->e.elf = elf_header;
+        lib->e.mapsymbols = kh_init(mapsymbols);
+        lib->e.weaksymbols = kh_init(mapsymbols);
+        lib->e.localsymbols = kh_init(mapsymbols);
 
         if(lib->path && strcmp(lib->path, libname)) {
             box_free(lib->path);
@@ -349,8 +348,7 @@ library_t *NewLibrary(const char* path, box64context_t* context)
     else
         lib->name = Path2Name(path);
     lib->nbdot = NbDot(lib->name);
-    lib->context = context;
-    lib->type = -1;
+    lib->type = LIB_UNNKNOW;
     printf_log(LOG_DEBUG, "Simplified name is \"%s\"\n", lib->name);
     if(box64_nopulse) {
         if(strstr(lib->name, "libpulse.so")==lib->name || strstr(lib->name, "libpulse-simple.so")==lib->name) {
@@ -383,20 +381,19 @@ library_t *NewLibrary(const char* path, box64context_t* context)
     if(!notwrapped && !precise)
         initNativeLib(lib, context);
     // then look for a native one
-    if(lib->type==-1)
+    if(lib->type==LIB_UNNKNOW)
         initEmulatedLib(path, lib, context);
     // still not loaded but notwrapped indicated: use wrapped...
-    if(lib->type==-1 && notwrapped && !precise)
+    if(lib->type==LIB_UNNKNOW && notwrapped && !precise)
         initNativeLib(lib, context);
     // nothing loaded, so error...
-    if(lib->type==-1)
+    if(lib->type==LIB_UNNKNOW)
     {
         box_free(lib->name);
         box_free(lib->path);
         box_free(lib);
         return NULL;
     }
-
     lib->bridgemap = kh_init(bridgemap);
 
     return lib;
@@ -406,10 +403,10 @@ int AddSymbolsLibrary(lib_t *maplib, library_t* lib, x64emu_t* emu)
     (void)emu;
 
     lib->active = 1;
-    if(lib->type==1) {
-        elfheader_t *elf_header = lib->context->elfs[lib->priv.n.elf_index];
+    if(lib->type==LIB_EMULATED) {
+        elfheader_t *elf_header = lib->e.elf;
         // add symbols
-        AddSymbols(maplib, lib->priv.n.mapsymbols, lib->priv.n.weaksymbols, lib->priv.n.localsymbols, elf_header);
+        AddSymbols(maplib, lib->e.mapsymbols, lib->e.weaksymbols, lib->e.localsymbols, elf_header);
     }
     return 0;
 }
@@ -417,11 +414,11 @@ int FinalizeLibrary(library_t* lib, lib_t* local_maplib, int bindnow, x64emu_t*
 {
     if(!lib)
         return 0;
-    if(lib->type==1) {
-        if(lib->priv.n.finalized)
+    if(lib->type==LIB_EMULATED) {
+        if(lib->e.finalized)
             return 0;
-        lib->priv.n.finalized = 1;
-        elfheader_t *elf_header = my_context->elfs[lib->priv.n.elf_index];
+        lib->e.finalized = 1;
+        elfheader_t *elf_header = my_context->elfs[lib->e.elf_index];
         // finalize relocations
         if(RelocateElf(my_context->maplib, local_maplib, bindnow, elf_header)) {
             printf_log(LOG_NONE, "Error: relocating symbols in elf %s\n", lib->name);
@@ -454,16 +451,16 @@ int FinalizeLibrary(library_t* lib, lib_t* local_maplib, int bindnow, x64emu_t*
 int ReloadLibrary(library_t* lib, x64emu_t* emu)
 {
     lib->active = 1;
-    if(lib->type==1) {
-        elfheader_t *elf_header = lib->context->elfs[lib->priv.n.elf_index];
+    if(lib->type==LIB_EMULATED) {
+        elfheader_t *elf_header = lib->e.elf;
         // reload image in memory and re-run the mapping
         char libname[MAX_PATH];
         strcpy(libname, lib->path);
         int found = FileExist(libname, IS_FILE);
         if(!found && !strchr(lib->path, '/'))
-            for(int i=0; i<lib->context->box64_ld_lib.size; ++i)
+            for(int i=0; i<my_context->box64_ld_lib.size; ++i)
             {
-                strcpy(libname, lib->context->box64_ld_lib.paths[i]);
+                strcpy(libname, my_context->box64_ld_lib.paths[i]);
                 strcat(libname, lib->path);
                 if(FileExist(libname, IS_FILE))
                     break;
@@ -477,7 +474,7 @@ int ReloadLibrary(library_t* lib, x64emu_t* emu)
             printf_log(LOG_NONE, "Error: cannot open file to re-load elf %s (errno=%d/%s)\n", libname, errno, strerror(errno));
             return 1;   // failed to reload...
         }
-        if(ReloadElfMemory(f, lib->context, elf_header)) {
+        if(ReloadElfMemory(f, my_context, elf_header)) {
             printf_log(LOG_NONE, "Error: re-loading in memory elf %s\n", libname);
             fclose(f);
             return 1;
@@ -485,11 +482,11 @@ int ReloadLibrary(library_t* lib, x64emu_t* emu)
         // can close the file now
         fclose(f);
         // should bindnow be store in a per/library basis?
-        if(RelocateElf(lib->context->maplib, lib->maplib, 0, elf_header)) {
+        if(RelocateElf(my_context->maplib, lib->maplib, 0, elf_header)) {
             printf_log(LOG_NONE, "Error: relocating symbols in elf %s\n", lib->name);
             return 1;
         }
-        RelocateElfPlt(lib->context->maplib, lib->maplib, 0, elf_header);
+        RelocateElfPlt(my_context->maplib, lib->maplib, 0, elf_header);
         // init (will use PltRelocator... because some other libs are not yet resolved)
         RunElfInit(elf_header, emu);
     }
@@ -505,15 +502,15 @@ void Free1Library(library_t **lib, x64emu_t* emu)
 {
     if(!(*lib)) return;
 
-    if((*lib)->type==1 && emu) {
-        elfheader_t *elf_header = (*lib)->context->elfs[(*lib)->priv.n.elf_index];
+    if((*lib)->type==LIB_EMULATED && emu) {
+        elfheader_t *elf_header = (*lib)->e.elf;
         RunElfFini(elf_header, emu);
     }
 
     if((*lib)->maplib)
         FreeLibrarian(&(*lib)->maplib, emu);
 
-    if((*lib)->type!=-1 && (*lib)->fini) {
+    if((*lib)->type!=LIB_UNNKNOW && (*lib)->fini) {
         (*lib)->fini(*lib);
     }
     box_free((*lib)->name);
@@ -527,24 +524,26 @@ void Free1Library(library_t **lib, x64emu_t* emu)
         );
         kh_destroy(bridgemap, (*lib)->bridgemap);
     }
-    if((*lib)->symbolmap)
-        kh_destroy(symbolmap, (*lib)->symbolmap);
-    if((*lib)->wsymbolmap)
-        kh_destroy(symbolmap, (*lib)->wsymbolmap);
-    if((*lib)->datamap)
-        kh_destroy(datamap, (*lib)->datamap);
-    if((*lib)->wdatamap)
-        kh_destroy(datamap, (*lib)->wdatamap);
-    if((*lib)->mydatamap)
-        kh_destroy(datamap, (*lib)->mydatamap);
-    if((*lib)->mysymbolmap)
-        kh_destroy(symbolmap, (*lib)->mysymbolmap);
-    if((*lib)->wmysymbolmap)
-        kh_destroy(symbolmap, (*lib)->wmysymbolmap);
-    if((*lib)->stsymbolmap)
-        kh_destroy(symbolmap, (*lib)->stsymbolmap);
-    if((*lib)->symbol2map)
-        kh_destroy(symbol2map, (*lib)->symbol2map);
+    if((*lib)->type == LIB_NATIVE) {
+        if((*lib)->w.symbolmap)
+            kh_destroy(symbolmap, (*lib)->w.symbolmap);
+        if((*lib)->w.wsymbolmap)
+            kh_destroy(symbolmap, (*lib)->w.wsymbolmap);
+        if((*lib)->w.datamap)
+            kh_destroy(datamap, (*lib)->w.datamap);
+        if((*lib)->w.wdatamap)
+            kh_destroy(datamap, (*lib)->w.wdatamap);
+        if((*lib)->w.mydatamap)
+            kh_destroy(datamap, (*lib)->w.mydatamap);
+        if((*lib)->w.mysymbolmap)
+            kh_destroy(symbolmap, (*lib)->w.mysymbolmap);
+        if((*lib)->w.wmysymbolmap)
+            kh_destroy(symbolmap, (*lib)->w.wmysymbolmap);
+        if((*lib)->w.stsymbolmap)
+            kh_destroy(symbolmap, (*lib)->w.stsymbolmap);
+        if((*lib)->w.symbol2map)
+            kh_destroy(symbol2map, (*lib)->w.symbol2map);
+    }
     free_neededlib(&(*lib)->needed);
     free_neededlib(&(*lib)->depended);
 
@@ -562,7 +561,7 @@ int IsSameLib(library_t* lib, const char* path)
     if(!lib) 
         return 0;
     char* name = Path2Name(path);
-    if(!strchr(path, '/') || lib->type==0 || !lib->path) {
+    if(!strchr(path, '/') || lib->type==LIB_NATIVE || !lib->path) {
         if(strcmp(name, lib->name)==0)
             ret=1;
     } else {
@@ -661,52 +660,52 @@ int GetLibLocalSymbolStartEnd(library_t* lib, const char* name, uintptr_t* start
 }
 int GetElfIndex(library_t* lib)
 {
-    if(!lib || lib->type!=1)
+    if(!lib || lib->type!=LIB_EMULATED)
         return -1;
-    return lib->priv.n.elf_index;
+    return lib->e.elf_index;
 }
 
 static int getSymbolInDataMaps(library_t*lib, const char* name, int noweak, uintptr_t *addr, uintptr_t *size)
 {
     void* symbol;
-    khint_t k = kh_get(datamap, lib->datamap, name);
-    if (k!=kh_end(lib->datamap)) {
-        symbol = dlsym(lib->priv.w.lib, kh_key(lib->datamap, k));
+    khint_t k = kh_get(datamap, lib->w.datamap, name);
+    if (k!=kh_end(lib->w.datamap)) {
+        symbol = dlsym(lib->w.lib, kh_key(lib->w.datamap, k));
         if(symbol) {
             // found!
             *addr = (uintptr_t)symbol;
-            *size = kh_value(lib->datamap, k);
+            *size = kh_value(lib->w.datamap, k);
             return 1;
         }
     }
     if(!noweak) {
-        k = kh_get(datamap, lib->wdatamap, name);
-        if (k!=kh_end(lib->wdatamap)) {
-            symbol = dlsym(lib->priv.w.lib, kh_key(lib->wdatamap, k));
+        k = kh_get(datamap, lib->w.wdatamap, name);
+        if (k!=kh_end(lib->w.wdatamap)) {
+            symbol = dlsym(lib->w.lib, kh_key(lib->w.wdatamap, k));
             if(symbol) {
                 // found!
                 *addr = (uintptr_t)symbol;
-                *size = kh_value(lib->wdatamap, k);
+                *size = kh_value(lib->w.wdatamap, k);
                 return 1;
             }
         }
     }
     // check in mydatamap
-    k = kh_get(datamap, lib->mydatamap, name);
-    if (k!=kh_end(lib->mydatamap)) {
+    k = kh_get(datamap, lib->w.mydatamap, name);
+    if (k!=kh_end(lib->w.mydatamap)) {
         char buff[200];
         if(lib->altmy)
             strcpy(buff, lib->altmy);
         else
             strcpy(buff, "my_");
         strcat(buff, name);
-        symbol = dlsym(lib->priv.w.box64lib, buff);
+        symbol = dlsym(my_context->box64lib, buff);
         if(!symbol)
             printf_log(LOG_NONE, "Warning, data %s not found\n", buff);
         if(symbol) {
             // found!
             *addr = (uintptr_t)symbol;
-            *size = kh_value(lib->mydatamap, k);
+            *size = kh_value(lib->w.mydatamap, k);
             return 1;
         }
     }
@@ -716,130 +715,130 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui
 {
     void* symbol;
     // check in mysymbolmap
-    khint_t k = kh_get(symbolmap, lib->mysymbolmap, name);
-    if (k!=kh_end(lib->mysymbolmap)) {
+    khint_t k = kh_get(symbolmap, lib->w.mysymbolmap, name);
+    if (k!=kh_end(lib->w.mysymbolmap)) {
         char buff[200];
         if(lib->altmy)
             strcpy(buff, lib->altmy);
         else
             strcpy(buff, "my_");
         strcat(buff, name);
-        symbol = dlsym(lib->priv.w.box64lib, buff);
+        symbol = dlsym(my_context->box64lib, buff);
         if(!symbol) {
             printf_log(LOG_NONE, "Warning, function %s not found\n", buff);
         } else 
-            AddOffsetSymbol(lib->context->maplib, symbol, name);
-        *addr = AddBridge(lib->priv.w.bridge, kh_value(lib->mysymbolmap, k), symbol, 0, name);
+            AddOffsetSymbol(my_context->maplib, symbol, name);
+        *addr = AddBridge(lib->w.bridge, kh_value(lib->w.mysymbolmap, k), symbol, 0, name);
         *size = sizeof(void*);
         return 1;
     }
     // check in stsymbolmap (return struct...)
-    k = kh_get(symbolmap, lib->stsymbolmap, name);
-    if (k!=kh_end(lib->stsymbolmap)) {
+    k = kh_get(symbolmap, lib->w.stsymbolmap, name);
+    if (k!=kh_end(lib->w.stsymbolmap)) {
         char buff[200];
         if(lib->altmy)
             strcpy(buff, lib->altmy);
         else
             strcpy(buff, "my_");
         strcat(buff, name);
-        symbol = dlsym(lib->priv.w.box64lib, buff);
+        symbol = dlsym(my_context->box64lib, buff);
         if(!symbol) {
             printf_log(LOG_NONE, "Warning, function %s not found\n", buff);
         } else 
-            AddOffsetSymbol(lib->context->maplib, symbol, name);
-        *addr = AddBridge(lib->priv.w.bridge, kh_value(lib->stsymbolmap, k), symbol, sizeof(void*), name);
+            AddOffsetSymbol(my_context->maplib, symbol, name);
+        *addr = AddBridge(lib->w.bridge, kh_value(lib->w.stsymbolmap, k), symbol, sizeof(void*), name);
         *size = sizeof(void*);
         return 1;
     }
     // check in symbolmap
-    k = kh_get(symbolmap, lib->symbolmap, name);
-    if (k!=kh_end(lib->symbolmap)) {
-        symbol = dlsym(lib->priv.w.lib, name);
-        if(!symbol && lib->priv.w.altprefix) {
+    k = kh_get(symbolmap, lib->w.symbolmap, name);
+    if (k!=kh_end(lib->w.symbolmap)) {
+        symbol = dlsym(lib->w.lib, name);
+        if(!symbol && lib->w.altprefix) {
             char newname[200];
-            strcpy(newname, lib->priv.w.altprefix);
+            strcpy(newname, lib->w.altprefix);
             strcat(newname, name);
-            symbol = dlsym(lib->priv.w.lib, newname);
+            symbol = dlsym(lib->w.lib, newname);
         }
         if(!symbol)
-            symbol = GetNativeSymbolUnversionned(lib->priv.w.lib, name);
-        if(!symbol && lib->priv.w.altprefix) {
+            symbol = GetNativeSymbolUnversionned(lib->w.lib, name);
+        if(!symbol && lib->w.altprefix) {
             char newname[200];
-            strcpy(newname, lib->priv.w.altprefix);
+            strcpy(newname, lib->w.altprefix);
             strcat(newname, name);
-            symbol = GetNativeSymbolUnversionned(lib->priv.w.lib, newname);
+            symbol = GetNativeSymbolUnversionned(lib->w.lib, newname);
         }
         if(!symbol) {
             printf_log(LOG_INFO, "Warning, function %s not found in lib %s\n", name, lib->name);
             return 0;
         } else 
-            AddOffsetSymbol(lib->context->maplib, symbol, name);
-        *addr = AddBridge(lib->priv.w.bridge, kh_value(lib->symbolmap, k), symbol, 0, name);
+            AddOffsetSymbol(my_context->maplib, symbol, name);
+        *addr = AddBridge(lib->w.bridge, kh_value(lib->w.symbolmap, k), symbol, 0, name);
         *size = sizeof(void*);
         return 1;
     }
     if(!noweak) {
         // check in wmysymbolmap
-        khint_t k = kh_get(symbolmap, lib->wmysymbolmap, name);
-        if (k!=kh_end(lib->wmysymbolmap)) {
+        khint_t k = kh_get(symbolmap, lib->w.wmysymbolmap, name);
+        if (k!=kh_end(lib->w.wmysymbolmap)) {
             char buff[200];
             if(lib->altmy)
                 strcpy(buff, lib->altmy);
             else
                 strcpy(buff, "my_");
             strcat(buff, name);
-            symbol = dlsym(lib->priv.w.box64lib, buff);
+            symbol = dlsym(my_context->box64lib, buff);
             if(!symbol) {
                 printf_log(LOG_NONE, "Warning, function %s not found\n", buff);
             } else 
-                AddOffsetSymbol(lib->context->maplib, symbol, name);
-            *addr = AddBridge(lib->priv.w.bridge, kh_value(lib->wmysymbolmap, k), symbol, 0, name);
+                AddOffsetSymbol(my_context->maplib, symbol, name);
+            *addr = AddBridge(lib->w.bridge, kh_value(lib->w.wmysymbolmap, k), symbol, 0, name);
             *size = sizeof(void*);
             return 1;
         }
-        k = kh_get(symbolmap, lib->wsymbolmap, name);
-        if (k!=kh_end(lib->wsymbolmap)) {
-            symbol = dlsym(lib->priv.w.lib, name);
-            if(!symbol && lib->priv.w.altprefix) {
+        k = kh_get(symbolmap, lib->w.wsymbolmap, name);
+        if (k!=kh_end(lib->w.wsymbolmap)) {
+            symbol = dlsym(lib->w.lib, name);
+            if(!symbol && lib->w.altprefix) {
                 char newname[200];
-                strcpy(newname, lib->priv.w.altprefix);
+                strcpy(newname, lib->w.altprefix);
                 strcat(newname, name);
-                symbol = dlsym(lib->priv.w.lib, newname);
+                symbol = dlsym(lib->w.lib, newname);
             }
             if(!symbol)
-                symbol = GetNativeSymbolUnversionned(lib->priv.w.lib, name);
-            if(!symbol && lib->priv.w.altprefix) {
+                symbol = GetNativeSymbolUnversionned(lib->w.lib, name);
+            if(!symbol && lib->w.altprefix) {
                 char newname[200];
-                strcpy(newname, lib->priv.w.altprefix);
+                strcpy(newname, lib->w.altprefix);
                 strcat(newname, name);
-                symbol = GetNativeSymbolUnversionned(lib->priv.w.lib, newname);
+                symbol = GetNativeSymbolUnversionned(lib->w.lib, newname);
             }
             if(!symbol) {
                 printf_log(LOG_INFO, "Warning, function %s not found in lib %s\n", name, lib->name);
                 return 0;
             } else 
-                AddOffsetSymbol(lib->context->maplib, symbol, name);
-            *addr = AddBridge(lib->priv.w.bridge, kh_value(lib->wsymbolmap, k), symbol, 0, name);
+                AddOffsetSymbol(my_context->maplib, symbol, name);
+            *addr = AddBridge(lib->w.bridge, kh_value(lib->w.wsymbolmap, k), symbol, 0, name);
             *size = sizeof(void*);
             return 1;
         }
     }
     // check in symbol2map
-    k = kh_get(symbol2map, lib->symbol2map, name);
-    if (k!=kh_end(lib->symbol2map)) 
-        if(!noweak || !kh_value(lib->symbol2map, k).weak)
+    k = kh_get(symbol2map, lib->w.symbol2map, name);
+    if (k!=kh_end(lib->w.symbol2map)) 
+        if(!noweak || !kh_value(lib->w.symbol2map, k).weak)
         {
-            symbol = dlsym(lib->priv.w.lib, kh_value(lib->symbol2map, k).name);
+            symbol = dlsym(lib->w.lib, kh_value(lib->w.symbol2map, k).name);
             if(!symbol)
-                symbol = dlsym(RTLD_DEFAULT, kh_value(lib->symbol2map, k).name);    // search globaly maybe
+                symbol = dlsym(RTLD_DEFAULT, kh_value(lib->w.symbol2map, k).name);    // search globaly maybe
             if(!symbol)
-                symbol = GetNativeSymbolUnversionned(lib->priv.w.lib, kh_value(lib->symbol2map, k).name);
+                symbol = GetNativeSymbolUnversionned(lib->w.lib, kh_value(lib->w.symbol2map, k).name);
             if(!symbol) {
-                printf_log(LOG_INFO, "Warning, function %s not found in lib %s\n", kh_value(lib->symbol2map, k).name, lib->name);
+                printf_log(LOG_INFO, "Warning, function %s not found in lib %s\n", kh_value(lib->w.symbol2map, k).name, lib->name);
                 return 0;
             } else 
-                AddOffsetSymbol(lib->context->maplib, symbol, name);
-            *addr = AddBridge(lib->priv.w.bridge, kh_value(lib->symbol2map, k).w, symbol, 0, name);
+                AddOffsetSymbol(my_context->maplib, symbol, name);
+            *addr = AddBridge(lib->w.bridge, kh_value(lib->w.symbol2map, k).w, symbol, 0, name);
             *size = sizeof(void*);
             return 1;
         }
@@ -884,9 +883,9 @@ void* GetHandle(library_t* lib)
 {
     if(!lib)
         return NULL;
-    if(lib->type!=0)
+    if(lib->type!=LIB_NATIVE)
         return NULL;
-    return lib->priv.w.lib;
+    return lib->w.lib;
 }
 
 lib_t* GetMaplib(library_t* lib)
@@ -943,14 +942,14 @@ void AddMainElfToLinkmap(elfheader_t* elf)
 
 void setNeededLibs(library_t* lib, int n, ...)
 {
-    if(lib->type!=0 && lib->type!=-1)
+    if(lib->type!=LIB_NATIVE && lib->type!=LIB_UNNKNOW)
         return;
-    lib->priv.w.needed = n;
-    lib->priv.w.neededlibs = (char**)box_calloc(n, sizeof(char*));
+    lib->w.needed = n;
+    lib->w.neededlibs = (char**)box_calloc(n, sizeof(char*));
     va_list va;
     va_start (va, n);
     for (int i=0; i<n; ++i) {
-        lib->priv.w.neededlibs[i] = box_strdup(va_arg(va, char*));
+        lib->w.neededlibs[i] = box_strdup(va_arg(va, char*));
     }
     va_end (va);
 }
\ No newline at end of file
diff --git a/src/librarian/library_private.h b/src/librarian/library_private.h
index ebe4d027..f6908cf6 100755
--- a/src/librarian/library_private.h
+++ b/src/librarian/library_private.h
@@ -35,19 +35,29 @@ typedef struct wlib_s {
     bridge_t        *bridge;
     void*           lib;        // dlopen result
     void*           priv;       // actual private
-    void*           box64lib;   // ref to the dlopen on box64 itself from context
     char*           altprefix;  // if function names are mangled..
     int             needed;
     char**          neededlibs;
+    kh_symbolmap_t  *symbolmap;
+    kh_symbolmap_t  *wsymbolmap;
+    kh_symbolmap_t  *mysymbolmap;
+    kh_symbolmap_t  *wmysymbolmap;
+    kh_symbolmap_t  *stsymbolmap;
+    kh_symbol2map_t *symbol2map;
+    kh_datamap_t    *datamap;
+    kh_datamap_t    *wdatamap;
+    kh_datamap_t    *mydatamap;
+    char            *altmy;      // to avoid duplicate symbol, like with SDL1/SDL2
 } wlib_t;
 
-typedef struct nlib_s {
+typedef struct elib_s {
     int             elf_index;
+    elfheader_t     *elf;
     int             finalized;
     kh_mapsymbols_t *mapsymbols;
     kh_mapsymbols_t *weaksymbols;
     kh_mapsymbols_t *localsymbols;
-} nlib_t;
+} elib_t;
 
 typedef struct library_s {
     char*               name;   // <> path
@@ -61,23 +71,13 @@ typedef struct library_s {
     wrappedlib_get_t    getlocal;
     union {
         wlib_t  w;     
-        nlib_t  n;
-    }                   priv;       // private lib data
-    box64context_t      *context;   // parent context
-    kh_bridgemap_t      *bridgemap;
-    kh_symbolmap_t      *symbolmap;
-    kh_symbolmap_t      *wsymbolmap;
-    kh_symbolmap_t      *mysymbolmap;
-    kh_symbolmap_t      *wmysymbolmap;
-    kh_symbolmap_t      *stsymbolmap;
-    kh_symbol2map_t     *symbol2map;
-    kh_datamap_t        *datamap;
-    kh_datamap_t        *wdatamap;
-    kh_datamap_t        *mydatamap;
+        elib_t  e;
+    };                              // private lib data
     char                *altmy;     // to avoid duplicate symbol, like with SDL1/SDL2
     needed_libs_t       needed;
     needed_libs_t       depended;   // used to free library
     lib_t               *maplib;    // local maplib, for dlopen'd library with LOCAL binding (most of the dlopen)
+    kh_bridgemap_t  *bridgemap;
 } library_t;
 
 // type for map elements
diff --git a/src/libtools/obstack.c b/src/libtools/obstack.c
index c090005a..3ebd770a 100755
--- a/src/libtools/obstack.c
+++ b/src/libtools/obstack.c
@@ -65,12 +65,12 @@ static void* findchunkfunFct(void* fct)
 static void* reverse_chunkfunFct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_chunkfun_##A == fct) return (void*)my_chunkfun_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, pFL, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, pFL, fct, 0, NULL);
 }
 // freefun
 #define GO(A)   \
@@ -98,12 +98,12 @@ static void* findfreefunFct(void* fct)
 static void* reverse_freefunFct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_freefun_##A == fct) return (void*)my_freefun_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, vFp, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, vFp, fct, 0, NULL);
 }
 
 #undef SUPER
diff --git a/src/wrapped/wrappedbz2.c b/src/wrapped/wrappedbz2.c
index a5b0e5ae..e3ff920e 100755
--- a/src/wrapped/wrappedbz2.c
+++ b/src/wrapped/wrappedbz2.c
@@ -57,12 +57,12 @@ static void* find_alloc_Fct(void* fct)
 static void* reverse_alloc_Fct(void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(my_lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(my_lib->priv.w.bridge, fct);
+    if(CheckBridged(my_lib->w.bridge, fct))
+        return (void*)CheckBridged(my_lib->w.bridge, fct);
     #define GO(A) if(my_alloc_##A == fct) return (void*)my_alloc_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(my_lib->priv.w.bridge, pFpii, fct, 0, NULL);
+    return (void*)AddBridge(my_lib->w.bridge, pFpii, fct, 0, NULL);
 }
 // free ...
 #define GO(A)   \
@@ -89,12 +89,12 @@ static void* find_free_Fct(void* fct)
 static void* reverse_free_Fct(void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(my_lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(my_lib->priv.w.bridge, fct);
+    if(CheckBridged(my_lib->w.bridge, fct))
+        return (void*)CheckBridged(my_lib->w.bridge, fct);
     #define GO(A) if(my_free_##A == fct) return (void*)my_free_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(my_lib->priv.w.bridge, vFpp, fct, 0, NULL);
+    return (void*)AddBridge(my_lib->w.bridge, vFpp, fct, 0, NULL);
 }
 #undef SUPER
 
diff --git a/src/wrapped/wrappedcrashhandler.c b/src/wrapped/wrappedcrashhandler.c
index 115e3150..c6f625df 100755
--- a/src/wrapped/wrappedcrashhandler.c
+++ b/src/wrapped/wrappedcrashhandler.c
@@ -24,7 +24,7 @@ const char* crashhandlerName = "crashhandler.so";
     if(!box64_steam)                                            \
         return -1;                                              \
     if(1)                                                       \
-        lib->priv.w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);\
+        lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);\
     else
 
 
diff --git a/src/wrapped/wrappedglib2.c b/src/wrapped/wrappedglib2.c
index 48742b67..0c5663bc 100755
--- a/src/wrapped/wrappedglib2.c
+++ b/src/wrapped/wrappedglib2.c
@@ -816,7 +816,7 @@ EXPORT void* my_g_main_context_get_poll_func(x64emu_t* emu, void* context)
     void* r = reversePollFct(ret);
     if(r) return r;
     // needs to bridge....
-    return (void*)AddCheckBridge(my_lib->priv.w.bridge, iFpui, ret, 0, NULL);
+    return (void*)AddCheckBridge(my_lib->w.bridge, iFpui, ret, 0, NULL);
 }
     
 EXPORT void my_g_main_context_set_poll_func(x64emu_t* emu, void* context, void* func)
diff --git a/src/wrapped/wrappedgobject2.c b/src/wrapped/wrappedgobject2.c
index c4f95265..b70c6db0 100755
--- a/src/wrapped/wrappedgobject2.c
+++ b/src/wrapped/wrappedgobject2.c
@@ -127,7 +127,7 @@ static void signal_delete(my_signal_t* sig, void* b)
 
 static void addGObject2Alternate(library_t* lib)
 {
-    #define GO(A, W) AddAutomaticBridge(thread_get_emu(), lib->priv.w.bridge, W, dlsym(lib->priv.w.lib, #A), 0)
+    #define GO(A, W) AddAutomaticBridge(thread_get_emu(), lib->w.bridge, W, dlsym(lib->w.lib, #A), 0)
     GO(g_cclosure_marshal_VOID__VOID,               vFppuppp);
     GO(g_cclosure_marshal_VOID__BOOLEAN,            vFppuppp);
     GO(g_cclosure_marshal_VOID__UCHAR,              vFppuppp);
@@ -173,7 +173,7 @@ static void addGObject2Alternate(library_t* lib)
     GO(g_cclosure_marshal_BOOLEAN__FLAGSv,          vFpppppip);
     GO(g_cclosure_marshal_BOOLEAN__BOXED_BOXEDv,    vFpppppip);
     #undef GO
-    #define GO(A, W) AddAutomaticBridge(thread_get_emu(), lib->priv.w.bridge, W, A, 0)
+    #define GO(A, W) AddAutomaticBridge(thread_get_emu(), lib->w.bridge, W, A, 0)
     GO(signal_cb, iFpppp);
     GO(signal_cb_swapped, iFpppp);
     GO(signal_cb_5, iFppppp);
@@ -220,7 +220,7 @@ EXPORT uintptr_t my_g_signal_connect_data(x64emu_t* emu, void* instance, void* d
 
 EXPORT void* my_g_object_connect(x64emu_t* emu, void* object, void* signal_spec, void** b)
 {
-        //gobject2_my_t *my = (gobject2_my_t*)my_lib->priv.w.p2;
+        //gobject2_my_t *my = (gobject2_my_t*)my_lib->w.p2;
 
     char* spec = (char*)signal_spec;
     while(spec) {
@@ -345,7 +345,7 @@ static void* findMarshalFct(void* fct)
     #define GO(A) if(my_marshal_fct_##A == (uintptr_t)fct) return my_marshal_##A;
     SUPER()
     #undef GO
-    #define GO(A) if(my_marshal_fct_##A == 0) {AddAutomaticBridge(thread_get_emu(), my_lib->priv.w.bridge, vFppuppp, my_marshal_##A, 0); my_marshal_fct_##A = (uintptr_t)fct; return my_marshal_##A; }
+    #define GO(A) if(my_marshal_fct_##A == 0) {AddAutomaticBridge(thread_get_emu(), my_lib->w.bridge, vFppuppp, my_marshal_##A, 0); my_marshal_fct_##A = (uintptr_t)fct; return my_marshal_##A; }
     SUPER()
     #undef GO
     printf_log(LOG_NONE, "Warning, no more slot for gobject Closure Marshal callback\n");
@@ -723,7 +723,7 @@ EXPORT unsigned long my_g_signal_add_emission_hook(x64emu_t* emu, uint32_t signa
 
 EXPORT size_t my_g_type_register_static_simple(x64emu_t* emu, size_t parent, void* name, size_t class_size, void* class_init, size_t instance_size, void* instance_init, int flags)
 {
-        //gobject2_my_t *my = (gobject2_my_t*)my_lib->priv.w.p2;
+        //gobject2_my_t *my = (gobject2_my_t*)my_lib->w.p2;
 
     my_GTypeInfo_t info = {0};
     info.class_size = class_size;
@@ -861,7 +861,7 @@ EXPORT void my_g_signal_override_class_handler(x64emu_t* emu, char* name, void*
         return -1;
 
 #define CUSTOM_INIT \
-    InitGTKClass(lib->priv.w.bridge);       \
+    InitGTKClass(lib->w.bridge);       \
     getMy(lib);                             \
     SetGObjectID(my->g_object_get_type());  \
     SetGTypeName(my->g_type_name);          \
diff --git a/src/wrapped/wrappedgtkx112.c b/src/wrapped/wrappedgtkx112.c
index c7d42e83..4955385c 100755
--- a/src/wrapped/wrappedgtkx112.c
+++ b/src/wrapped/wrappedgtkx112.c
@@ -634,12 +634,12 @@ static void* find_GtkLinkButtonUri_Fct(void* fct)
 static void* reverse_GtkLinkButtonUri_Fct(void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(my_lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(my_lib->priv.w.bridge, fct);
+    if(CheckBridged(my_lib->w.bridge, fct))
+        return (void*)CheckBridged(my_lib->w.bridge, fct);
     #define GO(A) if(my_GtkLinkButtonUri_##A == fct) return (void*)my_GtkLinkButtonUri_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(my_lib->priv.w.bridge, vFppp, fct, 0, NULL);
+    return (void*)AddBridge(my_lib->w.bridge, vFppp, fct, 0, NULL);
 }
 
 #undef SUPER
diff --git a/src/wrapped/wrappedldlinux.c b/src/wrapped/wrappedldlinux.c
index e8c56bc0..1030fc5f 100755
--- a/src/wrapped/wrappedldlinux.c
+++ b/src/wrapped/wrappedldlinux.c
@@ -33,7 +33,7 @@ const char* ldlinuxName = "ld-linux.so.2";
 
 #define PRE_INIT\
     if(1)                                                           \
-        lib->priv.w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);    \
+        lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);    \
     else
 
 // define all standard library functions
diff --git a/src/wrapped/wrappedlib_init.h b/src/wrapped/wrappedlib_init.h
index e19d4352..b61989b0 100755
--- a/src/wrapped/wrappedlib_init.h
+++ b/src/wrapped/wrappedlib_init.h
@@ -122,16 +122,16 @@ int FUNC(_init)(library_t* lib, box64context_t* box64)
     PRE_INIT
 #endif
     {
-        lib->priv.w.lib = dlopen(MAPNAME(Name), RTLD_LAZY | RTLD_GLOBAL);
-        if(!lib->priv.w.lib) {
+        lib->w.lib = dlopen(MAPNAME(Name), RTLD_LAZY | RTLD_GLOBAL);
+        if(!lib->w.lib) {
 #ifdef ALTNAME
-        lib->priv.w.lib = dlopen(ALTNAME, RTLD_LAZY | RTLD_GLOBAL);
-        if(!lib->priv.w.lib)
+        lib->w.lib = dlopen(ALTNAME, RTLD_LAZY | RTLD_GLOBAL);
+        if(!lib->w.lib)
 #endif
 #ifdef ALTNAME2
             {
-            lib->priv.w.lib = dlopen(ALTNAME2, RTLD_LAZY | RTLD_GLOBAL);
-            if(!lib->priv.w.lib)
+            lib->w.lib = dlopen(ALTNAME2, RTLD_LAZY | RTLD_GLOBAL);
+            if(!lib->w.lib)
 #endif
                 return -1;
 #ifdef ALTNAME2
@@ -151,11 +151,11 @@ int FUNC(_init)(library_t* lib, box64context_t* box64)
 	cnt = sizeof(MAPNAME(mapname))/sizeof(map_onesymbol_t);                         \
 	for (int i = 0; i < cnt; ++i) {                                                 \
         if (MAPNAME(mapname)[i].weak) {                                             \
-            k = kh_put(symbolmap, lib->w##mapname, MAPNAME(mapname)[i].name, &ret); \
-            kh_value(lib->w##mapname, k) = MAPNAME(mapname)[i].w;                   \
+            k = kh_put(symbolmap, lib->w.w##mapname, MAPNAME(mapname)[i].name, &ret); \
+            kh_value(lib->w.w##mapname, k) = MAPNAME(mapname)[i].w;                   \
         } else {                                                                    \
-            k = kh_put(symbolmap, lib->mapname, MAPNAME(mapname)[i].name, &ret);    \
-            kh_value(lib->mapname, k) = MAPNAME(mapname)[i].w;                      \
+            k = kh_put(symbolmap, lib->w.mapname, MAPNAME(mapname)[i].name, &ret);    \
+            kh_value(lib->w.mapname, k) = MAPNAME(mapname)[i].w;                      \
         }                                                                           \
         if (strchr(MAPNAME(mapname)[i].name, '@'))                                  \
             AddDictionnary(box64->versym, MAPNAME(mapname)[i].name);                \
@@ -165,34 +165,34 @@ int FUNC(_init)(library_t* lib, box64context_t* box64)
 #undef DOIT
     cnt = sizeof(MAPNAME(stsymbolmap))/sizeof(map_onesymbol_t);
     for (int i=0; i<cnt; ++i) {
-        k = kh_put(symbolmap, lib->stsymbolmap, MAPNAME(stsymbolmap)[i].name, &ret);
-        kh_value(lib->stsymbolmap, k) = MAPNAME(stsymbolmap)[i].w;
+        k = kh_put(symbolmap, lib->w.stsymbolmap, MAPNAME(stsymbolmap)[i].name, &ret);
+        kh_value(lib->w.stsymbolmap, k) = MAPNAME(stsymbolmap)[i].w;
         if(strchr(MAPNAME(stsymbolmap)[i].name, '@'))
             AddDictionnary(box64->versym, MAPNAME(stsymbolmap)[i].name);
     }
     cnt = sizeof(MAPNAME(symbol2map))/sizeof(map_onesymbol2_t);
     for (int i=0; i<cnt; ++i) {
-        k = kh_put(symbol2map, lib->symbol2map, MAPNAME(symbol2map)[i].name, &ret);
-        kh_value(lib->symbol2map, k).name = MAPNAME(symbol2map)[i].name2;
-        kh_value(lib->symbol2map, k).w = MAPNAME(symbol2map)[i].w;
-        kh_value(lib->symbol2map, k).weak = MAPNAME(symbol2map)[i].weak;
+        k = kh_put(symbol2map, lib->w.symbol2map, MAPNAME(symbol2map)[i].name, &ret);
+        kh_value(lib->w.symbol2map, k).name = MAPNAME(symbol2map)[i].name2;
+        kh_value(lib->w.symbol2map, k).w = MAPNAME(symbol2map)[i].w;
+        kh_value(lib->w.symbol2map, k).weak = MAPNAME(symbol2map)[i].weak;
         if(strchr(MAPNAME(symbol2map)[i].name, '@'))
             AddDictionnary(box64->versym, MAPNAME(symbol2map)[i].name);
     }
     cnt = sizeof(MAPNAME(datamap))/sizeof(map_onedata_t);
     for (int i=0; i<cnt; ++i) {
         if(MAPNAME(datamap)[i].weak) {
-            k = kh_put(datamap, lib->wdatamap, MAPNAME(datamap)[i].name, &ret);
-            kh_value(lib->wdatamap, k) = MAPNAME(datamap)[i].sz;
+            k = kh_put(datamap, lib->w.wdatamap, MAPNAME(datamap)[i].name, &ret);
+            kh_value(lib->w.wdatamap, k) = MAPNAME(datamap)[i].sz;
         } else {
-            k = kh_put(datamap, lib->datamap, MAPNAME(datamap)[i].name, &ret);
-            kh_value(lib->datamap, k) = MAPNAME(datamap)[i].sz;
+            k = kh_put(datamap, lib->w.datamap, MAPNAME(datamap)[i].name, &ret);
+            kh_value(lib->w.datamap, k) = MAPNAME(datamap)[i].sz;
         }
     }
     cnt = sizeof(MAPNAME(mydatamap))/sizeof(map_onedata_t);
     for (int i=0; i<cnt; ++i) {
-        k = kh_put(datamap, lib->mydatamap, MAPNAME(mydatamap)[i].name, &ret);
-        kh_value(lib->mydatamap, k) = MAPNAME(mydatamap)[i].sz;
+        k = kh_put(datamap, lib->w.mydatamap, MAPNAME(mydatamap)[i].name, &ret);
+        kh_value(lib->w.mydatamap, k) = MAPNAME(mydatamap)[i].sz;
     }
 #ifdef CUSTOM_INIT
     CUSTOM_INIT
diff --git a/src/wrapped/wrappedlibasound.c b/src/wrapped/wrappedlibasound.c
index 54d55804..6d7420c6 100755
--- a/src/wrapped/wrappedlibasound.c
+++ b/src/wrapped/wrappedlibasound.c
@@ -138,11 +138,9 @@ EXPORT void* my_snd_dlsym(x64emu_t* emu, void* handle, void* name, void* version
 }
 
 #define CUSTOM_INIT                     \
-    box64->asound = lib;                \
     getMy(lib);
 
 #define CUSTOM_FINI                     \
-    lib->context->asound = NULL;        \
     freeMy();
 
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index 37a6b175..630b5cd1 100755
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -987,7 +987,7 @@ EXPORT void my__ITM_addUserCommitAction(x64emu_t* emu, void* cb, uint32_t b, voi
     // disabled for now... Are all this _ITM_ stuff really mendatory?
     #if 0
     // quick and dirty... Should store the callback to be removed later....
-    libc_my_t *my = (libc_my_t *)emu->context->libclib->priv.w.p2;
+    libc_my_t *my = (libc_my_t *)emu->context->libclib->w.p2;
     x64emu_t *cbemu = AddCallback(emu, (uintptr_t)cb, 1, c, NULL, NULL, NULL);
     my->_ITM_addUserCommitAction(libc1ArgCallback, b, cbemu);
     // should keep track of cbemu to remove at some point...
@@ -1227,7 +1227,7 @@ EXPORT void* my_readdir(x64emu_t* emu, void* dirp)
         if(!f) {
             library_t* lib = my_lib;
             if(!lib) return NULL;
-            f = (pFp_t)dlsym(lib->priv.w.lib, "readdir");
+            f = (pFp_t)dlsym(lib->w.lib, "readdir");
         }
 
         return f(dirp);
@@ -1247,7 +1247,7 @@ EXPORT int32_t my_readdir_r(x64emu_t* emu, void* dirp, void* entry, void** resul
                 *result = NULL;
                 return 0;
             }
-            f = (iFppp_t)dlsym(lib->priv.w.lib, "readdir64_r");
+            f = (iFppp_t)dlsym(lib->w.lib, "readdir64_r");
         }
 
         int r = f(dirp, &d64, &dp64);
@@ -1283,7 +1283,7 @@ EXPORT int32_t my_readdir_r(x64emu_t* emu, void* dirp, void* entry, void** resul
                 *result = NULL;
                 return 0;
             }
-            f = (iFppp_t)dlsym(lib->priv.w.lib, "readdir_r");
+            f = (iFppp_t)dlsym(lib->w.lib, "readdir_r");
         }
 
         return f(dirp, entry, result);
@@ -1592,7 +1592,7 @@ EXPORT int32_t my_ftw(x64emu_t* emu, void* pathname, void* B, int32_t nopenfd)
     if(!f) {
         library_t* lib = my_lib;
         if(!lib) return 0;
-        f = (iFppi_t)dlsym(lib->priv.w.lib, "ftw");
+        f = (iFppi_t)dlsym(lib->w.lib, "ftw");
     }
 
     return f(pathname, findftwFct(B), nopenfd);
@@ -1604,7 +1604,7 @@ EXPORT int32_t my_nftw(x64emu_t* emu, void* pathname, void* B, int32_t nopenfd,
     if(!f) {
         library_t* lib = my_lib;
         if(!lib) return 0;
-        f = (iFppii_t)dlsym(lib->priv.w.lib, "nftw");
+        f = (iFppii_t)dlsym(lib->w.lib, "nftw");
     }
 
     return f(pathname, findnftwFct(B), nopenfd, flags);
@@ -2073,7 +2073,7 @@ EXPORT int32_t my_preadv64(x64emu_t* emu, int32_t fd, void* v, int32_t c, int64_
 {
     library_t* lib = my_lib;
     if(!lib) return 0;
-    void* f = dlsym(lib->priv.w.lib, "preadv64");
+    void* f = dlsym(lib->w.lib, "preadv64");
     if(f)
         return ((iFipiI_t)f)(fd, v, c, o);
     return syscall(__NR_preadv, fd, v, c,(uint32_t)(o&0xffffffff), (uint32_t)((o>>32)&0xffffffff));
@@ -2083,7 +2083,7 @@ EXPORT int32_t my_pwritev64(x64emu_t* emu, int32_t fd, void* v, int32_t c, int64
 {
     library_t* lib = my_lib;
     if(!lib) return 0;
-    void* f = dlsym(lib->priv.w.lib, "pwritev64");
+    void* f = dlsym(lib->w.lib, "pwritev64");
     if(f)
         return ((iFipiI_t)f)(fd, v, c, o);
     #ifdef __arm__
@@ -2098,7 +2098,7 @@ EXPORT int32_t my_accept4(x64emu_t* emu, int32_t fd, void* a, void* l, int32_t f
 {
     library_t* lib = my_lib;
     if(!lib) return 0;
-    void* f = dlsym(lib->priv.w.lib, "accept4");
+    void* f = dlsym(lib->w.lib, "accept4");
     if(f)
         return ((iFippi_t)f)(fd, a, l, flags);
     if(!flags)
@@ -2112,7 +2112,7 @@ EXPORT  int32_t my_fallocate64(int fd, int mode, int64_t offs, int64_t len)
     static int done = 0;
     if(!done) {
         library_t* lib = my_lib;
-        f = (iFiiII_t)dlsym(lib->priv.w.lib, "fallocate64");
+        f = (iFiiII_t)dlsym(lib->w.lib, "fallocate64");
         done = 1;
     }
     if(f)
@@ -2521,7 +2521,7 @@ EXPORT int my___libc_alloca_cutoff(x64emu_t* emu, size_t size)
     // not always implemented on old linux version...
     library_t* lib = my_lib;
     if(!lib) return 0;
-    void* f = dlsym(lib->priv.w.lib, "__libc_alloca_cutoff");
+    void* f = dlsym(lib->w.lib, "__libc_alloca_cutoff");
     if(f)
         return ((iFL_t)f)(size);
     // approximate version but it's better than nothing....
@@ -2620,7 +2620,7 @@ EXPORT int my_getentropy(x64emu_t* emu, void* buffer, size_t length)
 {
     library_t* lib = my_lib;
     if(!lib) return 0;
-    void* f = dlsym(lib->priv.w.lib, "getentropy");
+    void* f = dlsym(lib->w.lib, "getentropy");
     if(f)
         return ((iFpL_t)f)(buffer, length);
     // custom implementation
@@ -2911,7 +2911,7 @@ EXPORT char my___libc_single_threaded = 0;
 
 #define PRE_INIT\
     if(box64_tcmalloc_minimal)                                      \
-        lib->priv.w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);    \
+        lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);    \
     else
 
 #define CUSTOM_INIT         \
diff --git a/src/wrapped/wrappedlibgl.c b/src/wrapped/wrappedlibgl.c
index 006774aa..96128410 100755
--- a/src/wrapped/wrappedlibgl.c
+++ b/src/wrapped/wrappedlibgl.c
@@ -197,11 +197,11 @@ EXPORT void* my_glGetVkProcAddrNV(x64emu_t* emu, void* name)
     return my_GetVkProcAddr(emu, name, GetVkProcAddrNV);
 }
 
-#define PRE_INIT if(libGL) {lib->priv.w.lib = dlopen(libGL, RTLD_LAZY | RTLD_GLOBAL); lib->path = strdup(libGL);} else
+#define PRE_INIT if(libGL) {lib->w.lib = dlopen(libGL, RTLD_LAZY | RTLD_GLOBAL); lib->path = strdup(libGL);} else
 #define CUSTOM_INIT \
-    lib->priv.w.priv = dlsym(lib->priv.w.lib, "glXGetProcAddress"); \
+    lib->w.priv = dlsym(lib->w.lib, "glXGetProcAddress"); \
     if (!box64->glxprocaddress) \
-        box64->glxprocaddress = lib->priv.w.priv;
+        box64->glxprocaddress = lib->w.priv;
 
 
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedlibglu.c b/src/wrapped/wrappedlibglu.c
index 082e724c..57a2bb4e 100755
--- a/src/wrapped/wrappedlibglu.c
+++ b/src/wrapped/wrappedlibglu.c
@@ -132,7 +132,6 @@ void EXPORT my_gluNurbsCallback(x64emu_t* emu, void* a, int32_t b, void* cb)
 }
 
 #define CUSTOM_INIT                     \
-    box64->libglu = lib;                \
     getMy(lib);                         \
     setNeededLibs(lib, 1, "libGL.so.1");
 
diff --git a/src/wrapped/wrappedlibm.c b/src/wrapped/wrappedlibm.c
index 48c34580..43bdf5cc 100755
--- a/src/wrapped/wrappedlibm.c
+++ b/src/wrapped/wrappedlibm.c
@@ -32,7 +32,7 @@ EXPORT R my___##N##_finite P        \
     static int check = 0;           \
     T f = NULL;                     \
     if(!check) {                    \
-        f = (T)dlsym(my_lib->priv.w.lib, "__" #N "_finite");  \
+        f = (T)dlsym(my_lib->w.lib, "__" #N "_finite");  \
         ++check;                    \
     }                               \
     if(f)                           \
diff --git a/src/wrapped/wrappedlibpcre.c b/src/wrapped/wrappedlibpcre.c
index fbd2218b..1175f7dd 100755
--- a/src/wrapped/wrappedlibpcre.c
+++ b/src/wrapped/wrappedlibpcre.c
@@ -25,7 +25,7 @@ void wrapped_pcre_free(void* p) {
 EXPORT pcre_free_t pcre_free = wrapped_pcre_free;
 
 #define CUSTOM_INIT \
-    my_pcre_free = AddCheckBridge(lib->priv.w.bridge, vFp, free, 0, "free");
+    my_pcre_free = AddCheckBridge(lib->w.bridge, vFp, free, 0, "free");
 
 #include "wrappedlib_init.h"
 
diff --git a/src/wrapped/wrappedlibssl.c b/src/wrapped/wrappedlibssl.c
index 0d7fc823..40ca1a7f 100755
--- a/src/wrapped/wrappedlibssl.c
+++ b/src/wrapped/wrappedlibssl.c
@@ -109,12 +109,12 @@ static void* find_verify_Fct(void* fct)
 static void* reverse_verify_Fct(void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(my_lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(my_lib->priv.w.bridge, fct);
+    if(CheckBridged(my_lib->w.bridge, fct))
+        return (void*)CheckBridged(my_lib->w.bridge, fct);
     #define GO(A) if(my_verify_##A == fct) return (void*)my_verify_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(my_lib->priv.w.bridge, iFip, fct, 0, NULL);
+    return (void*)AddBridge(my_lib->w.bridge, iFip, fct, 0, NULL);
 }
 
 // ex_new
diff --git a/src/wrapped/wrappedlibusb1.c b/src/wrapped/wrappedlibusb1.c
index 31d0867b..e34f440f 100755
--- a/src/wrapped/wrappedlibusb1.c
+++ b/src/wrapped/wrappedlibusb1.c
@@ -90,12 +90,12 @@ static void* findtransfertFct(void* fct)
 static void* reverse_transfert_Fct(void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(my_lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(my_lib->priv.w.bridge, fct);
+    if(CheckBridged(my_lib->w.bridge, fct))
+        return (void*)CheckBridged(my_lib->w.bridge, fct);
     #define GO(A) if(my_transfert_##A == fct) return (void*)my_transfert_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(my_lib->priv.w.bridge, vFp, fct, 0, NULL);
+    return (void*)AddBridge(my_lib->w.bridge, vFp, fct, 0, NULL);
 }
 
 #undef SUPER
diff --git a/src/wrapped/wrappedlibvorbis.c b/src/wrapped/wrappedlibvorbis.c
index d9018689..74495820 100755
--- a/src/wrapped/wrappedlibvorbis.c
+++ b/src/wrapped/wrappedlibvorbis.c
@@ -21,10 +21,4 @@
 const char* libvorbisName = "libvorbis.so.0";
 #define LIBNAME libvorbis
 
-#define CUSTOM_INIT \
-    box64->vorbis = lib;
-
-#define CUSTOM_FINI \
-    lib->context->vorbis = NULL;
-
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedlibx11.c b/src/wrapped/wrappedlibx11.c
index 9d8fd445..fa12a53c 100755
--- a/src/wrapped/wrappedlibx11.c
+++ b/src/wrapped/wrappedlibx11.c
@@ -139,12 +139,12 @@ static void* findwire_to_eventFct(void* fct)
 static void* reverse_wire_to_eventFct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_wire_to_event_##A == fct) return (void*)my_wire_to_event_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, iFppp, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, iFppp, fct, 0, NULL);
 }
 
 // event_to_wire
@@ -172,12 +172,12 @@ static void* findevent_to_wireFct(void* fct)
 static void* reverse_event_to_wireFct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_event_to_wire_##A == fct) return (void*)my_event_to_wire_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, iFppp, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, iFppp, fct, 0, NULL);
 }
 
 // error_handler
@@ -205,12 +205,12 @@ static void* finderror_handlerFct(void* fct)
 static void* reverse_error_handlerFct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_error_handler_##A == fct) return (void*)my_error_handler_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, iFpp, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, iFpp, fct, 0, NULL);
 }
 
 // ioerror_handler
@@ -238,12 +238,12 @@ static void* findioerror_handlerFct(void* fct)
 static void* reverse_ioerror_handlerFct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_ioerror_handler_##A == fct) return (void*)my_ioerror_handler_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, iFp, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, iFp, fct, 0, NULL);
 }
 
 // exterror_handler
@@ -271,12 +271,12 @@ static void* findexterror_handlerFct(void* fct)
 static void* reverse_exterror_handlerFct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_exterror_handler_##A == fct) return (void*)my_exterror_handler_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, iFpppp, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, iFpppp, fct, 0, NULL);
 }
 
 // close_display
@@ -304,12 +304,12 @@ static void* findclose_displayFct(void* fct)
 static void* reverse_close_displayFct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_close_display_##A == fct) return (void*)my_close_display_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, iFpp, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, iFpp, fct, 0, NULL);
 }
 
 // register_im
@@ -337,12 +337,12 @@ static void* findregister_imFct(void* fct)
 static void* reverse_register_imFct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_register_im_##A == fct) return (void*)my_register_im_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, iFppp, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, iFppp, fct, 0, NULL);
 }
 
 // XConnectionWatchProc
@@ -437,12 +437,12 @@ static void* findXSynchronizeProcFct(void* fct)
 static void* reverse_XSynchronizeProcFct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_XSynchronizeProc_##A == fct) return (void*)my_XSynchronizeProc_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, iFppp, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, iFppp, fct, 0, NULL);
 }
 
 // XLockDisplay
@@ -1153,12 +1153,10 @@ EXPORT void* my_XOpenDisplay(x64emu_t* emu, void* d)
 }
 
 #define CUSTOM_INIT                 \
-    box64->x11lib = lib;            \
     getMy(lib);                     \
     if(x11threads) my->XInitThreads();
 
 #define CUSTOM_FINI \
-    freeMy(); \
-    ((box64context_t*)(lib->context))->x11lib = NULL; \
+    freeMy();
 
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedlibxext.c b/src/wrapped/wrappedlibxext.c
index 7d8aebc2..efc2fba4 100755
--- a/src/wrapped/wrappedlibxext.c
+++ b/src/wrapped/wrappedlibxext.c
@@ -76,12 +76,12 @@ static void* find_exterrorhandle_Fct(void* fct)
 static void* reverse_exterrorhandleFct(void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(my_lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(my_lib->priv.w.bridge, fct);
+    if(CheckBridged(my_lib->w.bridge, fct))
+        return (void*)CheckBridged(my_lib->w.bridge, fct);
     #define GO(A) if(my_exterrorhandle_##A == fct) return (void*)my_exterrorhandle_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(my_lib->priv.w.bridge, iFppp, fct, 0, NULL);
+    return (void*)AddBridge(my_lib->w.bridge, iFppp, fct, 0, NULL);
 }
 
 #undef SUPER
diff --git a/src/wrapped/wrappedlibz.c b/src/wrapped/wrappedlibz.c
index 75f77e96..8d3ebb7a 100755
--- a/src/wrapped/wrappedlibz.c
+++ b/src/wrapped/wrappedlibz.c
@@ -154,11 +154,9 @@ EXPORT int my_inflate(x64emu_t* emu, void* str, int flush)
 
 
 #define CUSTOM_INIT \
-    box64->zlib = lib; \
     getMy(lib);
 
 #define CUSTOM_FINI \
-    freeMy(); \
-    ((box64context_t*)(lib->context))->zlib = NULL;
+    freeMy();
 
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappednss3.c b/src/wrapped/wrappednss3.c
index e2655aef..2b10bb41 100755
--- a/src/wrapped/wrappednss3.c
+++ b/src/wrapped/wrappednss3.c
@@ -80,12 +80,12 @@ static void* find_CERT_StringFromCertFcn_Fct(void* fct)
 static void* reverse_CERT_StringFromCertFcn_Fct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_CERT_StringFromCertFcn_##A == fct) return (void*)my_CERT_StringFromCertFcn_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, pFp, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, pFp, fct, 0, NULL);
 }
 // CERTChainVerifyCallbackFunc ...
 #define GO(A)   \
@@ -112,12 +112,12 @@ static void* find_CERTChainVerifyCallbackFunc_Fct(void* fct)
 static void* reverse_CERTChainVerifyCallbackFunc_Fct(library_t* lib, void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(lib->priv.w.bridge, fct);
+    if(CheckBridged(lib->w.bridge, fct))
+        return (void*)CheckBridged(lib->w.bridge, fct);
     #define GO(A) if(my_CERTChainVerifyCallbackFunc_##A == fct) return (void*)my_CERTChainVerifyCallbackFunc_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(lib->priv.w.bridge, iFppp, fct, 0, NULL);
+    return (void*)AddBridge(lib->w.bridge, iFppp, fct, 0, NULL);
 }
 
 #undef SUPER
diff --git a/src/wrapped/wrappedpulse.c b/src/wrapped/wrappedpulse.c
index 688671dc..02233aa0 100755
--- a/src/wrapped/wrappedpulse.c
+++ b/src/wrapped/wrappedpulse.c
@@ -826,7 +826,7 @@ static void* my_io_new(void* api, int fd, int events, void* cb, void *userdata)
         return ((pFpiipp_t)fnc)(api, fd, events, cb, userdata);
     }
 
-    bridge_t* bridge = my_context->pulse->priv.w.bridge;
+    bridge_t* bridge = my_lib->w.bridge;
     if(cb)
         b = AddCheckBridge(bridge, vFppiip, cb, 0, NULL);
     if(api==my_mainloop_orig) api=my_mainloop_ref;    // need emulated version
@@ -857,7 +857,7 @@ static void my_io_set_destroy(void* e, void* cb)
     if(fnc)
         return ((vFpp_t)fnc)(e, cb);
 
-    bridge_t* bridge = my_context->pulse->priv.w.bridge;
+    bridge_t* bridge = my_lib->w.bridge;
     uintptr_t b = 0;
     if(cb) {
         b = CheckBridged(bridge, cb);
@@ -878,7 +878,7 @@ static void* my_time_new(void* api, void* tv, void* cb, void* data)
     }
 
     // need to bridge the callback!
-    bridge_t* bridge = my_context->pulse->priv.w.bridge;
+    bridge_t* bridge = my_lib->w.bridge;
     if(cb)
         b = AddCheckBridge(bridge, vFpppp, cb, 0, NULL);
     if(api==my_mainloop_orig) api=my_mainloop_ref;    // need emulated version
@@ -909,7 +909,7 @@ static void my_time_set_destroy(void* e, void* cb)
     if(fnc)
         return ((vFpp_t)fnc)(e, cb);
 
-    bridge_t* bridge = my_context->pulse->priv.w.bridge;
+    bridge_t* bridge = my_lib->w.bridge;
     uintptr_t b = 0;
     if(cb)
             b = AddCheckBridge(bridge, vFppp, cb, 0, NULL);
@@ -927,7 +927,7 @@ static void* my_defer_new(void* api, void* cb, void* data)
     }
 
     // need to bridge the callback!
-    bridge_t* bridge = my_context->pulse->priv.w.bridge;
+    bridge_t* bridge = my_lib->w.bridge;
     if(cb) {
         b = CheckBridged(bridge, cb);
         if(!b)
@@ -961,7 +961,7 @@ static void my_defer_set_destroy(void* e, void* cb)
     if(fnc)
         return ((vFpp_t)fnc)(e, cb);
 
-    bridge_t* bridge = my_context->pulse->priv.w.bridge;
+    bridge_t* bridge = my_lib->w.bridge;
     uintptr_t b = 0;
     if(cb)
         b = AddCheckBridge(bridge, vFppp, cb, 0, NULL);
@@ -1027,7 +1027,7 @@ EXPORT void my_pa_mainloop_free(x64emu_t* emu, void* mainloop)
 EXPORT void* my_pa_mainloop_get_api(x64emu_t* emu, void* mainloop)
 {
     my_pa_mainloop_api_t* api = my->pa_mainloop_get_api(mainloop);
-    bridgeMainloopAPI(my_lib->priv.w.bridge, api);
+    bridgeMainloopAPI(my_lib->w.bridge, api);
     return my_mainloop_ref;
 }
 
@@ -1040,7 +1040,7 @@ EXPORT void my_pa_threaded_mainloop_free(x64emu_t* emu, void* mainloop)
 EXPORT void* my_pa_threaded_mainloop_get_api(x64emu_t* emu, void* mainloop)
 {
     my_pa_mainloop_api_t* api = my->pa_threaded_mainloop_get_api(mainloop);
-    bridgeMainloopAPI(my_lib->priv.w.bridge, api);
+    bridgeMainloopAPI(my_lib->w.bridge, api);
     return my_mainloop_ref;
 }
 
@@ -1271,7 +1271,7 @@ EXPORT void my_pa_stream_set_read_callback(x64emu_t* emu, void* stream, void* cb
 
 EXPORT int my_pa_stream_write(x64emu_t* emu, void* stream, void* d, size_t nbytes, void* cb, int64_t offset, int seek)
 {
-    if(!emu->context->pulse)
+    if(!my_lib)
         return 0;
     if(!my)
         return 0;
@@ -1484,12 +1484,10 @@ EXPORT void* my_pa_context_get_source_output_info(x64emu_t* emu, void* c, uint32
         return -1;
 
 #define CUSTOM_INIT \
-    getMy(lib);     \
-    box64->pulse = lib;
+    getMy(lib);
 
 
 #define CUSTOM_FINI \
-    lib->context->pulse = NULL;     \
     freeMy();
 
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedsdl1.c b/src/wrapped/wrappedsdl1.c
index 6341c9cb..97353568 100755
--- a/src/wrapped/wrappedsdl1.c
+++ b/src/wrapped/wrappedsdl1.c
@@ -136,13 +136,12 @@ static void* find_EvtFilter_Fct(void* fct)
 static void* reverse_EvtFilterFct(void* fct)
 {
     if(!fct) return fct;
-    library_t* my_lib = my_context->sdl1lib;
-    if(CheckBridged(my_lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(my_lib->priv.w.bridge, fct);
+    if(CheckBridged(my_lib->w.bridge, fct))
+        return (void*)CheckBridged(my_lib->w.bridge, fct);
     #define GO(A) if(my_EvtFilter_##A == fct) return (void*)my_EvtFilter_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(my_lib->priv.w.bridge, iFp, fct, 0, NULL);
+    return (void*)AddBridge(my_lib->w.bridge, iFp, fct, 0, NULL);
 }
 #undef SUPER
 
@@ -454,7 +453,6 @@ EXPORT int32_t my_SDL_GetWMInfo(x64emu_t* emu, void* p)
 }
 
 #define CUSTOM_INIT \
-    box64->sdl1lib = lib;                   \
     getMy(lib);                             \
     box64->sdl1allocrw = my->SDL_AllocRW;   \
     box64->sdl1freerw  = my->SDL_FreeRW;    \
@@ -464,10 +462,9 @@ EXPORT int32_t my_SDL_GetWMInfo(x64emu_t* emu, void* p)
         "librt.so.1");
 
 #define CUSTOM_FINI \
-    my->SDL_Quit();                                         \
-    freeMy();                                               \
-    ((box64context_t*)(lib->context))->sdl1lib = NULL;      \
-    ((box64context_t*)(lib->context))->sdl1allocrw = NULL;  \
-    ((box64context_t*)(lib->context))->sdl1freerw = NULL;
+    my->SDL_Quit();                         \
+    freeMy();                               \
+    my_context->sdl1allocrw = NULL;         \
+    my_context->sdl1freerw = NULL;
 
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedsdl1mixer.c b/src/wrapped/wrappedsdl1mixer.c
index fa4ea1a8..9538aacf 100755
--- a/src/wrapped/wrappedsdl1mixer.c
+++ b/src/wrapped/wrappedsdl1mixer.c
@@ -214,6 +214,6 @@ EXPORT int my_Mix_UnregisterEffect(x64emu_t* emu, int channel, void* f)
 
 #define CUSTOM_FINI \
     freeMy();       \
-    ((box64context_t*)(lib->context))->sdl1mixerlib = NULL;
+    my_context->sdl1mixerlib = NULL;
 
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedsdl2.c b/src/wrapped/wrappedsdl2.c
index 9f02e549..6de8b907 100755
--- a/src/wrapped/wrappedsdl2.c
+++ b/src/wrapped/wrappedsdl2.c
@@ -173,12 +173,12 @@ static void* find_eventfilter_Fct(void* fct)
 static void* reverse_eventfilter_Fct(void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(my_context->sdl2lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(my_context->sdl2lib->priv.w.bridge, fct);
+    if(CheckBridged(my_lib->w.bridge, fct))
+        return (void*)CheckBridged(my_lib->w.bridge, fct);
     #define GO(A) if(my_eventfilter_##A == fct) return (void*)my_eventfilter_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(my_context->sdl2lib->priv.w.bridge, iFpp, fct, 0, NULL);
+    return (void*)AddBridge(my_lib->w.bridge, iFpp, fct, 0, NULL);
 }
 
 // LogOutput
@@ -206,12 +206,12 @@ static void* find_LogOutput_Fct(void* fct)
 static void* reverse_LogOutput_Fct(void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(my_context->sdl2lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(my_context->sdl2lib->priv.w.bridge, fct);
+    if(CheckBridged(my_lib->w.bridge, fct))
+        return (void*)CheckBridged(my_lib->w.bridge, fct);
     #define GO(A) if(my_LogOutput_##A == fct) return (void*)my_LogOutput_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(my_context->sdl2lib->priv.w.bridge, vFpiip, fct, 0, NULL);
+    return (void*)AddBridge(my_lib->w.bridge, vFpiip, fct, 0, NULL);
 }
 
 #undef SUPER
@@ -532,14 +532,14 @@ static int get_sdl_priv(x64emu_t* emu, const char *sym_str, void **w, void **f)
         else if (strcmp(#sym, sym_str) == 0) \
         { \
             *w = _w; \
-            *f = dlsym(emu->context->sdl2lib->priv.w.lib, #sym); \
+            *f = dlsym(emu->context->sdl2lib->w.lib, #sym); \
             return *f != NULL; \
         }
     #define GO2(sym, _w, sym2) \
         else if (strcmp(#sym, sym_str) == 0) \
         { \
             *w = _w; \
-            *f = dlsym(emu->context->sdl2lib->priv.w.lib, #sym2); \
+            *f = dlsym(emu->context->sdl2lib->w.lib, #sym2); \
             return *f != NULL; \
         }
     #define GOM(sym, _w) \
@@ -575,7 +575,7 @@ int EXPORT my2_SDL_DYNAPI_entry(x64emu_t* emu, uint32_t version, uintptr_t *tabl
             void *w = NULL; \
             void *f = NULL; \
             if (get_sdl_priv(emu, #sym, &w, &f)) { \
-                table[i] = AddCheckBridge(my_context->sdl2lib->priv.w.bridge, w, f, 0, #sym); \
+                table[i] = AddCheckBridge(my_lib->w.bridge, w, f, 0, #sym); \
             } \
             else \
                 table[i] = (uintptr_t)NULL; \
@@ -847,7 +847,7 @@ EXPORT void* my2_SDL_Vulkan_GetVkGetInstanceProcAddr(x64emu_t* emu)
         emu->context->vkprocaddress = (vkprocaddess_t)my->SDL_Vulkan_GetVkGetInstanceProcAddr();
 
     if(emu->context->vkprocaddress)
-        return (void*)AddCheckBridge(my_context->sdl2lib->priv.w.bridge, pFEpp, my_vkGetInstanceProcAddr, 0, "vkGetInstanceProcAddr");
+        return (void*)AddCheckBridge(my_lib->w.bridge, pFEpp, my_vkGetInstanceProcAddr, 0, "vkGetInstanceProcAddr");
     return NULL;
 }
 
@@ -888,9 +888,9 @@ EXPORT void my2_SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, uint16_t *vend, u
     if(my_glhandle) my_dlclose(thread_get_emu(), my_glhandle);  \
     my_glhandle = NULL;                                         \
     freeMy();                                                   \
-    ((box64context_t*)(lib->context))->sdl2lib = NULL;          \
-    ((box64context_t*)(lib->context))->sdl2allocrw = NULL;      \
-    ((box64context_t*)(lib->context))->sdl2freerw = NULL;
+    my_context->sdl2lib = NULL;                                 \
+    my_context->sdl2allocrw = NULL;                             \
+    my_context->sdl2freerw = NULL;
 
 
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedsdl2mixer.c b/src/wrapped/wrappedsdl2mixer.c
index c0c5af5f..8bf9c4df 100755
--- a/src/wrapped/wrappedsdl2mixer.c
+++ b/src/wrapped/wrappedsdl2mixer.c
@@ -232,6 +232,6 @@ EXPORT int my2_MinorityMix_SetPosition(x64emu_t* emu, int channel, int16_t angle
 
 #define CUSTOM_FINI \
     freeMy();       \
-    ((box64context_t*)(lib->context))->sdl2mixerlib = NULL;
+    my_context->sdl2mixerlib = NULL;
 
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedtcmallocminimal.c b/src/wrapped/wrappedtcmallocminimal.c
index 20b2ccc0..4f179cf0 100755
--- a/src/wrapped/wrappedtcmallocminimal.c
+++ b/src/wrapped/wrappedtcmallocminimal.c
@@ -17,7 +17,7 @@ const char* tcmallocminimalName = "libtcmalloc_minimal.so.4";
 
 // this preinit basically open "box86" as dlopen (because libtcmalloc_minimal needs to be LD_PRELOAD for it to work)
 #define PRE_INIT\
-    lib->priv.w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);    \
+    lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);    \
     if(0)
 
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedunwind.c b/src/wrapped/wrappedunwind.c
index ba503be2..c0aeba37 100644
--- a/src/wrapped/wrappedunwind.c
+++ b/src/wrapped/wrappedunwind.c
@@ -36,7 +36,7 @@ EXPORT int my__ULx86_64_init_local(x64emu_t* emu, void* cursor, void* ctx) {
 
 #define PRE_INIT                                                \
     if(1)                                                       \
-        lib->priv.w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);\
+        lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);\
     else
 
 
diff --git a/src/wrapped/wrappedutil.c b/src/wrapped/wrappedutil.c
index 68f5757a..3c2442a3 100755
--- a/src/wrapped/wrappedutil.c
+++ b/src/wrapped/wrappedutil.c
@@ -28,7 +28,7 @@ EXPORT pid_t my_forkpty(x64emu_t* emu, void* amaster, void* name, void* termp, v
     forkinfo.termp = termp;
     forkinfo.winp = winp;
     library_t* lib = GetLibInternal(utilName);
-    forkinfo.f = dlsym(lib->priv.w.lib, "forkpty");
+    forkinfo.f = dlsym(lib->w.lib, "forkpty");
     
     emu->quit = 1;
     emu->fork = 2;
diff --git a/src/wrapped/wrappedvorbisfile.c b/src/wrapped/wrappedvorbisfile.c
index 768c06a6..ad285fe7 100755
--- a/src/wrapped/wrappedvorbisfile.c
+++ b/src/wrapped/wrappedvorbisfile.c
@@ -166,12 +166,10 @@ EXPORT int32_t my_ov_test_callbacks(x64emu_t* emu, void* datasource, void* vf, v
 #endif
 
 #define CUSTOM_INIT \
-    box64->vorbisfile = lib;\
     getMy(lib);
 
 #define CUSTOM_FINI \
-    freeMy();   \
-    my_context->vorbisfile = NULL;
+    freeMy();
 
 #include "wrappedlib_init.h"
 
diff --git a/src/wrapped/wrappedvulkan.c b/src/wrapped/wrappedvulkan.c
index 074082d8..21d9ea8c 100755
--- a/src/wrapped/wrappedvulkan.c
+++ b/src/wrapped/wrappedvulkan.c
@@ -325,7 +325,7 @@ static void* find_DebugReportCallbackEXT_Fct(void* fct)
 
 #undef SUPER
 
-//#define PRE_INIT if(libGL) {lib->priv.w.lib = dlopen(libGL, RTLD_LAZY | RTLD_GLOBAL); lib->path = strdup(libGL);} else
+//#define PRE_INIT if(libGL) {lib->w.lib = dlopen(libGL, RTLD_LAZY | RTLD_GLOBAL); lib->path = strdup(libGL);} else
 
 #define PRE_INIT        \
     if(box64_novulkan)  \
@@ -333,8 +333,8 @@ static void* find_DebugReportCallbackEXT_Fct(void* fct)
 
 #define CUSTOM_INIT \
     getMy(lib);     \
-    lib->priv.w.priv = dlsym(lib->priv.w.lib, "vkGetInstanceProcAddr"); \
-    box64->vkprocaddress = lib->priv.w.priv;
+    lib->w.priv = dlsym(lib->w.lib, "vkGetInstanceProcAddr"); \
+    box64->vkprocaddress = lib->w.priv;
 
 #define CUSTOM_FINI \
     freeMy();
diff --git a/src/wrapped/wrappedwaylandclient.c b/src/wrapped/wrappedwaylandclient.c
index 5335f30f..c1570cf2 100644
--- a/src/wrapped/wrappedwaylandclient.c
+++ b/src/wrapped/wrappedwaylandclient.c
@@ -21,10 +21,4 @@
 const char* waylandclientName = "libwayland-client.so.0";
 #define LIBNAME waylandclient
 
-#define CUSTOM_INIT \
-    box64->vorbis = lib;
-
-#define CUSTOM_FINI \
-    lib->context->vorbis = NULL;
-
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedwaylandcursor.c b/src/wrapped/wrappedwaylandcursor.c
index b62a4181..8ce68fb1 100644
--- a/src/wrapped/wrappedwaylandcursor.c
+++ b/src/wrapped/wrappedwaylandcursor.c
@@ -21,10 +21,4 @@
 const char* waylandcursorName = "libwayland-cursor.so.0";
 #define LIBNAME waylandcursor
 
-#define CUSTOM_INIT \
-    box64->vorbis = lib;
-
-#define CUSTOM_FINI \
-    lib->context->vorbis = NULL;
-
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedwaylandegl.c b/src/wrapped/wrappedwaylandegl.c
index d7c0dd29..5b696af1 100644
--- a/src/wrapped/wrappedwaylandegl.c
+++ b/src/wrapped/wrappedwaylandegl.c
@@ -21,10 +21,4 @@
 const char* waylandeglName = "libwayland-egl.so.1";
 #define LIBNAME waylandegl
 
-#define CUSTOM_INIT \
-    box64->vorbis = lib;
-
-#define CUSTOM_FINI \
-    lib->context->vorbis = NULL;
-
 #include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedxml2.c b/src/wrapped/wrappedxml2.c
index e8c68206..271edfdd 100755
--- a/src/wrapped/wrappedxml2.c
+++ b/src/wrapped/wrappedxml2.c
@@ -67,17 +67,17 @@ void* my_wrap_xmlMemStrdup(void* p)
 
 #define ADDED_INIT() \
     void** p;                                                                                               \
-    p=dlsym(lib->priv.w.lib, "xmlFree");                                                                    \
-        my_xmlFree = (p && *p)?AddBridge(lib->priv.w.bridge, vFp, *p, 0, "my_wrap_xmlFree"):0;              \
+    p=dlsym(lib->w.lib, "xmlFree");                                                                    \
+        my_xmlFree = (p && *p)?AddBridge(lib->w.bridge, vFp, *p, 0, "my_wrap_xmlFree"):0;              \
         if(p) *p = my_wrap_xmlFree;                                                                         \
-    p=dlsym(lib->priv.w.lib, "xmlMalloc");                                                                  \
-        my_xmlMalloc = (p && *p)?AddBridge(lib->priv.w.bridge, pFL, *p, 0, "my_wrap_xmlMalloc"):0;          \
+    p=dlsym(lib->w.lib, "xmlMalloc");                                                                  \
+        my_xmlMalloc = (p && *p)?AddBridge(lib->w.bridge, pFL, *p, 0, "my_wrap_xmlMalloc"):0;          \
         if(p) *p = my_wrap_xmlMalloc;                                                                       \
-    p=dlsym(lib->priv.w.lib, "xmlRealloc");                                                                 \
-        my_xmlRealloc = (p && *p)?AddBridge(lib->priv.w.bridge, pFpL, *p, 0, "my_wrap_xmlRealloc"):0;       \
+    p=dlsym(lib->w.lib, "xmlRealloc");                                                                 \
+        my_xmlRealloc = (p && *p)?AddBridge(lib->w.bridge, pFpL, *p, 0, "my_wrap_xmlRealloc"):0;       \
         if(p) *p = my_wrap_xmlRealloc;                                                                      \
-    p=dlsym(lib->priv.w.lib, "xmlMemStrdup");                                                               \
-        my_xmlMemStrdup = (p && *p)?AddBridge(lib->priv.w.bridge, pFp, *p, 0, "my_wrap_xmlMemStrdup"):0;    \
+    p=dlsym(lib->w.lib, "xmlMemStrdup");                                                               \
+        my_xmlMemStrdup = (p && *p)?AddBridge(lib->w.bridge, pFp, *p, 0, "my_wrap_xmlMemStrdup"):0;    \
         if(p) *p = my_wrap_xmlMemStrdup;
 
 #include "wrappercallback.h"
@@ -1110,12 +1110,12 @@ static void* find_xmlExternalEntityLoaderFct(void* fct)
 static void* reverse_xmlExternalEntityLoaderFct(void* fct)
 {
     if(!fct) return fct;
-    if(CheckBridged(my_lib->priv.w.bridge, fct))
-        return (void*)CheckBridged(my_lib->priv.w.bridge, fct);
+    if(CheckBridged(my_lib->w.bridge, fct))
+        return (void*)CheckBridged(my_lib->w.bridge, fct);
     #define GO(A) if(my_xmlExternalEntityLoader_##A == fct) return (void*)my_xmlExternalEntityLoader_fct_##A;
     SUPER()
     #undef GO
-    return (void*)AddBridge(my_lib->priv.w.bridge, pFppp, fct, 0, "xmlExternalEntityLoader_callback");
+    return (void*)AddBridge(my_lib->w.bridge, pFppp, fct, 0, "xmlExternalEntityLoader_callback");
 }
 
 
diff --git a/src/wrapped/wrappercallback.h b/src/wrapped/wrappercallback.h
index 2886965e..b86ed14e 100644
--- a/src/wrapped/wrappercallback.h
+++ b/src/wrapped/wrappercallback.h
@@ -1,4 +1,3 @@
-
 #define TYPENAME3(N,M) N##M
 #define TYPENAME2(N,M) TYPENAME3(N,M)
 #define TYPENAME(N) TYPENAME2(LIBNAME, _my_t)
@@ -19,7 +18,7 @@ static TYPENAME(LIBNAME) * const my = &TYPENAME2(my_, LIBNAME);
 
 static void getMy(library_t* lib)
 {
-    #define GO(A, W) my->A = (W)dlsym(lib->priv.w.lib, #A);
+    #define GO(A, W) my->A = (W)dlsym(lib->w.lib, #A);
     SUPER()
     #undef GO
     my_lib = lib;