diff --git a/dlls/shell32/.cvsignore b/dlls/shell32/.cvsignore
index 884d8e447c19452e3479ef46914c73329085227c..68f59dcded77d1c51e49bf13df6cc3e60736bf9f 100644
--- a/dlls/shell32/.cvsignore
+++ b/dlls/shell32/.cvsignore
@@ -1,4 +1,5 @@
 Makefile
-shell32.spec.c
 shell.spec.c
+shell32.spec.c
+shlwapi.spec.c
 shres.s
diff --git a/dlls/shell32/Makefile.in b/dlls/shell32/Makefile.in
index 2c6f38d6e3822b8814e6c789b447c5174bddde54..a28c3e92af8f88e59b979ec65bfe54ea27b22308 100644
--- a/dlls/shell32/Makefile.in
+++ b/dlls/shell32/Makefile.in
@@ -6,7 +6,10 @@ VPATH     = @srcdir@
 MODULE    = shell32
 WRCEXTRA  = -s -p$(MODULE)
 
-SPEC_SRCS = shell32.spec shell.spec
+SPEC_SRCS = \
+	shell.spec \
+	shell32.spec \
+	shlwapi.spec
 
 C_SRCS = \
 	brsfolder.c \
diff --git a/dlls/shell32/shellord.c b/dlls/shell32/shellord.c
index e59c7d588fb992a50dfa10f0e777752569ca79eb..e0ca91e0ed662fb731001ff86029c5b964c3b59e 100644
--- a/dlls/shell32/shellord.c
+++ b/dlls/shell32/shellord.c
@@ -930,6 +930,11 @@ HRESULT WINAPI IsUserAdmin(void)
  * NOTES
  *  the pidl is for STRRET OFFSET
  */
