diff --git a/.gitignore b/.gitignore
index 961dae504ad8762cf12137217db71105e98f83f8..8120c55843c6cb2108b8f84a4fd92376f9aef528 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,7 +25,6 @@ dlls/actxprxy/actxprxy_servprov_p.c
 dlls/advapi32/svcctl.h
 dlls/advapi32/svcctl_c.c
 dlls/atl/atliface.h
-dlls/avifile.dll16
 dlls/commdlg.dll16
 dlls/ddeml.dll16
 dlls/gdi.exe16
diff --git a/configure b/configure
index ec1417216f4043c979e35d117c1ee59b0253598b..ef84565dc71bc9bd94fb6d6bae0ec28a7ac41e49 100755
--- a/configure
+++ b/configure
@@ -24618,6 +24618,14 @@ ALL_MAKEFILE_DEPENDS="$ALL_MAKEFILE_DEPENDS
 dlls/avifil32/Makefile: dlls/avifil32/Makefile.in dlls/Makedll.rules"
 ac_config_files="$ac_config_files dlls/avifil32/Makefile"
 
+ALL_MAKEFILES="$ALL_MAKEFILES \\
+	dlls/avifile.dll16/Makefile"
+test "x$enable_win16" != xno && ALL_DLL_DIRS="$ALL_DLL_DIRS \\
+	avifile.dll16"
+ALL_MAKEFILE_DEPENDS="$ALL_MAKEFILE_DEPENDS
+dlls/avifile.dll16/Makefile: dlls/avifile.dll16/Makefile.in dlls/Makedll.rules"
+ac_config_files="$ac_config_files dlls/avifile.dll16/Makefile"
+
 ALL_MAKEFILES="$ALL_MAKEFILES \\
 	dlls/browseui/Makefile"
 test "x$enable_browseui" != xno && ALL_DLL_DIRS="$ALL_DLL_DIRS \\
@@ -29088,6 +29096,7 @@ do
     "dlls/authz/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/authz/Makefile" ;;
     "dlls/avicap32/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/avicap32/Makefile" ;;
     "dlls/avifil32/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/avifil32/Makefile" ;;
