diff --git a/dlls/Makedll.rules.in b/dlls/Makedll.rules.in
index 0f45318097a7be84ce2bac08fcfe78ab5b6c4b37..fe5123ac11b73c41b0b38bff2a1fced2daed95bc 100644
--- a/dlls/Makedll.rules.in
+++ b/dlls/Makedll.rules.in
@@ -42,14 +42,9 @@ $(ALTNAMES:%=lib%.a): lib$(MODULE).a
 
 # Rules for checking that no imports are missing
 
-IMPORTLIBS = $(IMPORTS:%=$(DLLDIR)/lib%.$(LIBEXT))
-
-checklink:: lib$(MODULE).$(LIBEXT) $(IMPORTLIBS)
+checklink:: lib$(MODULE).$(LIBEXT)
 	$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c -L. -l$(MODULE) -L$(TOPOBJDIR) -lwine -lwine_unicode $(EXTRALIBS) $(LIBS) && $(RM) checklink
 
-$(IMPORTLIBS): dummy
-	@cd $(DLLDIR) && $(MAKE) `basename $@`
-
 # Rules for installation
 
 .PHONY: install_so install_a
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index 53ae5a915dcf1d5b6757221d9654823c447ccf81..4980497d2d7ea4d110576b1c79b169f2b75a9377 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -114,6 +114,7 @@ EXTRADLLNAMES = \
 	win87em \
 	winaspi \
 	windebug \
+	wineps16 \
 	wing \
 	winsock \
 	wprocs
@@ -212,7 +213,7 @@ libdplayx.@LIBEXT@: dplayx/libdplayx.@LIBEXT@
 libdsound.@LIBEXT@: dsound/libdsound.@LIBEXT@
 	$(RM) $@ && $(LN_S) dsound/libdsound.@LIBEXT@ $@
 
-libgdi32.@LIBEXT@ libgdi.@LIBEXT@ libdispdib.@LIBEXT@ libwing.@LIBEXT@: gdi/libgdi32.@LIBEXT@
+libgdi32.@LIBEXT@ libdispdib.@LIBEXT@ libgdi.@LIBEXT@ libwing.@LIBEXT@: gdi/libgdi32.@LIBEXT@
 	$(RM) $@ && $(LN_S) gdi/libgdi32.@LIBEXT@ $@
 
 libicmp.@LIBEXT@: icmp/libicmp.@LIBEXT@
@@ -224,14 +225,14 @@ libimagehlp.@LIBEXT@: imagehlp/libimagehlp.@LIBEXT@
 libimm32.@LIBEXT@: imm32/libimm32.@LIBEXT@
 	$(RM) $@ && $(LN_S) imm32/libimm32.@LIBEXT@ $@
 
-libkernel32.@LIBEXT@ libcomm.@LIBEXT@ libkernel.@LIBEXT@ libsystem.@LIBEXT@ \
-  libstress.@LIBEXT@ libtoolhelp.@LIBEXT@ libwin87em.@LIBEXT@ libwindebug.@LIBEXT@ \
-  libwprocs.@LIBEXT@: kernel/libkernel32.@LIBEXT@
-	$(RM) $@ && $(LN_S) kernel/libkernel32.@LIBEXT@ $@
-
 libjoystick.drv.@LIBEXT@: winmm/joystick/libjoystick.drv.@LIBEXT@
 	$(RM) $@ && $(LN_S) winmm/joystick/libjoystick.drv.@LIBEXT@ $@
 
+libkernel32.@LIBEXT@ libcomm.@LIBEXT@ libkernel.@LIBEXT@ libstress.@LIBEXT@ \
+  libsystem.@LIBEXT@ libtoolhelp.@LIBEXT@ libwin87em.@LIBEXT@ libwindebug.@LIBEXT@ \
+  libwprocs.@LIBEXT@: kernel/libkernel32.@LIBEXT@
+	$(RM) $@ && $(LN_S) kernel/libkernel32.@LIBEXT@ $@
+
 liblz32.@LIBEXT@ liblzexpand.@LIBEXT@: lzexpand/liblz32.@LIBEXT@
 	$(RM) $@ && $(LN_S) lzexpand/liblz32.@LIBEXT@ $@
 
@@ -271,7 +272,8 @@ libmsvfw32.@LIBEXT@ libmsvideo.@LIBEXT@: msvideo/libmsvfw32.@LIBEXT@
 libodbc32.@LIBEXT@: odbc32/libodbc32.@LIBEXT@
 	$(RM) $@ && $(LN_S) odbc32/libodbc32.@LIBEXT@ $@
 
-libole32.@LIBEXT@ libole2.@LIBEXT@ libole2conv.@LIBEXT@ libole2nls.@LIBEXT@ libole2prox.@LIBEXT@ libole2thk.@LIBEXT@ libstorage.@LIBEXT@ libcompobj.@LIBEXT@: ole32/libole32.@LIBEXT@
+libole32.@LIBEXT@ libcompobj.@LIBEXT@ libole2.@LIBEXT@ libole2conv.@LIBEXT@ \
+  libole2nls.@LIBEXT@ libole2prox.@LIBEXT@ libole2thk.@LIBEXT@ libstorage.@LIBEXT@: ole32/libole32.@LIBEXT@
 	$(RM) $@ && $(LN_S) ole32/libole32.@LIBEXT@ $@
 
 liboleaut32.@LIBEXT@ libole2disp.@LIBEXT@ libtypelib.@LIBEXT@: oleaut32/liboleaut32.@LIBEXT@
@@ -328,7 +330,8 @@ libttydrv.@LIBEXT@: ttydrv/libttydrv.@LIBEXT@
 liburlmon.@LIBEXT@: urlmon/liburlmon.@LIBEXT@
 	$(RM) $@ && $(LN_S) urlmon/liburlmon.@LIBEXT@ $@
 
-libuser32.@LIBEXT@ libuser.@LIBEXT@ libkeyboard.@LIBEXT@ libddeml.@LIBEXT@ libdisplay.@LIBEXT@ libmouse.@LIBEXT@: user/libuser32.@LIBEXT@
+libuser32.@LIBEXT@ libddeml.@LIBEXT@ libdisplay.@LIBEXT@ libkeyboard.@LIBEXT@ \
+  libmouse.@LIBEXT@ libuser.@LIBEXT@: user/libuser32.@LIBEXT@
 	$(RM) $@ && $(LN_S) user/libuser32.@LIBEXT@ $@
 
 libversion.@LIBEXT@ libver.@LIBEXT@: version/libversion.@LIBEXT@
@@ -340,7 +343,7 @@ libw32skrnl.@LIBEXT@ libw32sys.@LIBEXT@ libwin32s16.@LIBEXT@: win32s/libw32skrnl
 libwineoss.drv.@LIBEXT@: winmm/wineoss/libwineoss.drv.@LIBEXT@
 	$(RM) $@ && $(LN_S) winmm/wineoss/libwineoss.drv.@LIBEXT@ $@
 
-libwineps.@LIBEXT@: wineps/libwineps.@LIBEXT@
+libwineps.@LIBEXT@ libwineps16.@LIBEXT@: wineps/libwineps.@LIBEXT@
 	$(RM) $@ && $(LN_S) wineps/libwineps.@LIBEXT@ $@
 
 libwininet.@LIBEXT@: wininet/libwininet.@LIBEXT@
@@ -369,33 +372,48 @@ libx11drv.@LIBEXT@: x11drv/libx11drv.@LIBEXT@
 
 # Inter-dll dependencies (only necessary for .so)
 