+HRESULT WINAPI StrRetToBufA (LPSTRRET src, LPITEMIDLIST pidl, LPSTR dest, DWORD len)
+{
+	return StrRetToStrNA(dest, len, src, pidl);
+}
+
 HRESULT WINAPI StrRetToStrNA (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl)
 {
 	TRACE("dest=0x%p len=0x%lx strret=0x%p pidl=%p stub\n",dest,len,src,pidl);
@@ -960,6 +965,11 @@ HRESULT WINAPI StrRetToStrNA (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST
 	return S_OK;
 }
 
+HRESULT WINAPI StrRetToBufW (LPSTRRET src, LPITEMIDLIST pidl, LPWSTR dest, DWORD len)
+{
+	return StrRetToStrNW(dest, len, src, pidl);
+}
+
 HRESULT WINAPI StrRetToStrNW (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl)
 {
 	TRACE("dest=0x%p len=0x%lx strret=0x%p pidl=%p stub\n",dest,len,src,pidl);
diff --git a/dlls/shell32/shlwapi.spec b/dlls/shell32/shlwapi.spec
new file mode 100644
index 0000000000000000000000000000000000000000..2e07eff2d37f84dc8c9a5d6fb6c8d68b422bab1f
--- /dev/null
+++ b/dlls/shell32/shlwapi.spec
@@ -0,0 +1,398 @@
+name shlwapi
+type win32
+
+1	stub	stub_01
+2	stub	stub_02
+3	stub	stub_03
+4	stub	stub_04
+5	stub	stub_05
+6	stub	stub_06
+7	stub	stub_07
+8	stub	stub_08
+9	stub	stub_09
+10	stub	stub_10
+11	stub	stub_11
+12	stub	stub_12
+13	stub	stub_13
+14	stub	stub_14
+15	stub	stub_15
+16	stub	stub_16
+17	stub	stub_17
+18	stub	stub_18
+19	stub	stub_19
+20	stub	stub_20
+21	stub	stub_21
+22	stub	stub_22
+23	stub	stub_23
+24	stub	stub_24
+25	stub	stub_25
+26	stub	stub_26
+27	stub	stub_27
+28	stub	stub_28
+29	stub	stub_29
+30	stub	stub_30
+31	stub	stub_31
+32	stub	stub_32
+33	stub	stub_33
+34	stub	stub_34
+35	stub	stub_35
+36	stub	stub_36
+37	stub	stub_37
+38	stub	stub_38
+39	stub	stub_39
+40	stub	stub_40
+41	stub	stub_41
+42	stub	stub_42
+43	stub	stub_43
+44	stub	stub_44
+45	stub	stub_45
+46	stub	stub_46
+47	stub	stub_47
+48	stub	stub_48
+49	stub	stub_49
+50	stub	stub_50
+51	stub	stub_51
+52	stub	stub_52
+53	stub	stub_53
+54	stub	stub_54
+55	stub	stub_55
+56	stub	stub_56
+57	stub	stub_57
+58	stub	stub_58
+59	stub	stub_59
+60	stub	stub_60
+61	stub	stub_61
+62	stub	stub_62
+63	stub	stub_63
+64	stub	stub_64
+65	stub	stub_65
+66	stub	stub_66
+67	stub	stub_67
+68	stub	stub_68
+69	stub	stub_69
+70	stub	stub_70
+71	stub	stub_71
+72	stub	stub_72
+73	stub	stub_73
+74	stub	stub_74
+75	stub	stub_75
+76	stub	stub_76
+77	stub	stub_77
+78	stub	stub_78
+79	stub	stub_79
+80	stub	stub_80
+81	stub	stub_81
+82	stub	stub_82
+83	stub	stub_83
+84	stub	stub_84
+85	stub	stub_85
+86	stub	stub_86
+87	stub	stub_87
+88	stub	stub_88
+89	stub	stub_89
+90	stub	stub_90
+91	stub	stub_91
+92	stub	stub_92
+93	stub	stub_93
+94	stub	stub_94
+95	stub	stub_95
+96	stub	stub_96
+97	stub	stub_97
+98	stub	stub_98
+99	stub	stub_99
+100	stub	stub_100
+101	stub	stub_101
+102	stub	stub_102
+103	stub	stub_103
+104	stub	stub_104
+105	stub	stub_105
+106	stub	stub_106
+107	stub	stub_107
+108	stub	stub_108
+109	stub	stub_109
+110	stub	stub_110
+111	stub	stub_111
+112	stub	stub_112
+113	stub	stub_113
+114	stub	stub_114
+115	stub	stub_115
+116	stub	stub_116
+117	stub	stub_117
+118	stub	stub_118
+119	stub	stub_119
+120	stub	stub_120
+121	stub	stub_121
+122	stub	stub_122
+123	stub	stub_123
+124	stub	stub_124
+125	stub	stub_125
+126	stub	stub_126
+127	stub	stub_127
+128	stub	stub_128
+129	stub	stub_129
+130	stub	stub_130
+131	stub	stub_131
+132	stub	stub_132
+133	stub	stub_133
+134	stub	stub_134
+135	stub	stub_135
+136	stub	stub_136
+137	stub	stub_137
+138	stub	stub_138
+139	stub	stub_139
+140	stub	stub_140
+141	stub	stub_141
+142	stub	stub_142
+143	stub	stub_143
+144	stub	stub_144
+145	stub	stub_145
+146	stub	stub_146
+147	stub	stub_147
+148	stub	stub_148
+149	stub	stub_149
+150	stub	stub_150
+151	stub	stub_151
+152	stub	stub_152
+153	stub	stub_153
+154	stub	stub_154
+155	stub	stub_155
+156	stub	stub_156
+157	stub	stub_157
+158	stub	stub_158
+159	stub	stub_159
+160	stub	stub_160
+161	stub	stub_161
+162	stub	ChrCmpIA
+163	stub	ChrCmpIW
+164	stub	DllGetVersion
+165	stub	GetMenuPosFromID
+166	stub	HashData
+167	stub	IntlStrEqWorkerA
+168	stub	IntlStrEqWorkerW
+169	stdcall	PathAddBackslashA (ptr) PathAddBackslashA
+170	stdcall	PathAddBackslashW (ptr) PathAddBackslashW
+171	stub	PathAddExtensionA
+172	stub	PathAddExtensionW
+173	stdcall	PathAppendA (str str) PathAppendA
+174	stub	PathAppendW
+175	stdcall	PathBuildRootA (ptr long) PathBuildRootA
+176	stub	PathBuildRootW
+177	stub	PathCanonicalizeA
+178	stub	PathCanonicalizeW
+179	stdcall	PathCombineA (ptr ptr ptr) PathCombineA
+180	stdcall	PathCombineW (ptr ptr ptr) PathCombineW
+181	stub	PathCommonPrefixA
+182	stub	PathCommonPrefixW
+183	stub	PathCompactPathA
+184	stub	PathCompactPathExA
+185	stub	PathCompactPathExW
+186	stub	PathCompactPathW
+187	stub	PathCreateFromUrlA
+188	stub	PathCreateFromUrlW
+189	stdcall	PathFileExistsA (str) PathFileExistsA
+190	stub	PathFileExistsW
+191	stdcall	PathFindExtensionA (ptr) PathFindExtensionA
+192	stdcall	PathFindExtensionW (ptr) PathFindExtensionW
+193	stdcall	PathFindFileNameA (ptr) PathFindFilenameA
+194	stdcall	PathFindFileNameW (ptr) PathFindFilenameW
+195	stub	PathFindNextComponentA
+196	stub	PathFindNextComponentW
+197	stdcall	PathFindOnPathA (ptr ptr) PathFindOnPathA
+198	stdcall	PathFindOnPathW (ptr ptr) PathFindOnPathW
+199	stdcall	PathGetArgsA (str) PathGetArgsA
+200	stdcall	PathGetArgsW (str) PathGetArgsW
+201	stub	PathGetCharTypeA
+202	stub	PathGetCharTypeW
+203	stdcall	PathGetDriveNumberA (str) PathGetDriveNumber
+204	stub	PathGetDriveNumberW #(str) PathGetDriveNumber
+205	stub	PathIsContentTypeA
+206	stub	PathIsContentTypeW
+207	stub	PathIsDirectoryA
+208	stub	PathIsDirectoryW
+209	stub	PathIsFileSpecA
+210	stub	PathIsFileSpecW
+211	stub	PathIsPrefixA
+212	stub	PathIsPrefixW
+213	stdcall	PathIsRelativeA (ptr) PathIsRelativeA
+214	stdcall	PathIsRelativeW (ptr) PathIsRelativeW
+215	stub	PathIsRootA
+216	stub	PathIsRootW
+217	stub	PathIsSameRootA
+218	stub	PathIsSameRootW
+219	stub	PathIsSystemFolderA
+220	stub	PathIsSystemFolderW
+221	stub	PathIsUNCA
+222	stub	PathIsUNCServerA
+223	stub	PathIsUNCServerShareA
+224	stub	PathIsUNCServerShareW
+225	stub	PathIsUNCServerW
+226	stdcall	PathIsUNCW (ptr) PathIsUNCW
+227	stdcall	PathIsURLA (ptr) PathIsUNCA
+228	stub	PathIsURLW
+229	stub	PathMakePrettyA
+230	stub	PathMakePrettyW
+231	stub	PathMakeSystemFolderA
+232	stub	PathMakeSystemFolderW
+233	stdcall	PathMatchSpecA  (str str) PathMatchSpecA
+234	stdcall	PathMatchSpecW  (str str) PathMatchSpecW
+235	stub	PathParseIconLocationA
+236	stub	PathParseIconLocationW
+237	stdcall	PathQuoteSpacesA (ptr) PathQuoteSpacesW
+238	stdcall	PathQuoteSpacesW (ptr) PathQuoteSpacesW
+239	stub	PathRelativePathToA
+240	stub	PathRelativePathToW
+241	stub	PathRemoveArgsA
+242	stub	PathRemoveArgsW
+243	stub	PathRemoveBackslashA
+244	stub	PathRemoveBackslashW
+245	stub	PathRemoveBlanksA
+246	stub	PathRemoveBlanksW
+247	stub	PathRemoveExtensionA
+248	stub	PathRemoveExtensionW
+249	stdcall	PathRemoveFileSpecA (str) PathRemoveFileSpecA
+250	stub	PathRemoveFileSpecW
+251	stub	PathRenameExtensionA
+252	stub	PathRenameExtensionW
+253	stub	PathSearchAndQualifyA
+254	stub	PathSearchAndQualifyW
+255	stdcall	PathSetDlgItemPathA (long long ptr) PathSetDlgItemPathA
+256	stdcall	PathSetDlgItemPathW (long long ptr) PathSetDlgItemPathW
+257	stub	PathSkipRootA
+258	stub	PathSkipRootW
+259	stub	PathStripPathA
+260	stub	PathStripPathW
+261	stub	PathStripToRootA
+262	stub	PathStripToRootW
+263	stub	PathUnmakeSystemFolderA
+264	stub	PathUnmakeSystemFolderW
+265	stdcall	PathUnquoteSpacesA (str) PathUnquoteSpacesA
+266	stdcall	PathUnquoteSpacesW (str) PathUnquoteSpacesW
+267	stub	SHCreateShellPalette
+268	stub	SHDeleteEmptyKeyA
+269	stub	SHDeleteEmptyKeyW
+270	stub	SHDeleteKeyA
+271	stub	SHDeleteKeyW
+272	stub	SHDeleteOrphanKeyA
+273	stub	SHDeleteOrphanKeyW
+274	stub	SHDeleteValueA
+275	stub	SHDeleteValueW
+276	stub	SHEnumKeyExA
+277	stub	SHEnumKeyExW
+278	stub	SHEnumValueA
+279	stub	SHEnumValueW
+280	stub	SHGetInverseCMAP
+281	stub	SHGetValueA
+282	stub	SHGetValueW
+283	stub	SHIsLowMemoryMachine
+284	stub	SHOpenRegStreamA
+285	stub	SHOpenRegStreamW
+286	stub	SHQueryInfoKeyA
+287	stub	SHQueryInfoKeyW
+288	stub	SHQueryValueExA
+289	stub	SHQueryValueExW
+290	stub	SHRegCloseUSKey
+291	stub	SHRegCreateUSKeyA
+292	stub	SHRegCreateUSKeyW
+293	stub	SHRegDeleteEmptyUSKeyA
+294	stub	SHRegDeleteEmptyUSKeyW
+295	stub	SHRegDeleteUSValueA
+296	stub	SHRegDeleteUSValueW
+297	stub	SHRegEnumUSKeyA
+298	stub	SHRegEnumUSKeyW
+299	stub	SHRegEnumUSValueA
+300	stub	SHRegEnumUSValueW
+301	stub	SHRegGetBoolUSValueA
+302	stub	SHRegGetBoolUSValueW
+303	stub	SHRegGetUSValueA
+304	stub	SHRegGetUSValueW
+305	stub	SHRegOpenUSKeyA
+306	stub	SHRegOpenUSKeyW
+307	stub	SHRegQueryInfoUSKeyA
+308	stub	SHRegQueryInfoUSKeyW
+309	stub	SHRegQueryUSValueA
+310	stub	SHRegQueryUSValueW
+311	stub	SHRegSetUSValueA
+312	stub	SHRegSetUSValueW
+313	stub	SHRegWriteUSValueA
+314	stub	SHRegWriteUSValueW
+315	stub	SHSetValueA
+316	stub	SHSetValueW
+317	stub	StrCSpnA
+318	stub	StrCSpnIA
+319	stub	StrCSpnIW
+320	stub	StrCSpnW
+321	stub	StrCatW
+322	stub	StrChrA
+323	stub	StrChrIA
+324	stub	StrChrIW
+325	stdcall	StrChrW (ptr ptr) StrChrW
+326	stub	StrCmpIW
+327	stub	StrCmpNA
+328	stub	StrCmpNIA
+329	stdcall	StrCmpNIW (wstr wstr long) StrCmpNIW
+330	stub	StrCmpNW
+331	stub	StrCmpW
+332	stub	StrCpyNW
+333	stub	StrCpyW
+334	stub	StrDupA
+335	stub	StrDupW
+336	stub	StrFormatByteSizeA
+337	stub	StrFormatByteSizeW
+338	stub	StrFromTimeIntervalA
+339	stub	StrFromTimeIntervalW
+340	stub	StrIsIntlEqualA
+341	stub	StrIsIntlEqualW
+342	stub	StrNCatA
+343	stub	StrNCatW
+344	stub	StrPBrkA
+345	stub	StrPBrkW
+346	stub	StrRChrA
+347	stub	StrRChrIA
+348	stub	StrRChrIW
+349	stdcall	StrRChrW (wstr wstr long) StrRChrW
+350	stub	StrRStrIA
+351	stub	StrRStrIW
+352	stub	StrSpnA
+353	stub	StrSpnW
+354	stub	StrStrA
+355	stub	StrStrIA
+356	stub	StrStrIW
+357	stub	StrStrW
+358	stub	StrToIntA
+359	stub	StrToIntExA
+360	stub	StrToIntExW
+361	stub	StrToIntW
+362	stub	StrTrimA
+363	stub	StrTrimW
+364	stub	UrlApplySchemeA
+365	stub	UrlApplySchemeW
+366	stub	UrlCanonicalizeA
+367	stub	UrlCanonicalizeW
+368	stub	UrlCombineA
+369	stub	UrlCombineW
+370	stub	UrlCompareA
+371	stub	UrlCompareW
+372	stub	UrlCreateFromPathA
+373	stub	UrlCreateFromPathW
+374	stub	UrlEscapeA
+375	stub	UrlEscapeW
+376	stub	UrlGetLocationA
+377	stub	UrlGetLocationW
+378	stub	UrlGetPartA
+379	stub	UrlGetPartW
+380	stub	UrlHashA
+381	stub	UrlHashW
+382	stub	UrlIsA
+383	stub	UrlIsNoHistoryA
+384	stub	UrlIsNoHistoryW
+385	stub	UrlIsOpaqueA
+386	stub	UrlIsOpaqueW
+387	stub	UrlIsW
+388	stub	UrlUnescapeA
+389	stub	UrlUnescapeW
+
+# exported in later versions 
+400 stdcall StrRetToBufA (ptr ptr ptr long) StrRetToBufA
+401 stdcall StrRetToBufW (ptr ptr ptr long) StrRetToBufW
+#402 stdcall StrRetToStrA (ptr ptr ptr) StrRetToStrA
+#403 stdcall StrRetToStrW (ptr ptr ptr) StrRetToStrW
diff --git a/loader/loadorder.c b/loader/loadorder.c
index 0e9e533bd9a9fdaca65463cfa210949ba64322a4..e2de71328ea7d2cbaff2c4a06d374b6eb11ed457 100644
--- a/loader/loadorder.c
+++ b/loader/loadorder.c
@@ -39,6 +39,7 @@ static struct tagDllOverride {
 	{"comdlg32,commdlg",		"elfdll,builtin,native"},
 	{"version,ver",			"elfdll,builtin,native"},
 	{"shell32,shell",		"builtin,native"},
+	{"shlwapi",			"native,builtin"},
 	{"lz32,lzexpand",		"builtin,native"},
 	{"commctrl,comctl32",		"builtin,native"},
 	{"wsock32,winsock",		"builtin"},
diff --git a/relay32/builtin32.c b/relay32/builtin32.c
index d08653c56f6da03dafabfe9193bc5c870655deae..bdfa707084eef10d31d26e949b36cb5d0327eb61 100644
--- a/relay32/builtin32.c
+++ b/relay32/builtin32.c
@@ -82,6 +82,7 @@ extern const BUILTIN32_DESCRIPTOR OLESVR32_Descriptor;
 extern const BUILTIN32_DESCRIPTOR PSAPI_Descriptor;
 extern const BUILTIN32_DESCRIPTOR RASAPI32_Descriptor;
 extern const BUILTIN32_DESCRIPTOR SHELL32_Descriptor;
+extern const BUILTIN32_DESCRIPTOR SHLWAPI_Descriptor;
 extern const BUILTIN32_DESCRIPTOR TAPI32_Descriptor;
 extern const BUILTIN32_DESCRIPTOR USER32_Descriptor;
 extern const BUILTIN32_DESCRIPTOR VERSION_Descriptor;
@@ -134,6 +135,7 @@ static BUILTIN32_DLL BuiltinDLLs[] =
     { &PSAPI_Descriptor,    0, 0, NULL },
     { &RASAPI32_Descriptor, 0, 0, NULL },
     { &SHELL32_Descriptor,  BI32_DANGER, 0, &shell32_ResourceDescriptor },
+    { &SHLWAPI_Descriptor,  0, 0, NULL },
     { &TAPI32_Descriptor,   0, 0, NULL },
     { &USER32_Descriptor,   0, 0, &user32_ResourceDescriptor },
     { &VERSION_Descriptor,  0, 0, NULL },