+    "dlls/avifile.dll16/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/avifile.dll16/Makefile" ;;
     "dlls/browseui/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/browseui/Makefile" ;;
     "dlls/browseui/tests/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/browseui/tests/Makefile" ;;
     "dlls/cabinet/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/cabinet/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index d4064e537df79570e22a737378c629cd1b15d784..fe40d1ef322a8c0e543c7c67276d5b74f2ee7e8d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1886,6 +1886,7 @@ WINE_CONFIG_MAKEFILE([dlls/atl/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DI
 WINE_CONFIG_MAKEFILE([dlls/authz/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
 WINE_CONFIG_MAKEFILE([dlls/avicap32/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
 WINE_CONFIG_MAKEFILE([dlls/avifil32/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
+WINE_CONFIG_MAKEFILE([dlls/avifile.dll16/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS],[enable_win16])
 WINE_CONFIG_MAKEFILE([dlls/browseui/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
 WINE_CONFIG_MAKEFILE([dlls/browseui/tests/Makefile],[dlls/Maketest.rules],[dlls],[ALL_TEST_DIRS],[enable_tests])
 WINE_CONFIG_MAKEFILE([dlls/cabinet/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS])
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index e3a928455f385da2b6ce724bf876a7b3623f4d5f..badffb68b216ecd2233853523c0ccdaa1468351d 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -18,7 +18,6 @@ DOCSUBDIRS     = $(DLLSUBDIRS)
 # 16-bit dlls
 
 WIN16_FILES = \
-	avifile.dll16 \
 	commdlg.dll16 \
 	ddeml.dll16 \
 	gdi.exe16 \
@@ -44,9 +43,6 @@ all: $(BUILDSUBDIRS) @WIN16_FILES@
 
 # Placeholders for 16-bit libraries
 
-avifile.dll16:
-	echo "avifil32.dll" >$@
-
 commdlg.dll16:
 	echo "comdlg32.dll" >$@
 
diff --git a/dlls/avifil32/Makefile.in b/dlls/avifil32/Makefile.in
index 856ecb47c7860d59a707f57b453006a6cfeb6b79..d645d8823f68ab655ff12b7623271811a3fcbf99 100644
--- a/dlls/avifil32/Makefile.in
+++ b/dlls/avifil32/Makefile.in
@@ -19,8 +19,6 @@ C_SRCS = \
 	tmpfile.c \
 	wavfile.c
 
-SPEC_SRCS16 = avifile.spec
-
 RC_SRCS = \
 	rsrc.rc
 
diff --git a/dlls/avifil32/api.c b/dlls/avifil32/api.c
index 27744ee56b0234194a839ab8dd57a114a3bb63ef..8107b478fb50b19072ea8cd84f4412ecc8878681 100644
--- a/dlls/avifil32/api.c
+++ b/dlls/avifil32/api.c
@@ -172,7 +172,6 @@ static BOOL AVIFILE_GetFileHandlerByExtension(LPCWSTR szFile, LPCLSID lpclsid)
 
 /***********************************************************************
  *		AVIFileInit		(AVIFIL32.@)
- *		AVIFileInit		(AVIFILE.100)
  */
 void WINAPI AVIFileInit(void) {
   OleInitialize(NULL);
@@ -180,7 +179,6 @@ void WINAPI AVIFileInit(void) {
 
 /***********************************************************************
  *		AVIFileExit		(AVIFIL32.@)
- *		AVIFileExit		(AVIFILE.101)
  */
 void WINAPI AVIFileExit(void) {
   /* need to free ole32.dll if we are the last exit call */
@@ -191,7 +189,6 @@ void WINAPI AVIFileExit(void) {
 /***********************************************************************
  *		AVIFileOpen		(AVIFIL32.@)
  *		AVIFileOpenA		(AVIFIL32.@)
- *		AVIFileOpen		(AVIFILE.102)
  */
 HRESULT WINAPI AVIFileOpenA(PAVIFILE *ppfile, LPCSTR szFile, UINT uMode,
 			    LPCLSID lpHandler)
@@ -276,7 +273,6 @@ HRESULT WINAPI AVIFileOpenW(PAVIFILE *ppfile, LPCWSTR szFile, UINT uMode,
 
 /***********************************************************************
  *		AVIFileAddRef		(AVIFIL32.@)
- *		AVIFileAddRef		(AVIFILE.140)
  */
 ULONG WINAPI AVIFileAddRef(PAVIFILE pfile)
 {
@@ -292,7 +288,6 @@ ULONG WINAPI AVIFileAddRef(PAVIFILE pfile)
 
 /***********************************************************************
  *		AVIFileRelease		(AVIFIL32.@)
- *		AVIFileRelease		(AVIFILE.141)
  */
 ULONG WINAPI AVIFileRelease(PAVIFILE pfile)
 {
@@ -309,7 +304,6 @@ ULONG WINAPI AVIFileRelease(PAVIFILE pfile)
 /***********************************************************************
  *		AVIFileInfo		(AVIFIL32.@)
  *		AVIFileInfoA		(AVIFIL32.@)
- *		AVIFileInfo		(AVIFILE.142)
  */
 HRESULT WINAPI AVIFileInfoA(PAVIFILE pfile, LPAVIFILEINFOA afi, LONG size)
 {
@@ -348,7 +342,6 @@ HRESULT WINAPI AVIFileInfoW(PAVIFILE pfile, LPAVIFILEINFOW afiw, LONG size)
 
 /***********************************************************************
  *		AVIFileGetStream	(AVIFIL32.@)
- *		AVIFileGetStream	(AVIFILE.143)
  */
 HRESULT WINAPI AVIFileGetStream(PAVIFILE pfile, PAVISTREAM *avis,
 				DWORD fccType, LONG lParam)
@@ -364,7 +357,6 @@ HRESULT WINAPI AVIFileGetStream(PAVIFILE pfile, PAVISTREAM *avis,
 /***********************************************************************
  *		AVIFileCreateStream	(AVIFIL32.@)
  *		AVIFileCreateStreamA	(AVIFIL32.@)
- *              AVIFileCreateStream	(AVIFILE.144)
  */
 HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE pfile, PAVISTREAM *ppavi,
 				    LPAVISTREAMINFOA psi)
@@ -400,7 +392,6 @@ HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE pfile, PAVISTREAM *avis,
 
 /***********************************************************************
  *		AVIFileWriteData	(AVIFIL32.@)
- *		AVIFileWriteData	(AVIFILE.146)
  */
 HRESULT WINAPI AVIFileWriteData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LONG size)
 {
@@ -414,7 +405,6 @@ HRESULT WINAPI AVIFileWriteData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LONG size)
 
 /***********************************************************************
  *		AVIFileReadData		(AVIFIL32.@)
- *		AVIFileReadData		(AVIFILE.147)
  */
 HRESULT WINAPI AVIFileReadData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LPLONG size)
 {
@@ -428,7 +418,6 @@ HRESULT WINAPI AVIFileReadData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LPLONG size)
 
 /***********************************************************************
  *		AVIFileEndRecord	(AVIFIL32.@)
- *		AVIFileEndRecord	(AVIFILE.148)
  */
 HRESULT WINAPI AVIFileEndRecord(PAVIFILE pfile)
 {
@@ -442,7 +431,6 @@ HRESULT WINAPI AVIFileEndRecord(PAVIFILE pfile)
 
 /***********************************************************************
  *		AVIStreamAddRef		(AVIFIL32.@)
- *		AVIStreamAddRef		(AVIFILE.160)
  */
 ULONG WINAPI AVIStreamAddRef(PAVISTREAM pstream)
 {
@@ -458,7 +446,6 @@ ULONG WINAPI AVIStreamAddRef(PAVISTREAM pstream)
 
 /***********************************************************************
  *		AVIStreamRelease	(AVIFIL32.@)
- *		AVIStreamRelease	(AVIFILE.161)
  */
 ULONG WINAPI AVIStreamRelease(PAVISTREAM pstream)
 {
@@ -474,7 +461,6 @@ ULONG WINAPI AVIStreamRelease(PAVISTREAM pstream)
 
 /***********************************************************************
  *		AVIStreamCreate		(AVIFIL32.@)
- *		AVIStreamCreate		(AVIFILE.104)
  */
 HRESULT WINAPI AVIStreamCreate(PAVISTREAM *ppavi, LONG lParam1, LONG lParam2,
 			       LPCLSID pclsidHandler)
@@ -507,7 +493,6 @@ HRESULT WINAPI AVIStreamCreate(PAVISTREAM *ppavi, LONG lParam1, LONG lParam2,
 /***********************************************************************
  *		AVIStreamInfo		(AVIFIL32.@)
  *		AVIStreamInfoA		(AVIFIL32.@)
- *		AVIStreamInfo		(AVIFILE.162)
  */
 HRESULT WINAPI AVIStreamInfoA(PAVISTREAM pstream, LPAVISTREAMINFOA asi,
 			      LONG size)
@@ -548,7 +533,6 @@ HRESULT WINAPI AVIStreamInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi,
 
 /***********************************************************************
  *		AVIStreamFindSample	(AVIFIL32.@)
- *		AVIStreamFindSample	(AVIFILE.163)
  */
 LONG WINAPI AVIStreamFindSample(PAVISTREAM pstream, LONG pos, LONG flags)
 {
@@ -562,7 +546,6 @@ LONG WINAPI AVIStreamFindSample(PAVISTREAM pstream, LONG pos, LONG flags)
 
 /***********************************************************************
  *		AVIStreamReadFormat	(AVIFIL32.@)
- *		AVIStreamReadFormat	(AVIFILE.164)
  */
 HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM pstream, LONG pos,
 				   LPVOID format, LPLONG formatsize)
@@ -577,7 +560,6 @@ HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM pstream, LONG pos,
 
 /***********************************************************************
  *		AVIStreamSetFormat	(AVIFIL32.@)
- *		AVIStreamSetFormat	(AVIFILE.169)
  */
 HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM pstream, LONG pos,
 				  LPVOID format, LONG formatsize)
@@ -592,7 +574,6 @@ HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM pstream, LONG pos,
 
 /***********************************************************************
  *		AVIStreamRead		(AVIFIL32.@)
- *		AVIStreamRead		(AVIFILE.167)
  */
 HRESULT WINAPI AVIStreamRead(PAVISTREAM pstream, LONG start, LONG samples,
 			     LPVOID buffer, LONG buffersize,
@@ -610,7 +591,6 @@ HRESULT WINAPI AVIStreamRead(PAVISTREAM pstream, LONG start, LONG samples,
 
 /***********************************************************************
  *		AVIStreamWrite		(AVIFIL32.@)
- *		AVIStreamWrite		(AVIFILE.168)
  */
 HRESULT WINAPI AVIStreamWrite(PAVISTREAM pstream, LONG start, LONG samples,
 			      LPVOID buffer, LONG buffersize, DWORD flags,
@@ -628,7 +608,6 @@ HRESULT WINAPI AVIStreamWrite(PAVISTREAM pstream, LONG start, LONG samples,
 
 /***********************************************************************
  *		AVIStreamReadData	(AVIFIL32.@)
- *		AVIStreamReadData	(AVIFILE.165)
  */
 HRESULT WINAPI AVIStreamReadData(PAVISTREAM pstream, DWORD fcc, LPVOID lp,
 				 LPLONG lpread)
@@ -643,7 +622,6 @@ HRESULT WINAPI AVIStreamReadData(PAVISTREAM pstream, DWORD fcc, LPVOID lp,
 
 /***********************************************************************
  *		AVIStreamWriteData	(AVIFIL32.@)
- *		AVIStreamWriteData	(AVIFILE.166)
  */
 HRESULT WINAPI AVIStreamWriteData(PAVISTREAM pstream, DWORD fcc, LPVOID lp,
 				  LONG size)
@@ -658,7 +636,6 @@ HRESULT WINAPI AVIStreamWriteData(PAVISTREAM pstream, DWORD fcc, LPVOID lp,
 
 /***********************************************************************
  *		AVIStreamGetFrameOpen	(AVIFIL32.@)
- *		AVIStreamGetFrameOpen	(AVIFILE.112)
  */
 PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pstream,
 				       LPBITMAPINFOHEADER lpbiWanted)
@@ -684,7 +661,6 @@ PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pstream,
 
 /***********************************************************************
  *		AVIStreamGetFrame	(AVIFIL32.@)
- *		AVIStreamGetFrame	(AVIFILE.110)
  */
 LPVOID WINAPI AVIStreamGetFrame(PGETFRAME pg, LONG pos)
 {
@@ -698,7 +674,6 @@ LPVOID WINAPI AVIStreamGetFrame(PGETFRAME pg, LONG pos)
 
 /***********************************************************************
  *		AVIStreamGetFrameClose	(AVIFIL32.@)
- *		AVIStreamGetFrameClose	(AVIFILE.111)
  */
 HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg)
 {
@@ -782,7 +757,6 @@ HRESULT WINAPI AVIMakeFileFromStreams(PAVIFILE *ppfile, int nStreams,
 /***********************************************************************
  *		AVIStreamOpenFromFile	(AVIFIL32.@)
  *		AVIStreamOpenFromFileA	(AVIFIL32.@)
- *		AVIStreamOpenFromFile   (AVIFILE.103)
  */
 HRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM *ppavi, LPCSTR szFile,
 				      DWORD fccType, LONG lParam,
@@ -880,7 +854,6 @@ LONG WINAPI AVIStreamEndStreaming(PAVISTREAM pavi)
 }
 
 /***********************************************************************
- *		AVIStreamStart		(AVIFILE.130)
  *		AVIStreamStart		(AVIFIL32.@)
  */
 LONG WINAPI AVIStreamStart(PAVISTREAM pstream)
@@ -899,7 +872,6 @@ LONG WINAPI AVIStreamStart(PAVISTREAM pstream)
 }
 
 /***********************************************************************
- *		AVIStreamLength		(AVIFILE.131)
  *		AVIStreamLength		(AVIFIL32.@)
  */
 LONG WINAPI AVIStreamLength(PAVISTREAM pstream)
@@ -918,7 +890,6 @@ LONG WINAPI AVIStreamLength(PAVISTREAM pstream)
 }
 
 /***********************************************************************
- *		AVIStreamSampleToTime	(AVIFILE.133)
  *		AVIStreamSampleToTime	(AVIFIL32.@)
  */
 LONG WINAPI AVIStreamSampleToTime(PAVISTREAM pstream, LONG lSample)
@@ -952,7 +923,6 @@ LONG WINAPI AVIStreamSampleToTime(PAVISTREAM pstream, LONG lSample)
 }
 
 /***********************************************************************
- *		AVIStreamTimeToSample	(AVIFILE.132)
  *		AVIStreamTimeToSample	(AVIFIL32.@)
  */
 LONG WINAPI AVIStreamTimeToSample(PAVISTREAM pstream, LONG lTime)
@@ -988,7 +958,6 @@ LONG WINAPI AVIStreamTimeToSample(PAVISTREAM pstream, LONG lTime)
 /***********************************************************************
  *		AVIBuildFilter		(AVIFIL32.@)
  *		AVIBuildFilterA		(AVIFIL32.@)
- *		AVIBuildFilter		(AVIFILE.123)
  */
 HRESULT WINAPI AVIBuildFilterA(LPSTR szFilter, LONG cbFilter, BOOL fSaving)
 {
@@ -1515,7 +1484,6 @@ BOOL WINAPI AVISaveOptions(HWND hWnd, UINT uFlags, INT nStreams,
 
 /***********************************************************************
  *		AVISaveOptionsFree	(AVIFIL32.@)
- *		AVISaveOptionsFree	(AVIFILE.124)
  */
 HRESULT WINAPI AVISaveOptionsFree(INT nStreams,LPAVICOMPRESSOPTIONS*ppOptions)
 {
diff --git a/dlls/avifile.dll16/Makefile.in b/dlls/avifile.dll16/Makefile.in
new file mode 100644
index 0000000000000000000000000000000000000000..396118eb1ed6dc55c8a998cb462da7217f1ef940
--- /dev/null
+++ b/dlls/avifile.dll16/Makefile.in
@@ -0,0 +1,13 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = avifile.dll16
+IMPORTS   = avifil32 kernel32
+EXTRADLLFLAGS = -Wb,--subsystem,win16,--main-module,avifil32.dll
+
+SPEC_SRCS = avifile.dll16.spec
+
+@MAKE_DLL_RULES@
+
+@DEPENDENCIES@  # everything below this line is overwritten by make depend
diff --git a/dlls/avifil32/avifile.spec b/dlls/avifile.dll16/avifile.dll16.spec
similarity index 100%
rename from dlls/avifil32/avifile.spec
rename to dlls/avifile.dll16/avifile.dll16.spec