-avifil32/libavifil32.so: libmsvfw32.so libwinmm.so
-commdlg/libcomdlg32.so: libwinspool.drv.so
-dinput/libdinput.so: libuser32.so
-ddraw/libddraw.so: libx11drv.so
-dplayx/libdplayx.so: libole32.so
-dsound/libdsound.so: libwinmm.so
-msvideo/libmsvfw32.so: libwinmm.so
-ole32/libole32.so: librpcrt4.so libkernel32.so
-oleaut32/liboleaut32.so: libole32.so libcomctl32.so
-olecli/libolecli32.so: libolesvr32.so libole32.so
-olepro32/libolepro32.so: liboleaut32.so libole32.so
-opengl32/libopengl32.so: libx11drv.so libgdi32.so
-shell32/libshell32.so: libole32.so libshlwapi.so
+avifil32/libavifil32.so: libmsvfw32.so libkernel32.so
+comctl32/libcomctl32.so: libuser32.so libgdi32.so
+commdlg/libcomdlg32.so: libshell32.so libshlwapi.so libcomctl32.so libwinspool.drv.so libuser32.so libgdi32.so libkernel32.so
+crtdll/libcrtdll.so: libkernel32.so
+ddraw/libddraw.so: libole32.so libuser32.so libx11drv.so libgdi32.so libkernel32.so
+dinput/libdinput.so: libuser32.so libkernel32.so
+dplay/libdplay.so: libdplayx.so
+dplayx/libdplayx.so: libole32.so libadvapi32.so libkernel32.so
+dsound/libdsound.so: libwinmm.so libkernel32.so
+msacm/libmsacm32.so: libwinmm.so
+msvideo/libmsvfw32.so: libwinmm.so libuser32.so libgdi32.so libkernel32.so
+ole32/libole32.so: libadvapi32.so libuser32.so libgdi32.so librpcrt4.so libkernel32.so
+oleaut32/liboleaut32.so: libole32.so libgdi32.so libkernel32.so
+olecli/libolecli32.so: libole32.so libolesvr32.so libgdi32.so
+olepro32/libolepro32.so: liboleaut32.so
+opengl32/libopengl32.so: libx11drv.so
+richedit/libriched32.so: libuser32.so
+serialui/libserialui.so: libuser32.so
+shell32/libshell32.so: libole32.so libshlwapi.so libcomctl32.so libadvapi32.so libuser32.so libgdi32.so libkernel32.so
 shfolder/libshfolder.so: libshell32.so
+shlwapi/libshlwapi.so: libadvapi32.so libuser32.so libkernel32.so
+ttydrv/libttydrv.so: libuser32.so libgdi32.so libkernel32.so
 urlmon/liburlmon.so: libole32.so
-version/libversion.so: liblz32.so
+user/libuser32.so: libgdi32.so
+version/libversion.so: liblz32.so libkernel32.so
 win32s/libw32skrnl.so: libkernel32.so
-winmm/joystick/libjoystick.drv.so: libwinmm.so
-winmm/mcianim/libmcianim.drv.so: libwinmm.so
-winmm/mciavi/libmciavi.drv.so: libwinmm.so
-winmm/mcicda/libmcicda.drv.so: libwinmm.so
-winmm/mciseq/libmciseq.drv.so: libwinmm.so
-winmm/mciwave/libmciwave.drv.so: libwinmm.so
-winmm/midimap/libmidimap.drv.so: libwinmm.so
-winmm/wavemap/libmsacm.drv.so: libwinmm.so
-winmm/wineoss/libwineoss.drv.so: libwinmm.so
+wineps/libwineps.so: libgdi32.so
+winmm/joystick/libjoystick.drv.so: libwinmm.so libuser32.so
+winmm/libwinmm.so: libuser32.so
+winmm/mcianim/libmcianim.drv.so: libwinmm.so libuser32.so libkernel32.so
+winmm/mciavi/libmciavi.drv.so: libwinmm.so libuser32.so libkernel32.so
+winmm/mcicda/libmcicda.drv.so: libwinmm.so libuser32.so libkernel32.so
+winmm/mciseq/libmciseq.drv.so: libwinmm.so libuser32.so libkernel32.so
+winmm/mciwave/libmciwave.drv.so: libwinmm.so libuser32.so libkernel32.so
+winmm/midimap/libmidimap.drv.so: libwinmm.so libuser32.so libkernel32.so
+winmm/wavemap/libmsacm.drv.so: libwinmm.so libuser32.so libkernel32.so
+winmm/wineoss/libwineoss.drv.so: libwinmm.so libuser32.so libkernel32.so
+winsock/libws2_32.so: libuser32.so
+winspool/libwinspool.drv.so: libgdi32.so
+wow32/libwow32.so: libkernel32.so
 wsock32/libwsock32.so: libws2_32.so
+x11drv/libx11drv.so: libuser32.so libgdi32.so libkernel32.so
 
 $(DLLFILES): dummy
 	@cd `dirname $@` && $(MAKE)
diff --git a/dlls/avifil32/Makefile.in b/dlls/avifil32/Makefile.in
index 94de9eff00ac4f60eedcdaec8eed7459d7bda675..70c7fd7090fd56847a5a4371bb8296b16d7f60af 100644
--- a/dlls/avifil32/Makefile.in
+++ b/dlls/avifil32/Makefile.in
@@ -5,7 +5,7 @@ VPATH     = @srcdir@
 MODULE    = avifil32
 SOVERSION = 1.0
 ALTNAMES  = avifile
-IMPORTS   = msvfw32 winmm
+IMPORTS   = msvfw32 kernel32
 
 C_SRCS = \
 	avifile.c
diff --git a/dlls/avifil32/avifil32.spec b/dlls/avifil32/avifil32.spec
index 281e47311dbffb75063498124b147f891a4bf178..0c03f528ee42bd2ed5b253d0b1f6b0845c899d1f 100644
--- a/dlls/avifil32/avifil32.spec
+++ b/dlls/avifil32/avifil32.spec
@@ -1,7 +1,8 @@
 name	avifil32
 type	win32
 
-import	msvfw32.dll
+import msvfw32.dll
+import kernel32.dll
 
 @ stub    AVIBuildFilter
 @ stub    AVIBuildFilterA
diff --git a/dlls/comctl32/Makefile.in b/dlls/comctl32/Makefile.in
index 87d46e281f0e592e864b4adfd4e00cb22e959159..fc0c88fd4d02f1c48ab836b6e70680b94be799f3 100644
--- a/dlls/comctl32/Makefile.in
+++ b/dlls/comctl32/Makefile.in
@@ -5,6 +5,7 @@ VPATH     = @srcdir@
 MODULE    = comctl32
 SOVERSION = 1.0
 WRCEXTRA  = -s -p$(MODULE)
+IMPORTS   = user32 gdi32
 
 C_SRCS = \
 	animate.c \
diff --git a/dlls/comctl32/comctl32.spec b/dlls/comctl32/comctl32.spec
index ab0ad8e694269091b122dcd8722b3e508b937403..ce1db46d730cb71e8a3799425275856ceb830b78 100644
--- a/dlls/comctl32/comctl32.spec
+++ b/dlls/comctl32/comctl32.spec
@@ -3,6 +3,9 @@ type	win32
 init	COMCTL32_LibMain
 rsrc	comctl32
 
+import	user32.dll
+import	gdi32.dll
+
 # Functions exported by the Win95 comctl32.dll 
 # (these need to have these exact ordinals, because some win95 dlls 
 #  import comctl32.dll by ordinal)
diff --git a/dlls/commdlg/Makefile.in b/dlls/commdlg/Makefile.in
index ba37011b196b5a2f9ef785a9386f864488b96c1c..dcf0854e6256e8c36b147d4ee41e5c759ed9f8fd 100644
--- a/dlls/commdlg/Makefile.in
+++ b/dlls/commdlg/Makefile.in
@@ -5,7 +5,7 @@ VPATH     = @srcdir@
 MODULE    = comdlg32
 SOVERSION = 1.0
 ALTNAMES  = commdlg
