diff --git a/dlls/lzexpand/Makefile.in b/dlls/lzexpand/Makefile.in
index 8f715c8c16cb09538d3668969c962bdd53c816bf..f8dd7d0967c63f3f85d91bac82544d7096573642 100644
--- a/dlls/lzexpand/Makefile.in
+++ b/dlls/lzexpand/Makefile.in
@@ -11,9 +11,9 @@ LDDLLFLAGS = @LDDLLFLAGS@
 SYMBOLFILE = $(MODULE).tmp.o
 
 C_SRCS = \
+	lzexpand16.c \
 	lzexpand_main.c
 
 @MAKE_DLL_RULES@
 
 ### Dependencies:
-
diff --git a/dlls/lzexpand/lzexpand16.c b/dlls/lzexpand/lzexpand16.c
new file mode 100644
index 0000000000000000000000000000000000000000..57097ccf7d84e9f80b9748e409e845c33b83a6ec
--- /dev/null
+++ b/dlls/lzexpand/lzexpand16.c
@@ -0,0 +1,140 @@
+/*
+ * LZ Decompression functions
+ *
+ * Copyright 1996 Marcus Meissner
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "winbase.h"
+#include "lzexpand.h"
+
+#include "wine/winbase16.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(file);
+
+#define MAX_LZSTATES 16
+
+#define IS_LZ_HANDLE(h) (((h) >= 0x400) && ((h) < 0x400+MAX_LZSTATES))
+
+
+/***********************************************************************
+ *           LZStart   (LZEXPAND.7)
+ */
+INT16 WINAPI LZStart16(void)
+{
+    TRACE("(void)\n");
+    return 1;
+}
+
+
+/***********************************************************************
+ *           LZInit   (LZEXPAND.3)
+ */
+HFILE16 WINAPI LZInit16( HFILE16 hfSrc )
+{
+    HFILE ret = LZInit( DosFileHandleToWin32Handle(hfSrc) );
+    if (IS_LZ_HANDLE(ret)) return ret;
+    if ((INT)ret <= 0) return ret;
+    return hfSrc;
+}
+
+
+/***********************************************************************
+ *           GetExpandedName   (LZEXPAND.10)
+ */
+INT16 WINAPI GetExpandedName16( LPCSTR in, LPSTR out )
+{
+    return (INT16)GetExpandedNameA( in, out );
+}
+
+
+/***********************************************************************
+ *           LZRead   (LZEXPAND.5)
+ */
+INT16 WINAPI LZRead16( HFILE16 fd, LPVOID buf, UINT16 toread )
+{
+    if (IS_LZ_HANDLE(fd)) return LZRead( fd, buf, toread );
+    return _lread( DosFileHandleToWin32Handle(fd), buf, toread );
+}
+
+
+/***********************************************************************
+ *           LZSeek   (LZEXPAND.4)
+ */
+LONG WINAPI LZSeek16( HFILE16 fd, LONG off, INT16 type )
+{
+    if (IS_LZ_HANDLE(fd)) return LZSeek( fd, off, type );
+    return _llseek( DosFileHandleToWin32Handle(fd), off, type );
+}
+
+
+/***********************************************************************
+ *           LZCopy   (LZEXPAND.1)
+ *
+ */
+LONG WINAPI LZCopy16( HFILE16 src, HFILE16 dest )
+{
+    /* already a LZ handle? */
+    if (IS_LZ_HANDLE(src)) return LZCopy( src, DosFileHandleToWin32Handle(dest) );
+
+    /* no, try to open one */
+    src = LZInit16(src);
+    if ((INT16)src <= 0) return 0;
+    if (IS_LZ_HANDLE(src))
+    {
+        LONG ret = LZCopy( src, DosFileHandleToWin32Handle(dest) );
+        LZClose( src );
+        return ret;
+    }
+    /* it was not a compressed file */
+    return LZCopy( DosFileHandleToWin32Handle(src), DosFileHandleToWin32Handle(dest) );
+}
+
+
+/***********************************************************************
+ *           LZOpenFile   (LZEXPAND.2)
+ */
+HFILE16 WINAPI LZOpenFile16( LPCSTR fn, LPOFSTRUCT ofs, UINT16 mode )
+{
+    HFILE hfret = LZOpenFileA( fn, ofs, mode );
+    /* return errors and LZ handles unmodified */
+    if ((INT)hfret <= 0) return hfret;
+    if (IS_LZ_HANDLE(hfret)) return hfret;
+    /* but allocate a dos handle for 'normal' files */
+    return Win32HandleToDosFileHandle(hfret);
+}
+
+
+/***********************************************************************
+ *           LZClose   (LZEXPAND.6)
+ */
+void WINAPI LZClose16( HFILE16 fd )
+{
+    if (IS_LZ_HANDLE(fd)) LZClose( fd );
+    else DisposeLZ32Handle( DosFileHandleToWin32Handle(fd) );
+}
+
+
+/***********************************************************************
+ *           CopyLZFile   (LZEXPAND.8)
+ */
+LONG WINAPI CopyLZFile16( HFILE16 src, HFILE16 dest )
+{
+    TRACE("(%d,%d)\n",src,dest);
+    return LZCopy16(src,dest);
+}
diff --git a/dlls/lzexpand/lzexpand_main.c b/dlls/lzexpand/lzexpand_main.c
index ad7ec3d2a647f1a9440e93b633e2b5b6af9594ab..28f2f6db51f8d43422d16abe63b69fab919e01c6 100644
--- a/dlls/lzexpand/lzexpand_main.c
+++ b/dlls/lzexpand/lzexpand_main.c
@@ -35,7 +35,6 @@
 #include "lzexpand.h"
 
 #include "wine/unicode.h"
