diff --git a/dlls/kernel/ne_module.c b/dlls/kernel/ne_module.c
index e386904..21fd4fe 100644
--- a/dlls/kernel/ne_module.c
+++ b/dlls/kernel/ne_module.c
@@ -40,7 +40,6 @@
 #include "wownt32.h"
 #include "module.h"
 #include "toolhelp.h"
-#include "file.h"
 #include "builtin16.h"
 #include "stackframe.h"
 #include "excpt.h"
@@ -127,6 +126,34 @@
 
 
 /***********************************************************************
+ *              NE_strcasecmp
+ *
+ * locale-independent case conversion for module lookups
+ */
+static int NE_strcasecmp( const char *str1, const char *str2 )
+{
+    int ret = 0;
+    for ( ; ; str1++, str2++)
+        if ((ret = RtlUpperChar(*str1) - RtlUpperChar(*str2)) || !*str1) break;
+    return ret;
+}
+
+
+/***********************************************************************
+ *              NE_strncasecmp
+ *
+ * locale-independent case conversion for module lookups
+ */
+static int NE_strncasecmp( const char *str1, const char *str2, int len )
+{
+    int ret = 0;
+    for ( ; len > 0; len--, str1++, str2++)
+        if ((ret = RtlUpperChar(*str1) - RtlUpperChar(*str2)) || !*str1) break;
+    return ret;
+}
+
+
+/***********************************************************************
  *           find_dll_descr
  *
  * Find a descriptor in the list
@@ -144,9 +171,9 @@
             BYTE *name_table = (BYTE *)pModule + pModule->name_table;
 
             /* check the dll file name */
-            if (!FILE_strcasecmp( pOfs->szPathName, dllname )) return descr;
+            if (!NE_strcasecmp( pOfs->szPathName, dllname )) return descr;
             /* check the dll module name (without extension) */
-            if (!FILE_strncasecmp( dllname, name_table+1, *name_table ) &&
+            if (!NE_strncasecmp( dllname, name_table+1, *name_table ) &&
                 !strcmp( dllname + *name_table, ".dll" ))
                 return descr;
         }
@@ -410,7 +437,7 @@
       /* Now copy and uppercase the string */
 
     strcpy( buffer, name );
-    for (cpnt = buffer; *cpnt; cpnt++) *cpnt = FILE_toupper(*cpnt);
+    for (cpnt = buffer; *cpnt; cpnt++) *cpnt = RtlUpperChar(*cpnt);
     len = cpnt - buffer;
 
       /* First search the resident names */
@@ -1143,7 +1170,7 @@
         strcpy( dllname, basename );
         p = strrchr( dllname, '.' );
         if (!p) strcat( dllname, ".dll" );
-        for (p = dllname; *p; p++) *p = FILE_tolower(*p);
+        for (p = dllname; *p; p++) if (*p >= 'A' && *p <= 'Z') *p += 32;
 
         if (!(descr = find_dll_descr( dllname )))
         {
@@ -1577,7 +1604,7 @@
     /* If uppercased 'name' matches exactly the module name of a module:
      * Return its handle
      */
-    for (s = tmpstr; *s; s++) *s = FILE_toupper(*s);
+    for (s = tmpstr; *s; s++) *s = RtlUpperChar(*s);
 
     for (hModule = hFirstModule; hModule ; hModule = pModule->next)
     {
@@ -1592,7 +1619,7 @@
 	 * 'i' compare is just a quickfix until the loader handles that
 	 * correctly. -MM 990705
 	 */
-        if ((*name_table == len) && !FILE_strncasecmp(tmpstr, name_table+1, len))
+        if ((*name_table == len) && !NE_strncasecmp(tmpstr, name_table+1, len))
             return hModule;
     }
 
@@ -1631,7 +1658,7 @@
 	    loadedfn--;
 	}
 	/* case insensitive compare ... */
-	if (!FILE_strcasecmp(loadedfn, s))
+	if (!NE_strcasecmp(loadedfn, s))
 	    return hModule;
     }
     return 0;