-IMPORTS   = winspool.drv
+IMPORTS   = shell32 shlwapi comctl32 user32 winspool.drv gdi32 kernel32
 WRCEXTRA  = -s -pcomdlg32
 
 C_SRCS = \
diff --git a/dlls/commdlg/comdlg32.spec b/dlls/commdlg/comdlg32.spec
index 4cfa9e247b3e6df234e4cf679421a7f6d578117f..60bf66eac6480214b0f164bc9a2e6ad91ae63509 100644
--- a/dlls/commdlg/comdlg32.spec
+++ b/dlls/commdlg/comdlg32.spec
@@ -8,6 +8,8 @@ import shlwapi.dll
 import comctl32.dll
 import user32.dll
 import winspool.drv
+import gdi32.dll
+import kernel32.dll
 
  0 stub ArrowBtnWndProc
  1 stdcall ChooseColorA(ptr) ChooseColorA
diff --git a/dlls/crtdll/Makefile.in b/dlls/crtdll/Makefile.in
index 2b4fd17cbb6a3308439737f5aa85147c857e3b58..805ae768d92f8c3f975ec2e845c161bc88ba2d41 100644
--- a/dlls/crtdll/Makefile.in
+++ b/dlls/crtdll/Makefile.in
@@ -4,6 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = crtdll
 SOVERSION = 1.0
+IMPORTS   = kernel32
 
 C_SRCS = \
 	crtdll_main.c \
diff --git a/dlls/crtdll/crtdll.spec b/dlls/crtdll/crtdll.spec
index c95cad6aa70d30b51e0272ad63f726e1c04d4e0d..12b0c5ddee61f08a6c2c92178f6f54278218226c 100644
--- a/dlls/crtdll/crtdll.spec
+++ b/dlls/crtdll/crtdll.spec
@@ -3,7 +3,8 @@ name	crtdll
 type	win32
 init    CRTDLL_Init
 
-import	ntdll
+import kernel32.dll
+import ntdll.dll
 
 @ cdecl ??2@YAPAXI@Z(long) CRTDLL_new
 @ cdecl ??3@YAXPAX@Z(long) CRTDLL_delete
diff --git a/dlls/ddraw/Makefile.in b/dlls/ddraw/Makefile.in
index abce99bcd23cfb998389f3f4c48f7dff2ba81663..78f7c220f151f714b5335b86a511ab57d7047e6f 100644
--- a/dlls/ddraw/Makefile.in
+++ b/dlls/ddraw/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = ddraw
 SOVERSION = 1.0
-IMPORTS   = x11drv
+IMPORTS   = ole32 user32 x11drv gdi32 kernel32
 
 MESA_SRCS = \
 	d3dcommon.c \
diff --git a/dlls/ddraw/ddraw.spec b/dlls/ddraw/ddraw.spec
index dae8e12275a0e94244fccab6bf166d6bd26765a4..871a7718548ef756269916d6316e759c74622c8e 100644
--- a/dlls/ddraw/ddraw.spec
+++ b/dlls/ddraw/ddraw.spec
@@ -1,10 +1,11 @@
 name ddraw
 type win32
 
-import kernel32.dll
-import user32.dll
 import ole32.dll
+import user32.dll
 import x11drv.dll
+import gdi32.dll
+import kernel32.dll
 
 @ stub DDHAL32_VidMemAlloc
 @ stub DDHAL32_VidMemFree
diff --git a/dlls/dinput/Makefile.in b/dlls/dinput/Makefile.in
index 9918d72ebbbe28f632a541b7c6d332303725edcc..f5bdf81f13f45b19626d8252976e2f9adf86ef0d 100644
--- a/dlls/dinput/Makefile.in
+++ b/dlls/dinput/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = dinput
 SOVERSION = 1.0
-IMPORTS   = user32
+IMPORTS   = user32 kernel32
 
 C_SRCS = \
 	dinput_main.c
diff --git a/dlls/dinput/dinput.spec b/dlls/dinput/dinput.spec
index eb3894dcc9505ef64498d5bc5f0dc3647f23ba8c..37ad86586870a86a15c6171e08dc10404592f029 100644
--- a/dlls/dinput/dinput.spec
+++ b/dlls/dinput/dinput.spec
@@ -2,6 +2,7 @@ name dinput
 type win32
 
 import user32.dll
+import kernel32.dll
 
 @ stdcall DirectInputCreateA(long long ptr ptr) DirectInputCreateA
 @ stub DirectInputCreateW
diff --git a/dlls/dplay/Makefile.in b/dlls/dplay/Makefile.in
index 5e49c0edc987448cc2ccaa610bfc97f6794e24bb..5872532bdd796d3763d8f391106cb0feb292a423 100644
--- a/dlls/dplay/Makefile.in
+++ b/dlls/dplay/Makefile.in
@@ -4,6 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = dplay
 SOVERSION = 1.0
+IMPORTS   = dplayx
 
 C_SRCS = dplay_main.c
 
diff --git a/dlls/dplayx/Makefile.in b/dlls/dplayx/Makefile.in
index a48c400e064e9c27f895f6182397971f1db7dfc1..83a001d154a84dfdaf52184cebb745c9f0812b5e 100644
--- a/dlls/dplayx/Makefile.in
+++ b/dlls/dplayx/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = dplayx
 SOVERSION = 1.0
-IMPORTS   = ole32
+IMPORTS   = ole32 advapi32 kernel32
 
 C_SRCS = \
 	dpclassfactory.c \
diff --git a/dlls/dplayx/dplayx.spec b/dlls/dplayx/dplayx.spec
index e56f92844aba4f36638009e1d7e092d14fc9af29..c52887fe5994a64b64c4b799ccd00f600fc6ec7a 100644
--- a/dlls/dplayx/dplayx.spec
+++ b/dlls/dplayx/dplayx.spec
@@ -3,6 +3,8 @@ type win32
 init DPLAYX_LibMain
 
 import ole32.dll
+import advapi32.dll
+import kernel32.dll
 
   1 stdcall DirectPlayCreate(ptr ptr ptr) DirectPlayCreate
   2 stdcall DirectPlayEnumerateA(ptr ptr) DirectPlayEnumerateA
diff --git a/dlls/dsound/Makefile.in b/dlls/dsound/Makefile.in
index ebcd1f370cb7b154e17881b566e40e569071d09b..efb8b1f4f28a9e8d44ba82acd7afbe832884aa5c 100644
--- a/dlls/dsound/Makefile.in
+++ b/dlls/dsound/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = dsound
 SOVERSION = 1.0
-IMPORTS   = winmm
+IMPORTS   = winmm kernel32
 
 C_SRCS = \
 	dsound_main.c
diff --git a/dlls/dsound/dsound.spec b/dlls/dsound/dsound.spec
index 6a278381a107c6953192dc205fe429b023b4a231..5fadf30e6828c3c75e7bc07c7f90fa15f4e1d429 100644
--- a/dlls/dsound/dsound.spec
+++ b/dlls/dsound/dsound.spec
@@ -1,6 +1,7 @@
 name dsound
 type win32
 import winmm
+import kernel32
 
 0 stub DirectSoundUnknown
 1 stdcall DirectSoundCreate(ptr ptr ptr) DirectSoundCreate
diff --git a/dlls/msacm/Makefile.in b/dlls/msacm/Makefile.in
index bc657065647ec3656bbffca4bb814d7e63aa4642..bdcde277dc12f932c32c80535e8014fc0d5a2247 100644
--- a/dlls/msacm/Makefile.in
+++ b/dlls/msacm/Makefile.in
@@ -5,6 +5,7 @@ VPATH     = @srcdir@
 MODULE    = msacm32
 SOVERSION = 1.0
 ALTNAMES  = msacm