-#include "wine/winbase16.h"
 
 #include "wine/debug.h"
 
@@ -136,15 +135,6 @@ static INT read_header(HFILE fd,struct lzfileheader *head)
 	return 1;
 }
 
-/***********************************************************************
- *           LZStart   (LZEXPAND.7)
- */
-INT16 WINAPI LZStart16(void)
-{
-    TRACE("(void)\n");
-    return 1;
-}
-
 
 /***********************************************************************
  *           LZStart   (LZ32.@)
@@ -156,18 +146,6 @@ INT WINAPI LZStart(void)
 }
 
 
-/***********************************************************************
- *           LZInit   (LZEXPAND.3)
- */
-HFILE16 WINAPI LZInit16( HFILE16 hfSrc )
-{
-    HFILE ret = LZInit( DosFileHandleToWin32Handle(hfSrc) );
-    if (IS_LZ_HANDLE(ret)) return ret;
-    if ((INT)ret <= 0) return ret;
-    return hfSrc;
-}
-
-
 /***********************************************************************
  *           LZInit   (LZ32.@)
  *
@@ -231,15 +209,6 @@ void WINAPI LZDone(void)
 }
 
 
-/***********************************************************************
- *           GetExpandedName   (LZEXPAND.10)
- */
-INT16 WINAPI GetExpandedName16( LPCSTR in, LPSTR out )
-{
-    return (INT16)GetExpandedNameA( in, out );
-}
-
-
 /***********************************************************************
  *           GetExpandedNameA   (LZ32.@)
  *
@@ -336,16 +305,6 @@ INT WINAPI GetExpandedNameW( LPCWSTR in, LPWSTR out )
 }
 
 
-/***********************************************************************
- *           LZRead   (LZEXPAND.5)
- */
-INT16 WINAPI LZRead16( HFILE16 fd, LPVOID buf, UINT16 toread )
-{
-    if (IS_LZ_HANDLE(fd)) return LZRead( fd, buf, toread );
-    return _lread( DosFileHandleToWin32Handle(fd), buf, toread );
-}
-
-
 /***********************************************************************
  *           LZRead   (LZ32.@)
  */
@@ -437,16 +396,6 @@ INT WINAPI LZRead( HFILE fd, LPVOID vbuf, UINT toread )
 }
 
 
-/***********************************************************************
- *           LZSeek   (LZEXPAND.4)
- */
-LONG WINAPI LZSeek16( HFILE16 fd, LONG off, INT16 type )
-{
-    if (IS_LZ_HANDLE(fd)) return LZSeek( fd, off, type );
-    return _llseek( DosFileHandleToWin32Handle(fd), off, type );
-}
-
-
 /***********************************************************************
  *           LZSeek   (LZ32.@)
  */
@@ -479,29 +428,6 @@ LONG WINAPI LZSeek( HFILE fd, LONG off, INT type )
 }
 
 
-/***********************************************************************
- *           LZCopy   (LZEXPAND.1)
- *
- */
-LONG WINAPI LZCopy16( HFILE16 src, HFILE16 dest )
-{
-    /* already a LZ handle? */
-    if (IS_LZ_HANDLE(src)) return LZCopy( src, DosFileHandleToWin32Handle(dest) );
-
-    /* no, try to open one */
-    src = LZInit16(src);
-    if ((INT16)src <= 0) return 0;
-    if (IS_LZ_HANDLE(src))
-    {
-        LONG ret = LZCopy( src, DosFileHandleToWin32Handle(dest) );
-        LZClose( src );
-        return ret;
-    }
-    /* it was not a compressed file */
-    return LZCopy( DosFileHandleToWin32Handle(src), DosFileHandleToWin32Handle(dest) );
-}
-
-
 /***********************************************************************
  *           LZCopy   (LZ32.@)
  *
@@ -576,20 +502,6 @@ static LPSTR LZEXPAND_MangleName( LPCSTR fn )
 }
 
 
-/***********************************************************************
- *           LZOpenFile   (LZEXPAND.2)
- */
-HFILE16 WINAPI LZOpenFile16( LPCSTR fn, LPOFSTRUCT ofs, UINT16 mode )
-{
-    HFILE hfret = LZOpenFileA( fn, ofs, mode );
-    /* return errors and LZ handles unmodified */
-    if ((INT)hfret <= 0) return hfret;
-    if (IS_LZ_HANDLE(hfret)) return hfret;
-    /* but allocate a dos handle for 'normal' files */
-    return Win32HandleToDosFileHandle(hfret);
-}
-
-
 /***********************************************************************
  *           LZOpenFileA   (LZ32.@)
  *
@@ -633,16 +545,6 @@ HFILE WINAPI LZOpenFileW( LPCWSTR fn, LPOFSTRUCT ofs, UINT mode )
 }
 
 
-/***********************************************************************
- *           LZClose   (LZEXPAND.6)
- */
-void WINAPI LZClose16( HFILE16 fd )
-{
-    if (IS_LZ_HANDLE(fd)) LZClose( fd );
-    else DisposeLZ32Handle( DosFileHandleToWin32Handle(fd) );
-}
-
-
 /***********************************************************************
  *           LZClose   (LZ32.@)
  */
@@ -661,15 +563,6 @@ void WINAPI LZClose( HFILE fd )
         }
 }
 
-/***********************************************************************
- *           CopyLZFile   (LZEXPAND.8)
- */
-LONG WINAPI CopyLZFile16( HFILE16 src, HFILE16 dest )
-{
-    TRACE("(%d,%d)\n",src,dest);
-    return LZCopy16(src,dest);
-}
-
 
 /***********************************************************************
  *           CopyLZFile  (LZ32.@)