@@ -1943,7 +1970,7 @@
             loadedfn--;
         }
         /* case insensitive compare ... */
-        if (!FILE_strcasecmp(loadedfn, s))
+        if (!NE_strcasecmp(loadedfn, s))
             return hModule;
     }
     /* If basename (without ext) matches the module name of a module:
@@ -1960,7 +1987,7 @@
         if (pModule->flags & NE_FFLAGS_WIN32) continue;
 
         name_table = (BYTE *)pModule + pModule->name_table;
-        if ((*name_table == len) && !FILE_strncasecmp(s, name_table+1, len))
+        if ((*name_table == len) && !NE_strncasecmp(s, name_table+1, len))
             return hModule;
     }
 
diff --git a/dlls/kernel/ne_segment.c b/dlls/kernel/ne_segment.c
index aae639b..d1848d4 100644
--- a/dlls/kernel/ne_segment.c
+++ b/dlls/kernel/ne_segment.c
@@ -37,7 +37,6 @@
 #include "wownt32.h"
 #include "wine/library.h"
 #include "kernel_private.h"
-#include "file.h"
 #include "module.h"
 #include "stackframe.h"
 #include "builtin16.h"
diff --git a/dlls/kernel/process.c b/dlls/kernel/process.c
index 475a3ad..75e12b1 100644
--- a/dlls/kernel/process.c
+++ b/dlls/kernel/process.c
@@ -27,12 +27,16 @@
 #include <locale.h>
 #include <signal.h>
 #include <stdio.h>
+#include <time.h>
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+#include <sys/types.h>
 
 #include "wine/winbase16.h"
 #include "wine/winuser16.h"
 #include "ntstatus.h"
 #include "thread.h"
-#include "drive.h"
 #include "file.h"
 #include "module.h"
 #include "options.h"
diff --git a/dlls/kernel/sync.c b/dlls/kernel/sync.c
index dc36eec..b3f1049 100644
--- a/dlls/kernel/sync.c
+++ b/dlls/kernel/sync.c
@@ -48,7 +48,6 @@
 #include "wine/unicode.h"
 #include "wine/winbase16.h"
 #include "kernel_private.h"
-#include "file.h"
 
 #include "wine/debug.h"
 
diff --git a/dlls/kernel/task.c b/dlls/kernel/task.c
index eff6b97..99599c8 100644
--- a/dlls/kernel/task.c
+++ b/dlls/kernel/task.c
@@ -37,7 +37,6 @@
 #include "winuser.h"
 
 #include "wine/winbase16.h"
-#include "drive.h"
 #include "file.h"
 #include "module.h"
 #include "winternl.h"
diff --git a/dlls/kernel/time.c b/dlls/kernel/time.c
index 4b0028a..44170ba 100644
--- a/dlls/kernel/time.c
+++ b/dlls/kernel/time.c
@@ -24,7 +24,9 @@
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif
+#include <stdarg.h>
 #include <stdlib.h>
+#include <time.h>
 #ifdef HAVE_SYS_TIME_H
 # include <sys/time.h>
 #endif
@@ -34,8 +36,10 @@
 
 #define NONAMELESSUNION
 #define NONAMELESSSTRUCT
+#include "windef.h"
+#include "winbase.h"
+#include "winreg.h"
 #include "ntstatus.h"
-#include "file.h"
 #include "winternl.h"
 #include "winerror.h"
 #include "winnls.h"
diff --git a/dlls/winedos/int21.c b/dlls/winedos/int21.c
index 8d78685..4d907b7 100644
--- a/dlls/winedos/int21.c
+++ b/dlls/winedos/int21.c
@@ -39,7 +39,6 @@
 #include "winternl.h"
 #include "wine/winbase16.h"
 #include "dosexe.h"
-#include "file.h"
 #include "winerror.h"
 #include "winuser.h"
 #include "wine/unicode.h"
@@ -3548,10 +3547,9 @@
  * 'buffer' must be at least 12 characters long.
  */
 /* Chars we don't want to see in DOS file names */