+IMPORTS   = winmm
 
 C_SRCS = \
 	driver.c \
diff --git a/dlls/msacm/msacm32.spec b/dlls/msacm/msacm32.spec
index d4a70b9beedf1d8d259992c754cd7daa601dace5..5ef2e46cbaf0010c7925f5a8eba798425472f0e2 100644
--- a/dlls/msacm/msacm32.spec
+++ b/dlls/msacm/msacm32.spec
@@ -2,6 +2,8 @@ name msacm32
 type win32
 init MSACM32_LibMain
 
+import winmm.dll
+
  1 stub XRegThunkEntry
  2 stdcall acmDriverAddA(ptr long long long long) acmDriverAddA
  3 stdcall acmDriverAddW(ptr long long long long) acmDriverAddW
diff --git a/dlls/msvideo/Makefile.in b/dlls/msvideo/Makefile.in
index 66a669e114411ae1d4996a52404b5eecd1087c9e..3e03b06a3fcf0841919b7057e32b80fdfd36d25b 100644
--- a/dlls/msvideo/Makefile.in
+++ b/dlls/msvideo/Makefile.in
@@ -5,7 +5,7 @@ VPATH     = @srcdir@
 MODULE    = msvfw32
 SOVERSION = 1.0
 ALTNAMES  = msvideo
-IMPORTS   = winmm
+IMPORTS   = winmm user32 gdi32 kernel32
 
 C_SRCS = \
 	msvideo_main.c \
diff --git a/dlls/msvideo/msvfw32.spec b/dlls/msvideo/msvfw32.spec
index 761940127a94ef0df41c964392d56c233fb131cc..d8351f14a0f96da3e849bf00e2e020d8058e274a 100644
--- a/dlls/msvideo/msvfw32.spec
+++ b/dlls/msvideo/msvfw32.spec
@@ -1,7 +1,10 @@
 name	msvfw32
 type	win32
 
-import	winmm.dll
+import winmm.dll
+import user32.dll
+import gdi32.dll
+import kernel32.dll
 
 # Yes, ICCompress,ICDecompress,MCIWnd* and ICDraw* are cdecl (VFWAPIV).
 # The rest is stdcall (VFWAPI) however. -Marcus Meissner, 990124
diff --git a/dlls/ole32/Makefile.in b/dlls/ole32/Makefile.in
index e15a3c2efa170d5ee059421448bd75b42bd96fd3..3b5603ce2010d4ad3ef241e11441240d421a0588 100644
--- a/dlls/ole32/Makefile.in
+++ b/dlls/ole32/Makefile.in
@@ -5,7 +5,7 @@ VPATH     = @srcdir@
 MODULE    = ole32
 SOVERSION = 1.0
 ALTNAMES  = ole2 ole2nls ole2conv ole2prox ole2thk storage compobj
-IMPORTS   = rpcrt4 kernel32
+IMPORTS   = advapi32 user32 gdi32 rpcrt4 kernel32
 
 C_SRCS = \
 	antimoniker.c \
diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec
index e9cda5b4b58cd982f6f87eedcb6a4eef0028e30f..f1cf272174e4ff70569813eb773a31a2afdfd9e7 100644
--- a/dlls/ole32/ole32.spec
+++ b/dlls/ole32/ole32.spec
@@ -1,8 +1,11 @@
 name	ole32
 type	win32
 
-import  rpcrt4
-import	kernel32
+import advapi32.dll
+import user32.dll
+import gdi32.dll
+import rpcrt4.dll
+import kernel32.dll
 
   1 stub BindMoniker                # stdcall (ptr long ptr ptr) return 0,ERR_NOTIMPLEMENTED
   2 stdcall CLSIDFromProgID(wstr ptr) CLSIDFromProgID
diff --git a/dlls/oleaut32/Makefile.in b/dlls/oleaut32/Makefile.in
index 31425b5d5732f4c8a78ce42c447a4f649c2a990b..ca082fc52a118873a3b5b45737b7436b04b4fe62 100644
--- a/dlls/oleaut32/Makefile.in
+++ b/dlls/oleaut32/Makefile.in
@@ -5,7 +5,7 @@ VPATH     = @srcdir@
 MODULE    = oleaut32
 SOVERSION = 1.0
 ALTNAMES  = ole2disp typelib
-IMPORTS   = ole32 comctl32
+IMPORTS   = ole32 gdi32 kernel32
 
 C_SRCS = \
 	connpt.c \
diff --git a/dlls/oleaut32/oleaut32.spec b/dlls/oleaut32/oleaut32.spec
index f0f9b50790e732127750c0d665ad218fcddfbb88..2a0c9d7534e624de57a1965ed0a05c15e13ce107 100644
--- a/dlls/oleaut32/oleaut32.spec
+++ b/dlls/oleaut32/oleaut32.spec
@@ -2,6 +2,8 @@ name oleaut32
 type win32
 
 import ole32.dll
+import gdi32.dll
+import kernel32.dll
 
 1 stub DllGetClassObject
 2 stdcall SysAllocString(wstr) SysAllocString
diff --git a/dlls/olecli/Makefile.in b/dlls/olecli/Makefile.in
index 93b9fa2858ab79e9b260d9ece8c7e74d933ce66d..a8ddcd79370e469a62d7bda0a4678801f7c5fc33 100644
--- a/dlls/olecli/Makefile.in
+++ b/dlls/olecli/Makefile.in
@@ -5,7 +5,7 @@ VPATH     = @srcdir@
 MODULE    = olecli32
 SOVERSION = 1.0
 ALTNAMES  = olecli
-IMPORTS   = olesvr32 ole32
+IMPORTS   = ole32 olesvr32 gdi32
 
 C_SRCS = \
 	olecli_main.c
diff --git a/dlls/olecli/olecli32.spec b/dlls/olecli/olecli32.spec
index 4b66f049d66f143a3ba4e50a6336e98afb30e946..4c1d16b293d60c3d6a6af5f1d3f14451b54edf8b 100644
--- a/dlls/olecli/olecli32.spec
+++ b/dlls/olecli/olecli32.spec
@@ -3,6 +3,7 @@ type win32
 
 import ole32.dll
 import olesvr32.dll
+import gdi32.dll
 
    1 stub WEP
    2 stub OleDelete
diff --git a/dlls/olepro32/Makefile.in b/dlls/olepro32/Makefile.in
index 7701f6ffa56071555cf0024f3c22ebb10ca6e70d..534a94b01f527b12d9c7369aa50b205380a11cbc 100644
--- a/dlls/olepro32/Makefile.in
+++ b/dlls/olepro32/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = olepro32
 SOVERSION = 1.0
-IMPORTS	  = oleaut32 ole32
+IMPORTS   = oleaut32
 
 C_SRCS = olepro32stubs.c
 
diff --git a/dlls/opengl32/Makefile.in b/dlls/opengl32/Makefile.in
index 8e9d45ebadaad99e13d86805d0ff109d5163570e..d2d1530958af141c742cc8fe06fa7722466f7383 100644
--- a/dlls/opengl32/Makefile.in
+++ b/dlls/opengl32/Makefile.in
@@ -4,9 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = opengl32
 SOVERSION = 1.0
-IMPORTS   = \
-	x11drv \
-	gdi32
+IMPORTS   = x11drv
 
 C_SRCS = \
 	wgl.c \
diff --git a/dlls/richedit/Makefile.in b/dlls/richedit/Makefile.in
index 83591efb0bf5e7aa0cc714c8af0dd280f340390f..dcc38fc1d65fc8672b48f26671b1458408c188f7 100644
--- a/dlls/richedit/Makefile.in
+++ b/dlls/richedit/Makefile.in
@@ -4,6 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = riched32
 SOVERSION = 1.0
