diff --git a/Makefile.in b/Makefile.in
index 7d4c7d790d80706cc256f4de6e8a2f6d4acc7be1..636507ee1a647cc87abbae0b072f94a9a5bb3367 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -62,6 +62,7 @@ LIBSUBDIRS = \
 	dlls/olesvr \
 	dlls/psapi \
 	dlls/rasapi32 \
+	dlls/setupx \
 	dlls/shell32 \
 	dlls/sound \
 	dlls/stress \
@@ -181,6 +182,7 @@ LIBOBJS = \
 	dlls/olesvr/olesvr.o \
 	dlls/psapi/psapi.o \
 	dlls/rasapi32/rasapi32.o \
+	dlls/setupx/setupx.o \
 	dlls/shell32/shell32.o \
 	dlls/sound/sound.o \
 	dlls/stress/stress.o \
diff --git a/configure b/configure
index 6057a3094c6e5ddbb0d0c755e301dc705897b408..f06c2f203473b8013906508022070bc4c2c0eae0 100755
--- a/configure
+++ b/configure
@@ -6115,6 +6115,7 @@ dlls/oledlg/Makefile
 dlls/olesvr/Makefile
 dlls/psapi/Makefile
 dlls/rasapi32/Makefile
+dlls/setupx/Makefile
 dlls/shell32/Makefile
 dlls/sound/Makefile
 dlls/stress/Makefile
@@ -6327,6 +6328,7 @@ dlls/oledlg/Makefile
 dlls/olesvr/Makefile
 dlls/psapi/Makefile
 dlls/rasapi32/Makefile
+dlls/setupx/Makefile
 dlls/shell32/Makefile
 dlls/sound/Makefile
 dlls/stress/Makefile
diff --git a/configure.in b/configure.in
index f597f9b8366f44a0aec541ce9cc6f44e00a23cfa..ad9b113092e8c0ed6dca5ca2792f4ed67fe3b57c 100644
--- a/configure.in
+++ b/configure.in
@@ -943,6 +943,7 @@ dlls/oledlg/Makefile
 dlls/olesvr/Makefile
 dlls/psapi/Makefile
 dlls/rasapi32/Makefile
+dlls/setupx/Makefile
 dlls/shell32/Makefile
 dlls/sound/Makefile
 dlls/stress/Makefile
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index ed6bf3ed5c24073bfd87177210b2da8e08fd5cfe..a0a9cdb2617ad533ee2060bde49de1b926ac0fdb 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -26,6 +26,7 @@ SUBDIRS = \
 	oledlg \
 	olesvr \
 	psapi \
+	setupx \
 	shell32 \
 	sound \
 	stress \