-#define INVALID_DOS_CHARS  "*?<>|\"+=,;[] \345"
 static BOOL INT21_ToDosFCBFormat( LPCWSTR name, LPWSTR buffer )
 {
-    static const char invalid_chars[] = INVALID_DOS_CHARS;
+    static const WCHAR invalid_chars[] = {'*','?','<','>','|','\\','"','+','=',',',';','[',']',' ','\345',0};
     LPCWSTR p = name;
     int i;
 
@@ -3587,7 +3585,7 @@
             buffer[i] = '?';
             break;
         default:
-            if (*p < 256 && strchr( invalid_chars, (char)*p )) return FALSE;
+            if (strchrW( invalid_chars, *p )) return FALSE;
             buffer[i] = toupperW(*p);
             p++;
             break;
@@ -3624,7 +3622,7 @@
             buffer[i] = '?';
             break;
         default:
-            if (*p < 256 && strchr( invalid_chars, (char)*p )) return FALSE;
+            if (strchrW( invalid_chars, *p )) return FALSE;
             buffer[i] = toupperW(*p);
             p++;
             break;
@@ -3636,7 +3634,7 @@
      * is something behind this ?
      */
     while (*p == '*' || *p == ' ') p++; /* skip wildcards and spaces */
-    return IS_END_OF_NAME(*p);
+    return (!*p || (*p == '/') || (*p == '\\'));
 }
 
 static HANDLE       INT21_FindHandle;
diff --git a/files/directory.c b/files/directory.c
index a8a12e3..7f9d1fa 100644
--- a/files/directory.c
+++ b/files/directory.c
@@ -45,7 +45,6 @@
 #include "winreg.h"
 #include "winternl.h"
 #include "wine/unicode.h"
-#include "drive.h"
 #include "file.h"
 #include "wine/debug.h"
 
@@ -342,26 +341,6 @@
 
 
 /***********************************************************************
- *           DIR_GetWindowsUnixDir
- */
-UINT DIR_GetWindowsUnixDir( LPSTR path, UINT count )
-{
-    if (path) lstrcpynA( path, DIR_Windows.long_name, count );
-    return strlen( DIR_Windows.long_name );
-}
-
-
-/***********************************************************************
- *           DIR_GetSystemUnixDir
- */
-UINT DIR_GetSystemUnixDir( LPSTR path, UINT count )
-{
-    if (path) lstrcpynA( path, DIR_System.long_name, count );
-    return strlen( DIR_System.long_name );
-}
-
-
-/***********************************************************************
  *           GetTempDrive   (KERNEL.92)
  * A closer look at krnl386.exe shows what the SDK doesn't mention:
  *
diff --git a/files/dos_fs.c b/files/dos_fs.c
index 4b45fed..22198a4 100644
--- a/files/dos_fs.c
+++ b/files/dos_fs.c
@@ -55,8 +55,8 @@
 
 #include "wine/unicode.h"
 #include "wine/winbase16.h"
-#include "drive.h"
 #include "file.h"
+#include "winreg.h"
 #include "winternl.h"
 #include "wine/server.h"
 #include "wine/exception.h"
@@ -93,6 +93,7 @@
 #endif  /* linux */
 
 #define IS_OPTION_TRUE(ch) ((ch) == 'y' || (ch) == 'Y' || (ch) == 't' || (ch) == 'T' || (ch) == '1')
+#define IS_END_OF_NAME(ch) (!(ch) || ((ch) == '/') || ((ch) == '\\'))
 
 /* Chars we don't want to see in DOS file names */
 #define INVALID_DOS_CHARS  "*?<>|\"+=,;[] \345"
@@ -224,7 +225,7 @@
  * Return FALSE if the name is not a valid DOS name.
  * 'buffer' must be at least 12 characters long.
  */