+IMPORTS   = user32
 
 C_SRCS = \
 	charlist.c \
diff --git a/dlls/richedit/reader.c b/dlls/richedit/reader.c
index 4f82ddbc55ecc5cfa5774fc78f9ae8e671537afa..160bff17f59c73def29ae9775ba045c9d4dbed35 100644
--- a/dlls/richedit/reader.c
+++ b/dlls/richedit/reader.c
@@ -92,12 +92,6 @@ extern HANDLE RICHED32_hHeap;
 
 # define	maxCSStack		10
 
-#ifndef THINK_C
-extern char	*malloc ();
-#else
-extern void	*malloc(size_t);
-#endif
-
 static int      _RTFGetChar();
 static void	_RTFGetToken ();
 static void	_RTFGetToken2 ();
diff --git a/dlls/richedit/riched32.spec b/dlls/richedit/riched32.spec
index 5924b99c869a34552765426a9e557c0be2c52c34..799a141f76e6c1f4d5e6fddda70200589a73b3e8 100644
--- a/dlls/richedit/riched32.spec
+++ b/dlls/richedit/riched32.spec
@@ -2,4 +2,6 @@ name	riched32
 type	win32
 init	RICHED32_LibMain
 
+import	user32.dll
+
 2 stdcall DllGetVersion (ptr) RICHED32_DllGetVersion
diff --git a/dlls/serialui/Makefile.in b/dlls/serialui/Makefile.in
index 3139dda4a8eb749c02a94a35b33ea82daeb284e3..85bf55398c28daa3c927228c396ac01b97955239 100644
--- a/dlls/serialui/Makefile.in
+++ b/dlls/serialui/Makefile.in
@@ -4,6 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = serialui
 SOVERSION = 1.0
+IMPORTS   = user32
 
 C_SRCS = \
 	confdlg.c
diff --git a/dlls/serialui/serialui.spec b/dlls/serialui/serialui.spec
index 5fb8d61a8511b64f9e177887d81a648f57a056fe..4b69485f12b8f9ff008349a00fada89adc3dc8a2 100644
--- a/dlls/serialui/serialui.spec
+++ b/dlls/serialui/serialui.spec
@@ -3,6 +3,8 @@ type	win32
 init	SERIALUI_LibMain
 rsrc	serialui_rc
 
+import	user32.dll
+
 2 stdcall EnumPropPages(ptr ptr ptr) SERIALUI_EnumPropPages
 3 stdcall drvCommConfigDialog(ptr long ptr) SERIALUI_CommConfigDialog
 4 stdcall drvSetDefaultCommConfig(str ptr long) SERIALUI_SetDefaultCommConfig
diff --git a/dlls/shell32/Makefile.in b/dlls/shell32/Makefile.in
index 9f1efe14d1f44ab99cf757600a9c308cc55155d1..2cdb32e3c64280f97f7f15c7204ca7f64698fbc0 100644
--- a/dlls/shell32/Makefile.in
+++ b/dlls/shell32/Makefile.in
@@ -5,7 +5,7 @@ VPATH     = @srcdir@
 MODULE    = shell32
 SOVERSION = 1.0
 ALTNAMES  = shell
-IMPORTS   = ole32 shlwapi
+IMPORTS   = ole32 shlwapi comctl32 advapi32 user32 gdi32 kernel32
 
 C_SRCS = \
 	brsfolder.c \
diff --git a/dlls/shell32/shell32.spec b/dlls/shell32/shell32.spec
index 12937d8dc96a7fd6652e5eeb8734ca7a632fd099..ce91bbfcea0fab7fe8d3efac89fcb2c90251eddd 100644
--- a/dlls/shell32/shell32.spec
+++ b/dlls/shell32/shell32.spec
@@ -3,12 +3,15 @@ type	win32
 init	Shell32LibMain
 rsrc	shres
 
-import	shlwapi.dll
-import	user32.dll
-import	comctl32.dll
-
 # fixme: avoid this import
-import	ole32.dll
+import ole32.dll
+
+import shlwapi.dll
+import comctl32.dll
+import advapi32.dll
+import user32.dll
+import gdi32.dll
+import kernel32.dll
 
 # Functions exported by the Win95 shell32.dll 
 # (these need to have these exact ordinals, for some 
diff --git a/dlls/shlwapi/Makefile.in b/dlls/shlwapi/Makefile.in
index 86fecb29016014d42fa256c179d8e2df72029026..394227bc56ca487c597a3a12a3b57356efdc3e2a 100644
--- a/dlls/shlwapi/Makefile.in
+++ b/dlls/shlwapi/Makefile.in
@@ -4,6 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = shlwapi
 SOVERSION = 1.0
+IMPORTS   = advapi32 user32 kernel32
 
 C_SRCS = \
 	ordinal.c \
diff --git a/dlls/ttydrv/Makefile.in b/dlls/ttydrv/Makefile.in
index c82f7d217832ec9b4a3d9404a9c1b099c08bb157..24bb2301d526c4c632af57b82f956023a4288081 100644
--- a/dlls/ttydrv/Makefile.in
+++ b/dlls/ttydrv/Makefile.in
@@ -5,6 +5,7 @@ VPATH     = @srcdir@
 MODULE    = ttydrv
 SOVERSION = 1.0
 EXTRALIBS = $(LIBS)
+IMPORTS   = user32 gdi32 kernel32
 
 C_SRCS = \
 	ttydrv_main.c
diff --git a/dlls/ttydrv/ttydrv.spec b/dlls/ttydrv/ttydrv.spec
index 96fd63eae306ef5167d3e49f8c10f87184fd43e1..1ae7142ad164004101a31aeeccddc660a2504eba 100644
--- a/dlls/ttydrv/ttydrv.spec
+++ b/dlls/ttydrv/ttydrv.spec
@@ -2,4 +2,6 @@ name	ttydrv
 type	win32
 init	TTYDRV_Init
 
-import  gdi32.dll
+import	user32.dll
+import	gdi32.dll
+import	kernel32.dll
diff --git a/dlls/user/Makefile.in b/dlls/user/Makefile.in
index f6989f61bed80819a4525ca6c32da9c5a72180ec..22f489aee0562a082abe217bf8c0eab83a908047 100644
--- a/dlls/user/Makefile.in
+++ b/dlls/user/Makefile.in
@@ -6,6 +6,7 @@ MODULE    = user32
 SOVERSION = 1.0
 WRCEXTRA  = -w16 -m
 ALTNAMES  = user keyboard ddeml display mouse
+IMPORTS   = gdi32
 
 C_SRCS = \
 	bidi16.c \
diff --git a/dlls/user/user32.spec b/dlls/user/user32.spec
index 83c3baa9a63f199caaa7edf555ea332d79acb7e5..ad6679db1d95be25bbdae4638019329eec97e5bb 100644
--- a/dlls/user/user32.spec
+++ b/dlls/user/user32.spec
@@ -3,6 +3,8 @@ type	win32
 init	USER_Init
 rsrc	user32
 
+import	gdi32.dll
+
   1 stdcall ActivateKeyboardLayout(long long) ActivateKeyboardLayout
   2 stdcall AdjustWindowRect(ptr long long) AdjustWindowRect
   3 stdcall AdjustWindowRectEx(ptr long long long) AdjustWindowRectEx
diff --git a/dlls/user/user_main.c b/dlls/user/user_main.c
index 6318cceec6557a21dad3e41ca50f592efd7b643c..f64a202b3ba2ffe65937bff97d38003d923879b7 100644
--- a/dlls/user/user_main.c
+++ b/dlls/user/user_main.c
@@ -5,6 +5,7 @@
 #include "windef.h"
 #include "wingdi.h"
 #include "winuser.h"