diff --git a/dlls/setupx/.cvsignore b/dlls/setupx/.cvsignore
new file mode 100644
index 0000000000000000000000000000000000000000..227d8393cc8ceb55580964a308dd33c48970ecf7
--- /dev/null
+++ b/dlls/setupx/.cvsignore
@@ -0,0 +1,3 @@
+Makefile
+*.spec.c
+*.spec.glue.s
diff --git a/dlls/setupx/Makefile.in b/dlls/setupx/Makefile.in
new file mode 100644
index 0000000000000000000000000000000000000000..e1526ae6aab3e6f3773141c3e76294ffa27bc14f
--- /dev/null
+++ b/dlls/setupx/Makefile.in
@@ -0,0 +1,17 @@
+DEFS      = @DLLFLAGS@ -D__WINE__
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = setupx
+
+SPEC_SRCS = setupx.spec
+
+C_SRCS = \
+	setupx_main.c
+
+all: $(MODULE).o
+
+@MAKE_RULES@
+
+### Dependencies:
diff --git a/dlls/setupx/setupx.spec b/dlls/setupx/setupx.spec
new file mode 100644
index 0000000000000000000000000000000000000000..c4343ce3420533fee9ad5a6dd92cf235179dea8f
--- /dev/null
+++ b/dlls/setupx/setupx.spec
@@ -0,0 +1,219 @@
+name    setupx
+type    win16
+
+1    stub     WEP
+2    stub     IPOPEN
+3    stub     IPOPENAPPEND
+4    stub     IPCLOSE
+5    stub     IPGETLONGFIELD
+6    stub     IPGETSTRINGFIELD
+7    stub     IPFINDFIRSTLINE
+8    stub     IPGETLINECOUNT
+9    stub     IPGETFIELDCOUNT
+10   stub     IPGETINTFIELD
+11   stub     IPFINDNEXTLINE
+12   stub     IPGETFILENAME
+13   stub     VCPQUEUECOPY
+14   stub     NOAUTORUNWNDPROC
+15   stub     __DEBUGMSG
+16   stub     __ASSERTMSG
+17   stub     VCPQUEUEDELETE
+18   stub     TPOPENFILE
+19   stub     TPCLOSEFILE
+20   stub     TPOPENSECTION
+21   stub     TPCLOSESECTION
+22   stub     TPCOMMITSECTION
+23   stub     TPGETLINE
+24   stub     TPGETNEXTLINE
+25   stub     TPINSERTLINE
+26   stub     TPREPLACELINE
+27   stub     TPDELETELINE
+28   stub     TPMOVELINE
+29   stub     TPGETLINECONTENTS
+30   stub     TPGETPRIVATEPROFILESTRING
+31   stub     TPWRITEPRIVATEPROFILESTRING
+32   stub     TPGETPROFILESTRING
+33   stub     CTLSETLDD
+34   stub     CTLGETLDD
+35   stub     CTLFINDLDD
+36   stub     CTLADDLDD
+37   stub     CTLDELLDD
+38   stub     CTLGETLDDPATH
+39   stub     SUREGCLOSEKEY
+40   stub     SUREGCREATEKEY
+41   stub     SUREGDELETEKEY
+42   stub     SUREGDELETEVALUE
+43   stub     SUREGENUMKEY
+44   stub     SUREGENUMVALUE
+45   stub     SUREGFLUSH
+46   stub     SUREGINIT
+47   pascal   SUregOpenKey(word str ptr) SURegOpenKey
+48   stub     SUREGQUERYVALUE
+49   stub     SUREGQUERYVALUE16
+50   pascal   SURegQueryValueEx(long str ptr ptr ptr ptr) SURegQueryValueEx
+51   stub     SUREGSETVALUE
+52   stub     SUREGSETVALUE16
+53   stub     SUREGSETVALUEEX
+54   stub     SUREGSAVEKEY
+55   stub     SUREGLOADKEY
+56   stub     SUREGUNLOADKEY
+60   stub     DISKINFOFROMLDID
+61   stub     SUERRORTOIDS
+62   stub     TPWRITEPROFILESTRING
+63   stub     SURPLSETUP
+64   stub     SUSTORELDIDPATH
+65   stub     WILDCARDSTRCMPI
+101  stub     GENINSTALL
+102  stub     GENWININITRENAME
+103  stub     GENFORMSTRWITHOUTPLACEHOLDERS
+104  stub     SETUPX
+105  stub     CFGSETUPMERGE
+106  stub     INITDEPENDANTLDIDS
+107  stub     CFGOBJFINDKEYCMD
+108  stub     GENSUREGSETVALUEEX
+110  stub     GENINSTALLEX
+111  stub     GENCOPYLOGCONFIG2REG
+112  stub     SUGETSETSETUPFLAGS
+114  stub     CFGPARSELINE
+115  stub     CFGSETAUTOPROCESS
+116  stub     CFGOBJTOSTR
+117  stub     CFGLNTOOBJ
+118  stub     MATCHCMDEXT
+119  stub     IPFINDNEXTMATCHLINE
+120  stub     P_SETDEFAULTOPTION
+121  stub     CFGCLEANBOOT
+122  stub     CFGMATCHCMDEXT
+123  stub     CFGWASFILEUPDATED
+124  stub     AUTOMATCHCMDEXT
+125  stub     P_VALIDATEOC
+126  stub     GENMAPROOTREGSTR2KEY
+127  stub     P_CDROMOC
+128  stub     P_MEDIAOC
+130  stub     _SUFORMATMESSAGE
+131  stub     SUVFORMATMESSAGE
+132  stub     _SUFORMATMESSAGEBOX
+135  stub     SUHELP
+140  stub     SUVERCONFLICT
+141  stub     SUVERCONFLICTINIT
+142  stub     SUVERCONFLICTTERM
+143  stub     SUCREATEEBD
+144  stub     SUCOPYTOEBD
+145  stub     SXISMSDOS7RUNNING
+150  stub     DS_INIT
+151  stub     DS_DESTROY
+152  stub     DS_SSYNCDRIVES
+153  stub     DS_GETDRIVEDATA
+154  stub     DS_ADDSECTION
+155  stub     DS_ENABLESECTION
+156  stub     DS_DISABLESECTION
+157  stub     DS_SETSWAPSIZE
+158  stub     DS_SETREQUIREDPAD
+159  stub     DS_SETAVAILABLEPAD
+160  stub     SXUPDATEDS
+170  stub     SUSETMEM
+171  stub     WRITEDMFBOOTDATA
+200  stub     VCPOPEN
+201  stub     VCPCLOSE
+202  stub     VCPDEFCALLBACKPROC
+203  stub     VCPENUMFILES
+204  stub     VCPQUEUERENAME
+205  stub     VSMGETSTRINGNAME
+206  stub     VSMSTRINGDELETE
+207  stub     VSMSTRINGADD
+208  stub     VSMGETSTRINGRAWNAME
+209  stub     IPSAVERESTOREPOSITION
+210  stub     IPGETPROFILESTRING
+211  stub     IPOPENEX
+212  stub     IPOPENAPPENDEX
+213  stub     VCPUICALLBACKPROC
+214  stub     VCPADDMRUPATH
+300  stub     DIBUILDCOMPATDRVLIST
+301  stub     DIBUILDCLASSDRVLIST
+302  stub     DIDESTROYDRIVERNODELIST
+303  stub     DICREATEDEVICEINFO
+304  stub     DIGETCLASSDEVS
+305  stub     DIDESTROYDEVICEINFOLIST
+306  stub     DIREMOVEDEVICE
+308  stub     DICALLCLASSINSTALLER
+309  stub     DICREATEDRIVERNODE
+310  stub     DIDRAWMINIICON
+311  stub     DIGETCLASSBITMAPINDEX
+312  stub     DISELECTDEVICE
+313  stub     DIINSTALLDEVICE
+314  stub     DILOADCLASSICON
+315  stub     DIASKFOROEMDISK
+316  stub     DISPLAY_SETMODE
+317  stub     DISPLAY_CLASSINSTALLER
+318  stub     DICREATEDEVREGKEY
+319  stub     DIOPENDEVREGKEY
+320  stub     DIINSTALLDRVSECTION
+321  stub     DIINSTALLCLASS
+322  stub     DIOPENCLASSREGKEY
+323  stub     DISPLAY_SETFONTSIZE
+324  stub     DISPLAY_OPENFONTSIZEKEY
+325  stub     DIBUILDCLASSDRVLISTFROMOLDINF
+326  stub     DIISTHERENEEDTOCOPY
+333  stub     DICHANGESTATE
+340  stub     GETFCTN
+341  stub     DIBUILDCLASSINFOLIST
+342  stub     DIDESTROYCLASSINFOLIST
+343  stub     DIGETDEVICECLASSINFO
+344  stub     DIDELETEDEVREGKEY
+350  stub     DISELECTOEMDRV
+351  stub     DIGETINFCLASS
+360  stub     GENINFLCTODEVNODE
+361  stub     GETDOSMESSAGE
+362  stub     MOUSE_CLASSINSTALLER
+363  stub     SXCOMPAREDOSAPPVER
+365  stub     FCEGETRESDESOFFSET
+366  stub     FCEGETALLOCVALUE
+367  stub     FCEADDRESDES
+368  stub     FCEDELETERESDES
+369  stub     FCEINIT
+370  stub     FCEGETRESDES
+371  stub     FCEGETFIRSTVALUE
+372  stub     FCEGETOTHERVALUE
+373  stub     FCEGETVALIDATEVALUE
+374  stub     FCEWRITETHISFORCEDCONFIGNOW
+375  stub     SUCREATEPROPERTYSHEETPAGE
+376  stub     SUDESTROYPROPERTYSHEETPAGE
+377  stub     SUPROPERTYSHEET
+380  stub     DIREADREGLOGCONF
+381  stub     DIREADREGCONF
+390  stub     DIBUILDPOTENTIALDUPLICATESLIST
+395  stub     INITSUBSTRDATA
+396  stub     GETFIRSTSUBSTR
+397  stub     GETNEXTSUBSTR
+400  stub     BISFILEINVMM32
+401  stub     DIINSTALLDRIVERFILES
+405  stub     DIBUILDCLASSINFOLISTEX
+406  stub     DIGETCLASSDEVSEX
+407  stub     DICOPYREGSUBKEYVALUE
+410  stub     IPGETVERSIONSTRING
+411  stub     VCPEXPLAIN
+412  stub     DIBUILDDRIVERINDEX
+413  stub     DIADDSINGLEINFTODRVIDX
+414  stub     FCEGETFLAGS
+450  stub     UIMAKEDLGNONBOLD
+451  stub     UIDELETENONBOLDFONT
+500  stub     SUEBDPAGE
+501  stub     SUOCPAGE
+502  stub     SXLISTSUBPROC
+503  stub     SXFILLLB
+504  stub     SXOCPAGEDLG
+506  stub     SXOCBATCHSETTINGS
+507  stub     SXOCFIXNEEDS
+508  stub     CTLSETLDDPATH
+509  stub     SXCALLOCPROC
+520  stub     DIBUILDCLASSDRVINFOLIST
+521  stub     DIBUILDCOMPATDRVINFOLIST
+522  stub     DIDESTROYDRVINFOLIST
+523  stub     DICONVERTDRIVERINFOTODRIVERNODE
+525  stub     FIRSTBOOTMOVETODOSSTART
+526  stub     DOSOPTENABLECURCFG
+527  stub     INSTALLHINFSECTION
+528  stub     SXMAKEUNCPATH
+529  stub     SXISSBSSERVERFILE
+530  stub     SXFINDBATCHFILES
+600  stub     PIDCONSTRUCT
+601  stub     PIDVALIDATE
diff --git a/dlls/setupx/setupx_main.c b/dlls/setupx/setupx_main.c
new file mode 100644
index 0000000000000000000000000000000000000000..25e9f425d53b33ccb44844c76e0600046f7519e2
--- /dev/null
+++ b/dlls/setupx/setupx_main.c
@@ -0,0 +1,28 @@
+/*
+ *      SETUPX library
+ *
+ *      Copyright 1998  Andreas Mohr
+ *
+ * FIXME: Rather non-functional functions for now.
+ */
+
+#include "windows.h"
+#include "debugtools.h"
+
+DEFAULT_DEBUG_CHANNEL(setupx)
+
+DWORD WINAPI SURegOpenKey( HKEY hkey, LPCSTR lpszSubKey, LPHKEY retkey )
+{
+    FIXME("(%x,%s,%p), semi-stub.\n",hkey,debugstr_a(lpszSubKey),retkey);
+    return RegOpenKeyA( hkey, lpszSubKey, retkey );
+}
+
+DWORD WINAPI SURegQueryValueEx( HKEY hkey, LPSTR lpszValueName,
+                                LPDWORD lpdwReserved, LPDWORD lpdwType,
+                                LPBYTE lpbData, LPDWORD lpcbData )
+{
+    FIXME("(%x,%s,%p,%p,%p,%ld), semi-stub.\n",hkey,debugstr_a(lpszValueName),
+          lpdwReserved,lpdwType,lpbData,lpcbData?*lpcbData:0);
+    return RegQueryValueExA( hkey, lpszValueName, lpdwReserved, lpdwType,
+                               lpbData, lpcbData );
+}