-BOOL DOSFS_ToDosFCBFormat( LPCWSTR name, LPWSTR buffer )
+static BOOL DOSFS_ToDosFCBFormat( LPCWSTR name, LPWSTR buffer )
 {
     static const char invalid_chars[] = INVALID_DOS_CHARS;
     LPCWSTR p = name;
diff --git a/files/drive.c b/files/drive.c
index 93e2a7c..014d9f3 100644
--- a/files/drive.c
+++ b/files/drive.c
@@ -55,7 +55,6 @@
 #include "winioctl.h"
 #include "ntddstor.h"
 #include "ntddcdrm.h"
-#include "drive.h"
 #include "file.h"
 #include "wine/unicode.h"
 #include "wine/library.h"
@@ -89,6 +88,8 @@
     {'r','a','m','d','i','s','k',0} /* DRIVE_RAMDISK */
 };
 
+#define MAX_DOS_DRIVES  26
+
 static DOSDRIVE DOSDrives[MAX_DOS_DRIVES];
 static int DRIVE_CurDrive = -1;
 
diff --git a/files/file.c b/files/file.c
index 4bb6e63..8b04671 100644
--- a/files/file.c
+++ b/files/file.c
@@ -67,7 +67,6 @@
 #include "wine/winbase16.h"
 #include "wine/server.h"
 
-#include "drive.h"
 #include "file.h"
 #include "wincon.h"
 #include "kernel_private.h"
@@ -113,34 +112,6 @@
 
 
 /***********************************************************************
- *              FILE_strcasecmp
- *
- * locale-independent case conversion for file I/O
- */
-int FILE_strcasecmp( const char *str1, const char *str2 )
-{
-    int ret = 0;
-    for ( ; ; str1++, str2++)
-        if ((ret = FILE_toupper(*str1) - FILE_toupper(*str2)) || !*str1) break;
-    return ret;
-}
-
-
-/***********************************************************************
- *              FILE_strncasecmp
- *
- * locale-independent case conversion for file I/O
- */
-int FILE_strncasecmp( const char *str1, const char *str2, int len )
-{
-    int ret = 0;
-    for ( ; len > 0; len--, str1++, str2++)
-        if ((ret = FILE_toupper(*str1) - FILE_toupper(*str2)) || !*str1) break;
-    return ret;
-}
-
-
-/***********************************************************************
  *           FILE_SetDosError
  *
  * Set the DOS error code from errno.
diff --git a/files/smb.c b/files/smb.c
index 91b3db2..2875fc1 100644
--- a/files/smb.c
+++ b/files/smb.c
@@ -108,10 +108,10 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winnls.h"
-#include "file.h"
-
-#include "smb.h"
+#include "winreg.h"
 #include "winternl.h"
+#include "file.h"
+#include "smb.h"
 
 #include "wine/server.h"
 #include "wine/debug.h"
diff --git a/include/drive.h b/include/drive.h
deleted file mode 100644
index 8538a36..0000000
--- a/include/drive.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * DOS drive handling declarations
- *
- * Copyright 1995 Alexandre Julliard
- *
- * 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
- */
-
-#ifndef __WINE_DRIVE_H
-#define __WINE_DRIVE_H
-
-#include <windef.h>
-
-#define MAX_DOS_DRIVES  26
-
-/* Drive flags */
-
-#define DRIVE_FAIL_READ_ONLY  0x0001  /* Fail opening read-only files for writing */
-
-extern int DRIVE_Init(void);
-extern int DRIVE_IsValid( int drive );
-extern int DRIVE_GetCurrentDrive(void);
-extern int DRIVE_SetCurrentDrive( int drive );
-extern int DRIVE_FindDriveRoot( const char **path );
-extern int DRIVE_FindDriveRootW( LPCWSTR *path );
-extern const char * DRIVE_GetRoot( int drive );
-extern LPCWSTR DRIVE_GetDosCwd( int drive );
-extern const char * DRIVE_GetUnixCwd( int drive );
-extern const char * DRIVE_GetDevice( int drive );
-extern UINT DRIVE_GetFlags( int drive );
-extern int DRIVE_Chdir( int drive, LPCWSTR path );
-extern WCHAR *DRIVE_BuildEnv(void);
-
-#endif  /* __WINE_DRIVE_H */
diff --git a/include/file.h b/include/file.h
index 3600b41..32166b7 100644
--- a/include/file.h
+++ b/include/file.h
@@ -22,16 +22,8 @@
 #define __WINE_FILE_H
 
 #include <stdarg.h>