+#include "winreg.h"
 #include "wine/winbase16.h"
 
 #include "dce.h"
@@ -19,6 +20,34 @@
 #include "sysmetrics.h"
 #include "user.h"
 #include "win.h"
+#include "debugtools.h"
+
+
+/* load the graphics driver */
+static BOOL load_driver(void)
+{
+    char buffer[MAX_PATH];
+    HKEY hkey;
+    DWORD type, count;
+
+    if (RegCreateKeyExA( HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Wine", 0, NULL,
+                         REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, NULL ))
+    {
+        MESSAGE("load_driver: Cannot create config registry key\n" );
+        return FALSE;
+    }
+    count = sizeof(buffer);
+    if (RegQueryValueExA( hkey, "GraphicsDriver", 0, &type, buffer, &count ))
+        strcpy( buffer, "x11drv" );  /* default value */
+    RegCloseKey( hkey );
+
+    if (!LoadLibraryA( buffer ))
+    {
+        MESSAGE( "Could not load graphics driver '%s'\n", buffer );
+        return FALSE;
+    }
+    return TRUE;
+}
 
 
 /***********************************************************************
@@ -38,6 +67,9 @@ BOOL WINAPI USER_Init(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
      /* Global atom table initialisation */
     if (!ATOM_Init( USER_HeapSel )) return FALSE;
 
+    /* Load the graphics driver */
+    if (!load_driver()) return FALSE;
+
     /* Initialize window handling (critical section) */
     WIN_Init();
 
diff --git a/dlls/version/Makefile.in b/dlls/version/Makefile.in
index 128f7335c0b3a800b81d7fa584ed7eb0e007937b..3447096d22f94c55cfe4886290fc30ce907c6b56 100644
--- a/dlls/version/Makefile.in
+++ b/dlls/version/Makefile.in
@@ -5,7 +5,7 @@ VPATH     = @srcdir@
 MODULE    = version
 SOVERSION = 1.0
 ALTNAMES  = ver
-IMPORTS   = lz32
+IMPORTS   = lz32 kernel32
 
 C_SRCS = \
 	info.c \
diff --git a/dlls/version/version.spec b/dlls/version/version.spec
index 6d2c72010bc54fd1d08e2dfbddb1eeaa832b0095..cf06fad869aa446294b01257e1a1c8c5e3719e50 100644
--- a/dlls/version/version.spec
+++ b/dlls/version/version.spec
@@ -1,8 +1,8 @@
 name version
 type win32
 
-import kernel32.dll
 import lz32.dll
+import kernel32.dll
 
 @ stdcall GetFileVersionInfoA(str long long ptr) GetFileVersionInfoA
 @ stdcall GetFileVersionInfoSizeA(str ptr) GetFileVersionInfoSizeA
diff --git a/dlls/wineps/Makefile.in b/dlls/wineps/Makefile.in
index 97c1079b21f83356db0b62acb0f37829862bc026..354368bacfcff74a3e1295cbafb08dfd57bb9f84 100644
--- a/dlls/wineps/Makefile.in
+++ b/dlls/wineps/Makefile.in
@@ -5,6 +5,7 @@ VPATH     = @srcdir@
 MODULE    = wineps
 SOVERSION = 1.0
 ALTNAMES  = wineps16
+IMPORTS   = gdi32
 
 C_SRCS = \
 	afm.c \
diff --git a/dlls/wineps/wineps.spec b/dlls/wineps/wineps.spec
index 41b475c6a4d225b01825c92ccde8f66864bac825..e3d5bb89aa70d3cb987b425886a05cc1dadc3d76 100644
--- a/dlls/wineps/wineps.spec
+++ b/dlls/wineps/wineps.spec
@@ -2,3 +2,4 @@ name	wineps
 type	win32
 init	PSDRV_Init
 
+import	gdi32.dll
diff --git a/dlls/winmm/Makefile.in b/dlls/winmm/Makefile.in
index 4c145edf742285952bd615bcd8a5019c479625a7..8f888738bf3a4594e76a240dea0a8d6cb1ce9914 100644
--- a/dlls/winmm/Makefile.in
+++ b/dlls/winmm/Makefile.in
@@ -5,6 +5,7 @@ VPATH     = @srcdir@
 MODULE    = winmm
 SOVERSION = 1.0
 ALTNAMES  = mmsystem sound
+IMPORTS   = user32
 
 C_SRCS = \
 	joystick.c \
diff --git a/dlls/winmm/joystick/Makefile.in b/dlls/winmm/joystick/Makefile.in
index 7067d20acb9b524561f12a33c6c6e470868817f3..7de7caf7b5b1b236670442840626a805ed99b139 100644
--- a/dlls/winmm/joystick/Makefile.in
+++ b/dlls/winmm/joystick/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = joystick.drv
 SOVERSION = 1.0
-IMPORTS   = winmm
+IMPORTS   = winmm user32
 
 C_SRCS = \
 	joystick.c
diff --git a/dlls/winmm/joystick/joystick.drv.spec b/dlls/winmm/joystick/joystick.drv.spec
index 476170cea422692b4582b1dd47b65c794052157a..9b0cd2b3bb81303cd7877f1b2336363df816ca69 100644
--- a/dlls/winmm/joystick/joystick.drv.spec
+++ b/dlls/winmm/joystick/joystick.drv.spec
@@ -3,5 +3,6 @@ file joystick.drv
 type win32
 
 import winmm.dll
+import user32.dll
 
-  1 stdcall DriverProc(long long long long long) JSTCK_DriverProc
+@ stdcall DriverProc(long long long long long) JSTCK_DriverProc
diff --git a/dlls/winmm/mcianim/Makefile.in b/dlls/winmm/mcianim/Makefile.in
index bca62a160059f486e0b92f1d8d80d35e07e1411e..3bc74c96b97e041f79dcd26cc47ebed65d742c32 100644
--- a/dlls/winmm/mcianim/Makefile.in
+++ b/dlls/winmm/mcianim/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = mcianim.drv
 SOVERSION = 1.0
-IMPORTS   = winmm
+IMPORTS   = winmm user32 kernel32
 
 C_SRCS = \
 	mcianim.c
diff --git a/dlls/winmm/mcianim/mcianim.drv.spec b/dlls/winmm/mcianim/mcianim.drv.spec
index 9d0477204f2efe1de3654523be38791de1154292..b9522c0dbf2c341f7f96388337f17fb54986528f 100644
--- a/dlls/winmm/mcianim/mcianim.drv.spec
+++ b/dlls/winmm/mcianim/mcianim.drv.spec
@@ -3,5 +3,7 @@ file mcianim.drv
 type win32
 
 import winmm.dll
+import user32.dll
+import kernel32.dll
 
-  1 stdcall DriverProc(long long long long long) MCIANIM_DriverProc
+@ stdcall DriverProc(long long long long long) MCIANIM_DriverProc
diff --git a/dlls/winmm/mciavi/Makefile.in b/dlls/winmm/mciavi/Makefile.in
index 8781cd23d3f2b8b74f783215486d138c883f1079..6f52614692427bd1e7996789191b34599ebffdca 100644
--- a/dlls/winmm/mciavi/Makefile.in
+++ b/dlls/winmm/mciavi/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = mciavi.drv
 SOVERSION = 1.0
-IMPORTS   = winmm
+IMPORTS   = winmm user32 kernel32
 
 C_SRCS = \
 	mciavi.c
diff --git a/dlls/winmm/mciavi/mciavi.drv.spec b/dlls/winmm/mciavi/mciavi.drv.spec
index cc3ba41dcb5e5530077c782537e3ee520407b1c2..09547c71351327976d191a08e9660d2a978bcd9e 100644
--- a/dlls/winmm/mciavi/mciavi.drv.spec
+++ b/dlls/winmm/mciavi/mciavi.drv.spec
@@ -3,5 +3,7 @@ file mciavi.drv
 type win32
 
 import winmm.dll
+import user32.dll
+import kernel32.dll
 
-  1 stdcall DriverProc(long long long long long) MCIAVI_DriverProc
+@ stdcall DriverProc(long long long long long) MCIAVI_DriverProc
diff --git a/dlls/winmm/mcicda/Makefile.in b/dlls/winmm/mcicda/Makefile.in
index 35df79e4dab6bf49eb68b0c536dce6e9a67f764e..a204a4d19eec5d992e070aa37a3759e69a4838e8 100644
--- a/dlls/winmm/mcicda/Makefile.in
+++ b/dlls/winmm/mcicda/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = mcicda.drv
 SOVERSION = 1.0
-IMPORTS   = winmm
+IMPORTS   = winmm user32 kernel32
 
 C_SRCS = \
 	mcicda.c
diff --git a/dlls/winmm/mcicda/mcicda.drv.spec b/dlls/winmm/mcicda/mcicda.drv.spec
index 0bb624ecc255f18a756fdd81b99add1ed1c48705..f82ae87bca83d2e3345768f3417042f9ec2d6ce4 100644
--- a/dlls/winmm/mcicda/mcicda.drv.spec
+++ b/dlls/winmm/mcicda/mcicda.drv.spec
@@ -3,5 +3,7 @@ file mcicda.drv
 type win32
 
 import winmm.dll
+import user32.dll
+import kernel32.dll
 
-  1 stdcall DriverProc(long long long long long) MCICDA_DriverProc
+@ stdcall DriverProc(long long long long long) MCICDA_DriverProc
diff --git a/dlls/winmm/mciseq/Makefile.in b/dlls/winmm/mciseq/Makefile.in
index 22a82dc288fa7f118ecfb4f12a3950f6e9b8d7c9..1bad2cd52a7084938bdaddee2c6ca0992633c0c4 100644
--- a/dlls/winmm/mciseq/Makefile.in
+++ b/dlls/winmm/mciseq/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = mciseq.drv
 SOVERSION = 1.0
-IMPORTS   = winmm
+IMPORTS   = winmm user32 kernel32
 
 C_SRCS = \
 	mcimidi.c
diff --git a/dlls/winmm/mciseq/mciseq.drv.spec b/dlls/winmm/mciseq/mciseq.drv.spec
index 5c6fd7403e6fa30dbbd3ee021bb2bbd4265d2620..2ac882d3cb746fa9f36d834abca9e7cf7f04347b 100644
--- a/dlls/winmm/mciseq/mciseq.drv.spec
+++ b/dlls/winmm/mciseq/mciseq.drv.spec
@@ -3,5 +3,7 @@ file mciseq.drv
 type win32
 
 import winmm.dll
+import user32.dll
+import kernel32.dll
 
-  1 stdcall DriverProc(long long long long long) MCIMIDI_DriverProc
+@ stdcall DriverProc(long long long long long) MCIMIDI_DriverProc
diff --git a/dlls/winmm/mciwave/Makefile.in b/dlls/winmm/mciwave/Makefile.in
index 8d5685abc41682a417765d6d66f38a5abd5ebdbe..79343ea3ce5fe38db50b0de7d97d671ef00178d3 100644
--- a/dlls/winmm/mciwave/Makefile.in
+++ b/dlls/winmm/mciwave/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = mciwave.drv
 SOVERSION = 1.0
-IMPORTS   = winmm
+IMPORTS   = winmm user32 kernel32
 
 C_SRCS = \
 	mciwave.c
diff --git a/dlls/winmm/mciwave/mciwave.drv.spec b/dlls/winmm/mciwave/mciwave.drv.spec
index d7836c30bfaf422b9dc6421278a09230ec485131..860b9c4b164b3260ed4fd433c28d29cb4324abd5 100644
--- a/dlls/winmm/mciwave/mciwave.drv.spec
+++ b/dlls/winmm/mciwave/mciwave.drv.spec
@@ -3,5 +3,7 @@ file mciwave.drv
 type win32
 
 import winmm.dll
+import user32.dll
+import kernel32.dll
 
-  1 stdcall DriverProc(long long long long long) MCIWAVE_DriverProc
+@ stdcall DriverProc(long long long long long) MCIWAVE_DriverProc
diff --git a/dlls/winmm/midimap/Makefile.in b/dlls/winmm/midimap/Makefile.in
index f160aa6f57a7fc5744cf1d751e92878724f3c245..136efe274ec3b5007567c4b3c2bf6693e5467ec1 100644
--- a/dlls/winmm/midimap/Makefile.in
+++ b/dlls/winmm/midimap/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = midimap.drv
 SOVERSION = 1.0
-IMPORTS   = winmm
+IMPORTS   = winmm user32 kernel32
 
 C_SRCS = \
 	midimap.c
diff --git a/dlls/winmm/midimap/midimap.drv.spec b/dlls/winmm/midimap/midimap.drv.spec
index 790fa1c01a22f40187274ebb6f1a49066d87bca6..a899bcc332ade88aa20f992dcccedcc2c00e505f 100644
--- a/dlls/winmm/midimap/midimap.drv.spec
+++ b/dlls/winmm/midimap/midimap.drv.spec
@@ -3,7 +3,9 @@ file midimap.drv
 type win32
 
 import winmm.dll
+import user32.dll
+import kernel32.dll
 
-  1 stdcall DriverProc(long long long long long) MIDIMAP_DriverProc
-  2 stdcall midMessage(long long long long long) MIDIMAP_midMessage
-  3 stdcall modMessage(long long long long long) MIDIMAP_modMessage
+@ stdcall DriverProc(long long long long long) MIDIMAP_DriverProc
+@ stdcall midMessage(long long long long long) MIDIMAP_midMessage
+@ stdcall modMessage(long long long long long) MIDIMAP_modMessage
diff --git a/dlls/winmm/wavemap/Makefile.in b/dlls/winmm/wavemap/Makefile.in
index 311c480333292421e60dab67a2dbd0a1b7c3c08b..d7d69e7f64ba40558e612f32f3ce174ad812b690 100644
--- a/dlls/winmm/wavemap/Makefile.in
+++ b/dlls/winmm/wavemap/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = msacm.drv
 SOVERSION = 1.0
-IMPORTS   = winmm
+IMPORTS   = winmm user32 kernel32
 
 C_SRCS = \
 	wavemap.c
diff --git a/dlls/winmm/wavemap/msacm.drv.spec b/dlls/winmm/wavemap/msacm.drv.spec
index eb5313b66938b610cab7f89f6d6f0973e7b5270f..e235d062ac1df9d315e0f3c4ed39195a5885555c 100644
--- a/dlls/winmm/wavemap/msacm.drv.spec
+++ b/dlls/winmm/wavemap/msacm.drv.spec
@@ -3,7 +3,9 @@ file msacm.drv
 type win32
 
 import winmm.dll
+import user32.dll
+import kernel32.dll
 
-  1 stdcall DriverProc(long long long long long) WAVEMAP_DriverProc
-  2 stdcall widMessage(long long long long long) WAVEMAP_widMessage
-  3 stdcall wodMessage(long long long long long) WAVEMAP_wodMessage
+@ stdcall DriverProc(long long long long long) WAVEMAP_DriverProc
+@ stdcall widMessage(long long long long long) WAVEMAP_widMessage
+@ stdcall wodMessage(long long long long long) WAVEMAP_wodMessage
diff --git a/dlls/winmm/wineoss/Makefile.in b/dlls/winmm/wineoss/Makefile.in
index fb4a9c790901a81ad08b44e0f10cbbd63ea10978..41d68ff27adb7cad4009fd5b778a26954e44e100 100644
--- a/dlls/winmm/wineoss/Makefile.in
+++ b/dlls/winmm/wineoss/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = wineoss.drv
 SOVERSION = 1.0