-#include <time.h> /* time_t */
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-#include <sys/types.h>
 #include <windef.h>
 #include <winbase.h>
-#include <wine/windef16.h>  /* HFILE16 */
-#include <winreg.h>
-#include <winternl.h>
 
 #define MAX_PATHNAME_LEN   1024
 
@@ -43,24 +35,8 @@
     int   drive;
 } DOS_FULL_NAME;
 
-#define IS_END_OF_NAME(ch)  (!(ch) || ((ch) == '/') || ((ch) == '\\'))
-
-/* locale-independent case conversion */
-inline static char FILE_tolower( char c )
-{
-    if (c >= 'A' && c <= 'Z') c += 32;
-    return c;
-}
-inline static char FILE_toupper( char c )
-{
-    if (c >= 'a' && c <= 'z') c -= 32;
-    return c;
-}
-
 /* files/file.c */
 extern mode_t FILE_umask;
-extern int FILE_strcasecmp( const char *str1, const char *str2 );
-extern int FILE_strncasecmp( const char *str1, const char *str2, int len );
 extern void FILE_SetDosError(void);
 extern BOOL FILE_Stat( LPCSTR unixName, BY_HANDLE_FILE_INFORMATION *info, BOOL *is_symlink );
 extern HANDLE FILE_CreateFile( LPCSTR filename, DWORD access, DWORD sharing,
@@ -68,23 +44,36 @@
                                DWORD attributes, HANDLE template, BOOL fail_read_only,
                                UINT drive_type );
 
-extern LONG WINAPI WIN16_hread(HFILE16,SEGPTR,LONG);
-
 /* files/directory.c */
 extern int DIR_Init(void);
-extern UINT DIR_GetWindowsUnixDir( LPSTR path, UINT count );
-extern UINT DIR_GetSystemUnixDir( LPSTR path, UINT count );
 extern DWORD DIR_SearchPath( LPCWSTR path, LPCWSTR name, LPCWSTR ext,
                              DOS_FULL_NAME *full_name, BOOL win32 );
 
 /* files/dos_fs.c */
-extern BOOL DOSFS_ToDosFCBFormat( LPCWSTR name, LPWSTR buffer );
 extern HANDLE DOSFS_OpenDevice( LPCWSTR name, DWORD access, DWORD attributes, LPSECURITY_ATTRIBUTES sa);
 extern BOOL DOSFS_FindUnixName( const DOS_FULL_NAME *path, LPCWSTR name, char *long_buf,
                                 INT long_len, LPWSTR short_buf );
 extern BOOL DOSFS_GetFullName( LPCWSTR name, BOOL check_last,
                                  DOS_FULL_NAME *full );
 
+/* drive.c */
+
+#define DRIVE_FAIL_READ_ONLY  0x0001  /* Fail opening read-only files for writing */
+
+extern int DRIVE_Init(void);
+extern int DRIVE_IsValid( int drive );
+extern int DRIVE_GetCurrentDrive(void);
+extern int DRIVE_SetCurrentDrive( int drive );
+extern int DRIVE_FindDriveRoot( const char **path );
+extern int DRIVE_FindDriveRootW( LPCWSTR *path );
+extern const char * DRIVE_GetRoot( int drive );
+extern LPCWSTR DRIVE_GetDosCwd( int drive );
+extern const char * DRIVE_GetUnixCwd( int drive );
+extern const char * DRIVE_GetDevice( int drive );
+extern UINT DRIVE_GetFlags( int drive );
+extern int DRIVE_Chdir( int drive, LPCWSTR path );
+extern WCHAR *DRIVE_BuildEnv(void);
+
 /* vxd.c */
 extern HANDLE VXD_Open( LPCWSTR filename, DWORD access, LPSECURITY_ATTRIBUTES sa );
 