-IMPORTS   = winmm
+IMPORTS   = winmm user32 kernel32
 
 C_SRCS = \
 	audio.c \
diff --git a/dlls/winmm/wineoss/wineoss.drv.spec b/dlls/winmm/wineoss/wineoss.drv.spec
index aae1d5943bc8adecf01ae445d596367b0480f569..fd8b9e37316e22c9be05c3f5989417a83ae236d9 100644
--- a/dlls/winmm/wineoss/wineoss.drv.spec
+++ b/dlls/winmm/wineoss/wineoss.drv.spec
@@ -3,6 +3,8 @@ file wineoss.drv
 type win32
 
 import winmm.dll
+import user32.dll
+import kernel32.dll
 
   1 stdcall DriverProc(long long long long long) OSS_DriverProc
   2 stdcall auxMessage(long long long long long) OSS_auxMessage
diff --git a/dlls/winmm/winmm.spec b/dlls/winmm/winmm.spec
index 8e07f43ebdc6845a65c8c5ef21f7c4a4bf474c52..835651771159abbf7a3fff2a22529acd1ca2bea5 100644
--- a/dlls/winmm/winmm.spec
+++ b/dlls/winmm/winmm.spec
@@ -3,6 +3,8 @@ type win32
 init WINMM_LibMain
 rsrc winmm_res
 
+import user32.dll
+
 # ordinal exports
 1 stdcall @(ptr long long) PlaySoundA
 3 stub @
diff --git a/dlls/winsock/Makefile.in b/dlls/winsock/Makefile.in
index 406db283a8a354cd1e9eb85d504179e629b28b96..37955f31217dc674e70f0a582c416a20e5e423b1 100644
--- a/dlls/winsock/Makefile.in
+++ b/dlls/winsock/Makefile.in
@@ -5,6 +5,7 @@ VPATH     = @srcdir@
 MODULE    = ws2_32
 SOVERSION = 1.0
 ALTNAMES  = winsock
+IMPORTS   = user32
 
 C_SRCS = \
 	async.c \
diff --git a/dlls/winsock/ws2_32.spec b/dlls/winsock/ws2_32.spec
index 384b2f68f6a31d824a2183f65b46b4944ad43731..0a6289a7fb28859c1afbbe28f1628a162b471dd4 100644
--- a/dlls/winsock/ws2_32.spec
+++ b/dlls/winsock/ws2_32.spec
@@ -6,6 +6,8 @@ name ws2_32
 type win32
 init WSOCK32_LibMain
 
+import user32.dll
+
 #  EXPORTS ***********
 1   stdcall  accept(long ptr ptr) WSOCK32_accept
 2   stdcall  bind(long ptr long) WSOCK32_bind
diff --git a/dlls/winspool/Makefile.in b/dlls/winspool/Makefile.in
index 66cdc0bbe599607d941bc7d7c5a0133f87280adb..25f3bfb1733dab10a736af0e67938c0ad9eefb63 100644
--- a/dlls/winspool/Makefile.in
+++ b/dlls/winspool/Makefile.in
@@ -4,6 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = winspool.drv
 SOVERSION = 1.0
+IMPORTS   = gdi32
 
 C_SRCS = \
 	info.c \
diff --git a/dlls/winspool/winspool.drv.spec b/dlls/winspool/winspool.drv.spec
index 2bb49afc398a447b062a6a7baebfa98a94c72b9c..c4aa42c90159b04153025fd2d75f12a264cd3fe1 100644
--- a/dlls/winspool/winspool.drv.spec
+++ b/dlls/winspool/winspool.drv.spec
@@ -3,6 +3,8 @@ type	win32
 file	winspool.drv
 init	WINSPOOL_EntryPoint
 
+import	gdi32.dll
+
 101 stub ADVANCEDSETUPDIALOG
 102 stub AbortPrinter
 103 stdcall AddFormA(long long ptr) AddFormA
diff --git a/dlls/wow32/Makefile.in b/dlls/wow32/Makefile.in
index cd8c84c6c2f52cfcc2a74a0822e6595c6b866088..edb0f6d407c52783b88695e6214a3ba271c946d0 100644
--- a/dlls/wow32/Makefile.in
+++ b/dlls/wow32/Makefile.in
@@ -4,6 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = wow32
 SOVERSION = 1.0
+IMPORTS   = kernel32
 
 C_SRCS = wow_main.c
 
diff --git a/dlls/x11drv/Makefile.in b/dlls/x11drv/Makefile.in
index 08b6636dc7c270d3b0b1890e20f4bdfe450883d4..1a7b70ee7ecaa193478965db10d1ed477e059aaa 100644
--- a/dlls/x11drv/Makefile.in
+++ b/dlls/x11drv/Makefile.in
@@ -5,6 +5,7 @@ VPATH     = @srcdir@
 MODULE    = x11drv
 SOVERSION = 1.0
 EXTRALIBS = $(X_LIBS) $(XLIB)
+IMPORTS   = user32 gdi32 kernel32
 
 C_SRCS = \
 	x11drv_main.c
diff --git a/dlls/x11drv/x11drv.spec b/dlls/x11drv/x11drv.spec
index a277fcc6b054a44dfdaf30606c4e113231aa6980..9fb6d956d751a4dcc8ee3bf4555eb13bc085eefb 100644
--- a/dlls/x11drv/x11drv.spec
+++ b/dlls/x11drv/x11drv.spec
@@ -2,4 +2,6 @@ name	x11drv
 type	win32
 init	X11DRV_Init
 
-import  gdi32.dll
+import	user32.dll
+import	gdi32.dll
+import	kernel32.dll
diff --git a/if1632/thunk.c b/if1632/thunk.c
index 6fb6d22b73c3665b510cb61af8fad8fdc9a209f3..ca0be129aedd264790e7d876b499512ebbb448c5 100644
--- a/if1632/thunk.c
+++ b/if1632/thunk.c
@@ -169,7 +169,7 @@ void THUNK_InitCallout(void)
     HMODULE hModule;
     NE_MODULE *pModule;
 
-    hModule = GetModuleHandleA( "USER32" );
+    hModule = LoadLibraryA( "user32.dll" );
     if ( hModule )
     {
 #define GETADDR( name )  \
@@ -199,7 +199,7 @@ void THUNK_InitCallout(void)
 #undef GETADDR
     }
 
-    pModule = NE_GetPtr( GetModuleHandle16( "USER" ) );
+    pModule = NE_GetPtr( LoadLibrary16( "USER.EXE" ) );
     if ( pModule )
     {
 #define GETADDR( var, name, thk )  \
diff --git a/scheduler/process.c b/scheduler/process.c
index 9745981f09a7ef7c60d135ac597377239a161f01..fd001c03dacd078d7a12e138c5c9813f42bd2e2a 100644
--- a/scheduler/process.c
+++ b/scheduler/process.c
@@ -247,17 +247,6 @@ static BOOL process_init( char *argv[] )
  */
 static int load_system_dlls(void)
 {
-    char driver[MAX_PATH];
-
-    PROFILE_GetWineIniString( "Wine", "GraphicsDriver", "x11drv", driver, sizeof(driver) );
-    if (!LoadLibraryA( driver ))
-    {
-        MESSAGE( "Could not load graphics driver '%s'\n", driver );
-        return 0;
-    }
-
-    if (!LoadLibraryA("USER32.DLL")) return 0;
-
     /* Get pointers to USER routines called by KERNEL */
     THUNK_InitCallout();