diff --git a/dlls/msvcrt/Makefile.in b/dlls/msvcrt/Makefile.in
index 5eee50b..c9f57c4 100644
--- a/dlls/msvcrt/Makefile.in
+++ b/dlls/msvcrt/Makefile.in
@@ -1,3 +1,4 @@
+EXTRADEFS = -DUSE_MSVCRT_PREFIX
 TOPSRCDIR = @top_srcdir@
 TOPOBJDIR = ../..
 SRCDIR    = @srcdir@
diff --git a/dlls/msvcrt/console.c b/dlls/msvcrt/console.c
index aa02a60..f83caaa 100644
--- a/dlls/msvcrt/console.c
+++ b/dlls/msvcrt/console.c
@@ -9,8 +9,14 @@
 #include "msvcrt.h"
 #include "wincon.h"
 
+#include "msvcrt/conio.h"
+#include "msvcrt/stdio.h"
+#include "msvcrt/stdlib.h"
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
+
+
 /* MT */
 extern CRITICAL_SECTION MSVCRT_console_cs;
 #define LOCK_CONSOLE   EnterCriticalSection(&MSVCRT_console_cs)
@@ -333,8 +339,6 @@
 }
 
 
-extern int snprintf(char *, int, const char *, ...);
-
 /*********************************************************************
  *		_cprintf (MSVCRT.@)
  */
@@ -350,7 +354,7 @@
    * Return the number of bytes that would have been written
    * The code below handles both cases
    */
-  while ((written = snprintf( mem, resize, format, valist )) == -1 ||
+  while ((written = _snprintf( mem, resize, format, valist )) == -1 ||
           written > resize)
   {
     resize = (written == -1 ? resize * 2 : written + 1);
diff --git a/dlls/msvcrt/cpp.c b/dlls/msvcrt/cpp.c
index 4d8117c..aed3a3e 100644
--- a/dlls/msvcrt/cpp.c
+++ b/dlls/msvcrt/cpp.c
@@ -5,6 +5,9 @@
  */
 #include "msvcrt.h"
 
+#include "msvcrt/stdlib.h"
+
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 
diff --git a/dlls/msvcrt/ctype.c b/dlls/msvcrt/ctype.c
index 07f4b98..7d001ee 100644
--- a/dlls/msvcrt/ctype.c
+++ b/dlls/msvcrt/ctype.c
@@ -5,20 +5,11 @@
  */
 #include "msvcrt.h"
 
+#include "msvcrt/ctype.h"
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
-/* ASCII char classification table - binary compatible */
-#define _UPPER        C1_UPPER
-#define _LOWER        C1_LOWER
-#define _DIGIT        C1_DIGIT
-#define _SPACE        C1_SPACE
-#define _PUNCT        C1_PUNCT
-#define _CONTROL      C1_CNTRL
-#define _BLANK        C1_BLANK
-#define _HEX          C1_XDIGIT
-#define _LEADBYTE     0x8000
-#define _ALPHA       (C1_ALPHA|_UPPER|_LOWER)
-
+/* Some abbreviations to make the following table readable */
 #define _C_ _CONTROL
 #define _S_ _SPACE
 #define _P_ _PUNCT
diff --git a/dlls/msvcrt/data.c b/dlls/msvcrt/data.c
index f710308..71d30d0 100644
--- a/dlls/msvcrt/data.c
+++ b/dlls/msvcrt/data.c
@@ -6,6 +6,10 @@
 #include <math.h>
 #include "msvcrt.h"
 
+#include "msvcrt/stdlib.h"
+#include "msvcrt/string.h"
+
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 unsigned int MSVCRT___argc;
@@ -22,7 +26,8 @@
 unsigned int MSVCRT__winmajor;
 unsigned int MSVCRT__winminor;
 unsigned int MSVCRT__winver;
-unsigned int MSVCRT__sys_nerr;
+unsigned int MSVCRT__sys_nerr; /* FIXME: not accessible from Winelib apps */
+char**       MSVCRT__sys_errlist; /* FIXME: not accessible from Winelib apps */
 unsigned int MSVCRT___setlc_active;
 unsigned int MSVCRT___unguarded_readlc_active;
 double MSVCRT__HUGE;
@@ -30,8 +35,8 @@
 WCHAR **MSVCRT___wargv;
 char *MSVCRT__acmdln;
 WCHAR *MSVCRT__wcmdln;
-char *MSVCRT__environ;
-WCHAR *MSVCRT__wenviron;
+char **MSVCRT__environ;
+WCHAR **MSVCRT__wenviron;
 char **MSVCRT___initenv;
 WCHAR **MSVCRT___winitenv;
 int MSVCRT_timezone;
@@ -42,7 +47,7 @@
 /***********************************************************************
  *		__p___argc (MSVCRT.@)
  */
-unsigned int* __p___argc(void) { return &MSVCRT___argc; }
+int* __p___argc(void) { return &MSVCRT___argc; }
 
 /***********************************************************************
  *		__p__commode (MSVCRT.@)
@@ -97,12 +102,12 @@
 /*********************************************************************
  *		__p__environ (MSVCRT.@)
  */
-char** __p__environ(void) { return &MSVCRT__environ; }
+char*** __p__environ(void) { return &MSVCRT__environ; }
 
 /*********************************************************************
  *		__p__wenviron (MSVCRT.@)
  */
-WCHAR** __p__wenviron(void) { return &MSVCRT__wenviron; }
+WCHAR*** __p__wenviron(void) { return &MSVCRT__wenviron; }
 
 /*********************************************************************
  *		__p___initenv (MSVCRT.@)
@@ -216,10 +221,16 @@
   MSVCRT_free( cmdline );
 
   TRACE("found %d arguments\n",MSVCRT___argc);
+  /* FIXME: This is plain wrong, we must convert from a '\0' separated 
+   * memory block to an array of pointers to string format.
+   */
   MSVCRT__environ = GetEnvironmentStringsA();
-  MSVCRT___initenv = &MSVCRT__environ;
+  MSVCRT___initenv = MSVCRT__environ;
+  /* FIXME: This is plain wrong, we must convert from a '\0' separated 
+   * memory block to an array of pointers to string format.
+   */
   MSVCRT__wenviron = GetEnvironmentStringsW();
-  MSVCRT___winitenv = &MSVCRT__wenviron;
+  MSVCRT___winitenv = MSVCRT__wenviron;
 }
 
 
@@ -232,26 +243,26 @@
 /*********************************************************************
  *		__getmainargs (MSVCRT.@)
  */
-void __getmainargs(int *argc, char ***argv, char **environ,
+void __getmainargs(int *argc, char** *argv, char** *envp,
                                   int expand_wildcards, int *new_mode)
 {
-  TRACE("(%p,%p,%p,%d,%p).\n", argc, argv, environ, expand_wildcards, new_mode);
+  TRACE("(%p,%p,%p,%d,%p).\n", argc, argv, envp, expand_wildcards, new_mode);
   *argc = MSVCRT___argc;
   *argv = MSVCRT___argv;
-  *environ = MSVCRT__environ;
+  *envp = MSVCRT__environ;
   MSVCRT__set_new_mode( *new_mode );
 }
 
 /*********************************************************************
  *		__wgetmainargs (MSVCRT.@)
  */
-void __wgetmainargs(int *argc, WCHAR ***wargv, WCHAR **wenviron,
+void __wgetmainargs(int *argc, WCHAR** *wargv, WCHAR** *wenvp,
                                    int expand_wildcards, int *new_mode)
 {
-  TRACE("(%p,%p,%p,%d,%p).\n", argc, wargv, wenviron, expand_wildcards, new_mode);
+  TRACE("(%p,%p,%p,%d,%p).\n", argc, wargv, wenvp, expand_wildcards, new_mode);
   *argc = MSVCRT___argc;
   *wargv = MSVCRT___wargv;
-  *wenviron = MSVCRT__wenviron;
+  *wenvp = MSVCRT__wenviron;
   MSVCRT__set_new_mode( *new_mode );
 }
 
diff --git a/dlls/msvcrt/dir.c b/dlls/msvcrt/dir.c
index ca95f9a..2d2d2b2 100644
--- a/dlls/msvcrt/dir.c
+++ b/dlls/msvcrt/dir.c
@@ -13,37 +13,17 @@
 #include "msvcrt.h"
 #include "ms_errno.h"
 
+#include "wine/unicode.h"
+#include "msvcrt/direct.h"
+#include "msvcrt/dos.h"
+#include "msvcrt/io.h"
+#include "msvcrt/stdlib.h"
+#include "msvcrt/string.h"
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
-typedef struct MSVCRT_finddata_t
-{
-  unsigned      attrib;
-  time_t        time_create; /* -1 when N/A */
-  time_t        time_access; /* -1 when N/A */
-  time_t        time_write;
-  unsigned long size;        /* FIXME: 64 bit ??*/
-  char          name[MAX_PATH];
-} MSVCRT_finddata_t;
-
-typedef struct MSVCRT_wfinddata_t
-{
-  unsigned      attrib;
-  time_t        time_create; /* -1 when N/A */
-  time_t        time_access; /* -1 when N/A */
-  time_t        time_write;
-  unsigned long size;        /* FIXME: 64 bit ??*/
-  WCHAR          name[MAX_PATH];
-} MSVCRT_wfinddata_t;
-
-typedef struct msvcrt_diskfree_t {
-  unsigned num_clusters;
-  unsigned available;
-  unsigned cluster_sectors;
-  unsigned sector_bytes;
-} MSVCRT_diskfree_t;
-
 /* INTERNAL: Translate finddata_t to PWIN32_FIND_DATAA */
-static void msvcrt_fttofd(LPWIN32_FIND_DATAA fd, MSVCRT_finddata_t* ft)
+static void msvcrt_fttofd(LPWIN32_FIND_DATAA fd, struct _finddata_t* ft)
 {
   DWORD dw;
 
@@ -63,7 +43,7 @@
 }
 
 /* INTERNAL: Translate wfinddata_t to PWIN32_FIND_DATAA */
-static void msvcrt_wfttofd(LPWIN32_FIND_DATAW fd, MSVCRT_wfinddata_t* ft)
+static void msvcrt_wfttofd(LPWIN32_FIND_DATAW fd, struct _wfinddata_t* ft)
 {
   DWORD dw;
 
@@ -82,17 +62,6 @@
   strcpyW(ft->name, fd->cFileName);
 }
 
-char* msvcrt_strndup(const char*, unsigned int);
-LPWSTR _wcsdup( LPCWSTR );
-LPWSTR msvcrt_wstrndup( LPCWSTR , unsigned int );
-char * MSVCRT_getenv(const char *);
-WCHAR *wcscpy(WCHAR *,const WCHAR *);
-WCHAR *wcsncpy(WCHAR *,const WCHAR *,unsigned int);
-WCHAR *wcscat(WCHAR *,const WCHAR *);
-WCHAR *wcschr(WCHAR *,WCHAR);
-WCHAR *wcsrchr(WCHAR *,WCHAR);
-void _splitpath(const char *,char *, char *,char *,char *);
-
 /*********************************************************************
  *		_chdir (MSVCRT.@)
  */
@@ -139,7 +108,7 @@
 /*********************************************************************
  *		_findclose (MSVCRT.@)
  */
-int _findclose(DWORD hand)
+int _findclose(long hand)
 {
   TRACE(":handle %ld\n",hand);
   if (!FindClose((HANDLE)hand))
@@ -153,7 +122,7 @@
 /*********************************************************************
  *		_findfirst (MSVCRT.@)
  */
-DWORD _findfirst(const char * fspec, MSVCRT_finddata_t* ft)
+long _findfirst(const char * fspec, struct _finddata_t* ft)
 {
   WIN32_FIND_DATAA find_data;
   HANDLE hfind;
@@ -172,7 +141,7 @@
 /*********************************************************************
  *		_wfindfirst (MSVCRT.@)
  */
-DWORD _wfindfirst(const WCHAR * fspec, MSVCRT_wfinddata_t* ft)
+long _wfindfirst(const WCHAR * fspec, struct _wfinddata_t* ft)
 {
   WIN32_FIND_DATAW find_data;
   HANDLE hfind;
@@ -191,7 +160,7 @@
 /*********************************************************************
  *		_findnext (MSVCRT.@)
  */
-int _findnext(DWORD hand, MSVCRT_finddata_t * ft)
+int _findnext(long hand, struct _finddata_t * ft)
 {
   WIN32_FIND_DATAA find_data;
 
@@ -208,7 +177,7 @@
 /*********************************************************************
  *		_wfindnext (MSVCRT.@)
  */
-int _wfindnext(DWORD hand, MSVCRT_wfinddata_t * ft)
+int _wfindnext(long hand, struct _wfinddata_t * ft)
 {
   WIN32_FIND_DATAW find_data;
 
@@ -367,7 +336,7 @@
 /*********************************************************************
  *		_getdiskfree (MSVCRT.@)
  */
-unsigned int _getdiskfree(unsigned int disk, MSVCRT_diskfree_t* d)
+unsigned int _getdiskfree(unsigned int disk, struct _diskfree_t* d)
 {
   char drivespec[4] = {'@', ':', '\\', 0};
   DWORD ret[4];
@@ -380,10 +349,10 @@
 
   if (GetDiskFreeSpaceA(disk==0?NULL:drivespec,ret,ret+1,ret+2,ret+3))
   {
-    d->cluster_sectors = (unsigned)ret[0];
-    d->sector_bytes = (unsigned)ret[1];
-    d->available = (unsigned)ret[2];
-    d->num_clusters = (unsigned)ret[3];
+    d->sectors_per_cluster = (unsigned)ret[0];
+    d->bytes_per_sector = (unsigned)ret[1];
+    d->avail_clusters = (unsigned)ret[2];
+    d->total_clusters = (unsigned)ret[3];
     return 0;
   }
   err = GetLastError();
@@ -446,7 +415,8 @@
   WCHAR pathbuff[MAX_PATH],*path=pathbuff;
 
   TRACE(":splitting path '%s'\n",debugstr_w(path));
-  wcscpy(pathbuff, inpath);
+  /* FIXME: Should be an strncpyW or something */
+  strcpyW(pathbuff, inpath);
 
   /* convert slashes to backslashes for searching */
   for (ptr = (WCHAR*)path; *ptr; ++ptr)
@@ -454,12 +424,12 @@
       *ptr = (WCHAR)L'\\';
 
   /* look for drive spec */
-  if ((ptr = wcschr(path, (WCHAR)L':')) != (WCHAR)L'\0')
+  if ((ptr = strchrW(path, (WCHAR)L':')) != (WCHAR)L'\0')
   {
     ++ptr;
     if (drv)
     {
-      wcsncpy(drv, path, ptr - path);
+      strncpyW(drv, path, ptr - path);
       drv[ptr - path] = (WCHAR)L'\0';
     }
     path = ptr;
@@ -468,8 +438,8 @@
     *drv = (WCHAR)L'\0';
 
   /* find rightmost backslash or leftmost colon */
-  if ((ptr = wcsrchr(path, (WCHAR)L'\\')) == NULL)
-    ptr = (wcschr(path, (WCHAR)L':'));
+  if ((ptr = strrchrW(path, (WCHAR)L'\\')) == NULL)
+    ptr = (strchrW(path, (WCHAR)L':'));
 
   if (!ptr)
   {
@@ -484,15 +454,15 @@
     {
       ch = *ptr;
       *ptr = (WCHAR)L'\0';
-      wcscpy(dir, path);
+      strcpyW(dir, path);
       *ptr = ch;
     }
   }
 
-  if ((p = wcsrchr(ptr, (WCHAR)L'.')) == NULL)
+  if ((p = strrchrW(ptr, (WCHAR)L'.')) == NULL)
   {
     if (fname)
-      wcscpy(fname, ptr);
+      strcpyW(fname, ptr);
     if (ext)
       *ext = (WCHAR)L'\0';
   }
@@ -500,10 +470,10 @@
   {
     *p = (WCHAR)L'\0';
     if (fname)
-      wcscpy(fname, ptr);
+      strcpyW(fname, ptr);
     *p = (WCHAR)L'.';
     if (ext)
-      wcscpy(ext, p);
+      strcpyW(ext, p);
   }
 
   /* Fix pathological case - Win returns ':' as part of the
@@ -516,8 +486,8 @@
     {
       pathbuff[0] = (WCHAR)L':';
       pathbuff[1] = (WCHAR)L'\0';
-      wcscat(pathbuff,dir);
-      wcscpy(dir, pathbuff);
+      strcatW(pathbuff,dir);
+      strcpyW(dir, pathbuff);
     }
   }
 }
@@ -688,7 +658,7 @@
                               const char * extension )
 {
     char ch;
-    TRACE("_makepath got %s %s %s %s\n", drive, directory,
+    TRACE("got %s %s %s %s\n", drive, directory,
           filename, extension);
 
     if ( !path )
@@ -719,7 +689,7 @@
         }
     }
 
-    TRACE("_makepath returns %s\n",path);
+    TRACE("returning %s\n",path);
 }
 
 
diff --git a/dlls/msvcrt/environ.c b/dlls/msvcrt/environ.c
index c1c5e8e..8c513f5 100644
--- a/dlls/msvcrt/environ.c
+++ b/dlls/msvcrt/environ.c
@@ -9,9 +9,10 @@
 #include "wine/unicode.h"
 #include "msvcrt.h"
 
-DEFAULT_DEBUG_CHANNEL(msvcrt);
+#include "msvcrt/stdlib.h"
 
-LPWSTR wcsrchr( LPWSTR str, WCHAR ch );
+
+DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 /*********************************************************************
  *		getenv (MSVCRT.@)
@@ -51,7 +52,7 @@
 
   for (pp = environ; (*pp); pp = pp + strlenW(pp) + 1)
   {
-    pos =wcsrchr(pp,'=');
+    pos = strrchrW(pp,'=');
     if (pos)
       length = pos -pp;
     else
diff --git a/dlls/msvcrt/errno.c b/dlls/msvcrt/errno.c
index 31682c6..971c9e0 100644
--- a/dlls/msvcrt/errno.c
+++ b/dlls/msvcrt/errno.c
@@ -7,6 +7,11 @@
 #include "msvcrt.h"
 #include "ms_errno.h"
 
+#include <stdio.h>
+#include <string.h>
+#include "msvcrt/conio.h"
+
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 
@@ -86,8 +91,6 @@
   return GET_THREAD_VAR_PTR(doserrno);
 }
 
-char *strerror(int);
-
 /*********************************************************************
  *		strerror (MSVCRT.@)
  */
@@ -99,8 +102,6 @@
 /**********************************************************************
  *		_strerror	(MSVCRT.@)
  */
-extern int sprintf(char *str, const char *format, ...);
-
 const char* _strerror(const char* err)
 {
   static char strerrbuff[256]; /* FIXME: Per thread, nprintf */
@@ -108,12 +109,10 @@
   return strerrbuff;
 }
 
-int _cprintf( const char * format, ... );
-
 /*********************************************************************
  *		perror (MSVCRT.@)
  */
-void MSVCRT_perror(const char *str)
+void MSVCRT_perror(const char* str)
 {
   _cprintf("%s: %s\n",str,MSVCRT_strerror(GET_THREAD_VAR(errno)));
 }
diff --git a/dlls/msvcrt/exit.c b/dlls/msvcrt/exit.c
index 0311117..569fb39 100644
--- a/dlls/msvcrt/exit.c
+++ b/dlls/msvcrt/exit.c
@@ -5,6 +5,10 @@
  */
 #include "msvcrt.h"
 
+#include "msvcrt/conio.h"
+#include "msvcrt/stdlib.h"
+
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 /* MT */
@@ -12,9 +16,7 @@
 #define LOCK_EXIT      EnterCriticalSection(&MSVCRT_exit_cs)
 #define UNLOCK_EXIT    LeaveCriticalSection(&MSVCRT_exit_cs)
 
-typedef void (*MSVCRT_atexit_func)(void);
-
-static MSVCRT_atexit_func *MSVCRT_atexit_table = NULL;
+static _onexit_t *MSVCRT_atexit_table = NULL;
 static int MSVCRT_atexit_table_size = 0;
 static int MSVCRT_atexit_registered = 0; /* Points to free slot */
 
@@ -40,11 +42,9 @@
 /*********************************************************************
  *		__dllonexit (MSVCRT.@)
  */
-MSVCRT_atexit_func __dllonexit(MSVCRT_atexit_func func,
-                                              MSVCRT_atexit_func **start,
-                                              MSVCRT_atexit_func **end)
+_onexit_t __dllonexit(_onexit_t func, _onexit_t **start, _onexit_t **end)
 {
-  MSVCRT_atexit_func *tmp;
+  _onexit_t *tmp;
   int len;
 
   TRACE("(%p,%p,%p)\n", func, start, end);
@@ -62,7 +62,7 @@
   if (++len <= 0)
     return NULL;
 
-  tmp = (MSVCRT_atexit_func *)MSVCRT_realloc(*start, len * sizeof(tmp));
+  tmp = (_onexit_t *)MSVCRT_realloc(*start, len * sizeof(tmp));
   if (!tmp)
     return NULL;
   *start = tmp;
@@ -145,7 +145,7 @@
 /*********************************************************************
  *		_onexit (MSVCRT.@)
  */
- MSVCRT_atexit_func _onexit(MSVCRT_atexit_func func)
+_onexit_t _onexit(_onexit_t func)
 {
   TRACE("(%p)\n",func);
 
@@ -155,7 +155,7 @@
   LOCK_EXIT;
   if (MSVCRT_atexit_registered > MSVCRT_atexit_table_size - 1)
   {
-    MSVCRT_atexit_func *newtable;
+    _onexit_t *newtable;
     TRACE("expanding table\n");
     newtable = MSVCRT_calloc(sizeof(void *),MSVCRT_atexit_table_size + 32);
     if (!newtable)
@@ -191,7 +191,7 @@
 /*********************************************************************
  *		atexit (MSVCRT.@)
  */
-int MSVCRT_atexit(MSVCRT_atexit_func func)
+int MSVCRT_atexit(_onexit_t func)
 {
   TRACE("(%p)\n", func);
   return _onexit(func) == func ? 0 : -1;
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index e00f126..bcbdfd5 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -7,99 +7,34 @@
  * Copyright 2000 Jon Griffiths
  */
 #include <time.h>
+#include <stdio.h>
+#include <unistd.h>
+
 #include "ntddk.h"
 #include "msvcrt.h"
 #include "ms_errno.h"
 
-DEFAULT_DEBUG_CHANNEL(msvcrt);
+#include "wine/unicode.h"
+#include "msvcrt/direct.h"
+#include "msvcrt/fcntl.h"
+#include "msvcrt/io.h"
+#include "msvcrt/stdio.h"
+#include "msvcrt/stdlib.h"
+#include "msvcrt/string.h"
+#include "msvcrt/sys/stat.h"
+#include "msvcrt/sys/utime.h"
+#include "msvcrt/time.h"
 
-/* stat() mode bits */
-#define _S_IFMT   0xF000
-#define _S_IFREG  0x8000
-#define _S_IFDIR  0x4000
-#define _S_IFCHR  0x2000
-#define _S_IFIFO  0x1000
-#define _S_IFBLK  0x3000
-#define _S_IREAD  0x0100
-#define _S_IWRITE 0x0080
-#define _S_IEXEC  0x0040
+DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 /* for stat mode, permissions apply to all,owner and group */
 #define MSVCRT_S_IREAD  (_S_IREAD  | (_S_IREAD  >> 3) | (_S_IREAD  >> 6))
 #define MSVCRT_S_IWRITE (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6))
 #define MSVCRT_S_IEXEC  (_S_IEXEC  | (_S_IEXEC  >> 3) | (_S_IEXEC  >> 6))
 
-/* _open modes */
-#define _O_RDONLY 0x0000
-#define _O_WRONLY 0x0001
-#define _O_RDWR   0x0002
-#define _O_APPEND 0x0008
-#define _O_CREAT  0x0100
-#define _O_TRUNC  0x0200
-#define _O_EXCL   0x0400
-#define _O_TEXT   0x4000
-#define _O_BINARY 0x8000
-#define _O_TEMPORARY 0x0040 /* Will be closed and deleted on exit */
-
 /* _access() bit flags FIXME: incomplete */
 #define W_OK      2
 
-typedef struct _crtfile
-{
-  char* _ptr;
-  int   _cnt;
-  char* _base;
-  int   _flag;
-  int   _file; /* fd */
-  int   _charbuf;
-  int   _bufsiz;
-  char *_tmpfname;
-} MSVCRT_FILE;
-
-/* file._flag flags */
-#define _IOREAD   0x0001
-#define _IOWRT    0x0002
-#define _IOEOF    0x0010
-#define _IOERR    0x0020
-#define _IORW     0x0080
-#define _IOAPPEND 0x0200
-
-#define SEEK_SET    0
-#define SEEK_CUR    1
-#define SEEK_END    2
-
-#define _IOFBF 0
-#define _IOLBF 1
-#define _IONBF 2
-
-#define BUFSIZ 512
-
-#define MSVCRT_stdin  (&MSVCRT__iob[0])
-#define MSVCRT_stdout (&MSVCRT__iob[1])
-#define MSVCRT_stderr (&MSVCRT__iob[2])
-
-struct _stat
-{
-    unsigned short st_dev;
-    unsigned short st_ino;
-    unsigned short st_mode;
-    short  st_nlink;
-    short  st_uid;
-    short  st_gid;
-    unsigned int   st_rdev;
-    int    st_size;
-    int    st_atime;
-    int    st_mtime;
-    int    st_ctime;
-};
-
-typedef long MSVCRT_fpos_t;
-
-struct _utimbuf
-{
-  time_t actime;
-  time_t modtime;
-};
 
 /* FIXME: Make this dynamic */
 #define MSVCRT_MAX_FILES 257
@@ -109,6 +44,9 @@
 int  MSVCRT_flags[MSVCRT_MAX_FILES];
 char *MSVCRT_tempfiles[MSVCRT_MAX_FILES];
 MSVCRT_FILE MSVCRT__iob[3];
+#define MSVCRT_stdin       (MSVCRT__iob+STDIN_FILENO)
+#define MSVCRT_stdout      (MSVCRT__iob+STDOUT_FILENO)
+#define MSVCRT_stderr      (MSVCRT__iob+STDERR_FILENO)
 
 static int MSVCRT_fdstart = 3; /* first unallocated fd */
 static int MSVCRT_fdend = 3; /* highest allocated fd */
@@ -134,14 +72,6 @@
 #define LOCK_FILES     EnterCriticalSection(&MSVCRT_file_cs)
 #define UNLOCK_FILES   LeaveCriticalSection(&MSVCRT_file_cs)
 
-time_t MSVCRT_time(time_t *);
-int _getdrive(void);
-WCHAR *_wcsdup(const WCHAR *);
-unsigned int wcslen(const WCHAR*);
-int iswalpha(WCHAR);
-int towupper(WCHAR);
-int towlower(WCHAR);
-int _vsnwprintf(WCHAR *,unsigned int,const WCHAR *,va_list);
 
 /* INTERNAL: Get the HANDLE for a fd */
 static HANDLE msvcrt_fdtoh(int fd)
@@ -656,7 +586,7 @@
 
   if (!t)
   {
-    time_t currTime;
+    MSVCRT_time_t currTime;
     MSVCRT_time(&currTime);
     RtlSecondsSince1970ToTime(currTime, &at);
     memcpy(&wt, &at, sizeof(wt));
@@ -681,7 +611,7 @@
 /*********************************************************************
  *		_get_osfhandle (MSVCRT.@)
  */
-HANDLE _get_osfhandle(int fd)
+long _get_osfhandle(int fd)
 {
   HANDLE hand = msvcrt_fdtoh(fd);
   HANDLE newhand = hand;
@@ -789,7 +719,7 @@
 /*********************************************************************
  *		_open (MSVCRT.@)
  */
-int _open(const char *path,int flags)
+int _open(const char *path,int flags,...)
 {
   DWORD access = 0, creation = 0;
   int ioflag = 0, fd;
@@ -875,9 +805,9 @@
 /*********************************************************************
  *		_wopen (MSVCRT.@)
  */
-int _wopen(const WCHAR *path,int flags)
+int _wopen(const WCHAR *path,int flags,...)
 {
-  const unsigned int len = wcslen(path);
+  const unsigned int len = strlenW(path);
   char *patha = MSVCRT_calloc(len + 1,1);
   if (patha && WideCharToMultiByte(CP_ACP,0,path,len,patha,len,NULL,NULL))
   {
@@ -919,10 +849,10 @@
 /*********************************************************************
  *		_open_osfhandle (MSVCRT.@)
  */
-int _open_osfhandle(HANDLE hand, int flags)
+int _open_osfhandle(long hand, int flags)
 {
   int fd = msvcrt_alloc_fd(hand,flags);
-  TRACE(":handle (%d) fd (%d)\n",hand,fd);
+  TRACE(":handle (%ld) fd (%d)\n",hand,fd);
   return fd;
 }
 
@@ -1057,7 +987,7 @@
   buf->st_atime = dw;
   RtlTimeToSecondsSince1970(&hfi.ftLastWriteTime, &dw);
   buf->st_mtime = buf->st_ctime = dw;
-  TRACE("\n%d %d %d %d %d %d\n", buf->st_mode,buf->st_nlink,buf->st_size,
+  TRACE("\n%d %d %d %ld %ld %ld\n", buf->st_mode,buf->st_nlink,buf->st_size,
     buf->st_atime,buf->st_mtime, buf->st_ctime);
   return 0;
 }
@@ -1083,13 +1013,13 @@
 
   memset(buf,0,sizeof(struct _stat));
 
-  /* FIXME: rdev isnt drive num,despite what the docs say-what is it? */
-  if (iswalpha(*path))
-    buf->st_dev = buf->st_rdev = towupper(*path - (WCHAR)L'A'); /* drive num */
+  /* FIXME: rdev isn't drive num, despite what the docs says-what is it? */
+  if (MSVCRT_iswalpha(*path))
+    buf->st_dev = buf->st_rdev = toupperW(*path - (WCHAR)L'A'); /* drive num */
   else
     buf->st_dev = buf->st_rdev = _getdrive() - 1;
 
-  plen = wcslen(path);
+  plen = strlenW(path);
 
   /* Dir, or regular file? */
   if ((hfi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ||
@@ -1101,8 +1031,8 @@
     /* executable? */
     if (plen > 6 && path[plen-4] == (WCHAR)L'.')  /* shortest exe: "\x.exe" */
     {
-      ULONGLONG ext = towlower(path[plen-1]) | (towlower(path[plen-2]) << 16) |
-                               ((ULONGLONG)towlower(path[plen-3]) << 32);
+      ULONGLONG ext = tolowerW(path[plen-1]) | (tolowerW(path[plen-2]) << 16) |
+                               ((ULONGLONG)tolowerW(path[plen-3]) << 32);
       if (ext == WCEXE || ext == WCBAT || ext == WCCMD || ext == WCCOM)
         mode |= MSVCRT_S_IEXEC;
     }
@@ -1118,7 +1048,7 @@
   buf->st_atime = dw;
   RtlTimeToSecondsSince1970(&hfi.ftLastWriteTime, &dw);
   buf->st_mtime = buf->st_ctime = dw;
-  TRACE("\n%d %d %d %d %d %d\n", buf->st_mode,buf->st_nlink,buf->st_size,
+  TRACE("\n%d %d %d %ld %ld %ld\n", buf->st_mode,buf->st_nlink,buf->st_size,
         buf->st_atime,buf->st_mtime, buf->st_ctime);
   return 0;
 }
@@ -1211,7 +1141,7 @@
 /*********************************************************************
  *		_write (MSVCRT.@)
  */
-unsigned int _write(int fd, const void* buf, unsigned int count)
+int _write(int fd, const void* buf, unsigned int count)
 {
   DWORD num_written;
   HANDLE hand = msvcrt_fdtoh(fd);
@@ -1366,9 +1296,9 @@
 /*********************************************************************
  *		fgetwc (MSVCRT.@)
  */
-WCHAR MSVCRT_fgetwc(MSVCRT_FILE* file)
+MSVCRT_wint_t MSVCRT_fgetwc(MSVCRT_FILE* file)
 {
-  WCHAR wc;
+  MSVCRT_wint_t wc;
   if (_read(file->_file, &wc, sizeof(wc)) != sizeof(wc))
     return MSVCRT_WEOF;
   return wc;
@@ -1377,7 +1307,7 @@
 /*********************************************************************
  *		getwc (MSVCRT.@)
  */
-WCHAR MSVCRT_getwc(MSVCRT_FILE* file)
+MSVCRT_wint_t MSVCRT_getwc(MSVCRT_FILE* file)
 {
   return MSVCRT_fgetwc(file);
 }
@@ -1385,7 +1315,7 @@
 /*********************************************************************
  *		_fgetwchar (MSVCRT.@)
  */
-WCHAR _fgetwchar(void)
+MSVCRT_wint_t _fgetwchar(void)
 {
   return MSVCRT_fgetwc(MSVCRT_stdin);
 }
@@ -1393,7 +1323,7 @@
 /*********************************************************************
  *		getwchar (MSVCRT.@)
  */
-WCHAR MSVCRT_getwchar(void)
+MSVCRT_wint_t MSVCRT_getwchar(void)
 {
   return _fgetwchar();
 }
@@ -1401,7 +1331,7 @@
 /*********************************************************************
  *		fputwc (MSVCRT.@)
  */
-WCHAR MSVCRT_fputwc(WCHAR wc, MSVCRT_FILE* file)
+MSVCRT_wint_t MSVCRT_fputwc(MSVCRT_wint_t wc, MSVCRT_FILE* file)
 {
   if (_write(file->_file, &wc, sizeof(wc)) != sizeof(wc))
     return MSVCRT_WEOF;
@@ -1411,7 +1341,7 @@
 /*********************************************************************
  *		_fputwchar (MSVCRT.@)
  */
-WCHAR _fputwchar(WCHAR wc)
+MSVCRT_wint_t _fputwchar(MSVCRT_wint_t wc)
 {
   return MSVCRT_fputwc(wc, MSVCRT_stdout);
 }
@@ -1482,7 +1412,7 @@
  */
 MSVCRT_FILE *_wfopen(const WCHAR *path, const WCHAR *mode)
 {
-  const unsigned int plen = wcslen(path), mlen = wcslen(mode);
+  const unsigned int plen = strlenW(path), mlen = strlenW(mode);
   char *patha = MSVCRT_calloc(plen + 1, 1);
   char *modea = MSVCRT_calloc(mlen + 1, 1);
 
@@ -1548,9 +1478,9 @@
 /*********************************************************************
  *		fread (MSVCRT.@)
  */
-DWORD MSVCRT_fread(void *ptr, int size, int nmemb, MSVCRT_FILE* file)
+MSVCRT_size_t MSVCRT_fread(void *ptr, MSVCRT_size_t size, MSVCRT_size_t nmemb, MSVCRT_FILE* file)
 {
-  DWORD read = _read(file->_file,ptr, size * nmemb);
+  int read = _read(file->_file,ptr, size * nmemb);
   if (read <= 0)
     return 0;
   return read / size;
@@ -1615,7 +1545,7 @@
  */
 int MSVCRT_fscanf(MSVCRT_FILE* file, const char *format, ...)
 {
-    /* NOTE: If you extend this function, extend _cscanf in console.c too */
+    /* NOTE: If you extend this function, extend MSVCRT__cscanf in console.c too */
     int rd = 0;
     int nch;
     va_list ap;
@@ -1736,7 +1666,7 @@
 /*********************************************************************
  *		fseek (MSVCRT.@)
  */
-LONG MSVCRT_fseek(MSVCRT_FILE* file, LONG offset, int whence)
+int MSVCRT_fseek(MSVCRT_FILE* file, long offset, int whence)
 {
   return _lseek(file->_file,offset,whence);
 }
@@ -1752,9 +1682,9 @@
 /*********************************************************************
  *		fwrite (MSVCRT.@)
  */
-unsigned int MSVCRT_fwrite(const void *ptr, int size, int nmemb, MSVCRT_FILE* file)
+MSVCRT_size_t MSVCRT_fwrite(const void *ptr, MSVCRT_size_t size, MSVCRT_size_t nmemb, MSVCRT_FILE* file)
 {
-  unsigned int written = _write(file->_file, ptr, size * nmemb);
+  int written = _write(file->_file, ptr, size * nmemb);
   if (written <= 0)
     return 0;
   return written / size;
@@ -1773,7 +1703,7 @@
  */
 int MSVCRT_fputws(const WCHAR *s, MSVCRT_FILE* file)
 {
-  return MSVCRT_fwrite(s,wcslen(s),1,file) == 1 ? 0 : MSVCRT_EOF;
+  return MSVCRT_fwrite(s,strlenW(s),1,file) == 1 ? 0 : MSVCRT_EOF;
 }
 
 /*********************************************************************
@@ -1825,9 +1755,9 @@
 /*********************************************************************
  *		putchar (MSVCRT.@)
  */
-void MSVCRT_putchar(int c)
+int MSVCRT_putchar(int c)
 {
-  MSVCRT_fputc(c, MSVCRT_stdout);
+  return MSVCRT_fputc(c, MSVCRT_stdout);
 }
 
 /*********************************************************************
@@ -1847,7 +1777,7 @@
 int _putws(const WCHAR *s)
 {
   static const WCHAR nl = (WCHAR)L'\n';
-  if (MSVCRT_fwrite(s,wcslen(s),1,MSVCRT_stdout) == 1)
+  if (MSVCRT_fwrite(s,strlenW(s),1,MSVCRT_stdout) == 1)
     return MSVCRT_fwrite(&nl,sizeof(nl),1,MSVCRT_stdout) == 1 ? 0 : MSVCRT_EOF;
   return MSVCRT_EOF;
 }
@@ -1921,9 +1851,10 @@
 /*********************************************************************
  *		setvbuf (MSVCRT.@)
  */
-void MSVCRT_setvbuf(MSVCRT_FILE* file, char *buf, int mode, unsigned int size)
+int MSVCRT_setvbuf(MSVCRT_FILE* file, char *buf, int mode, MSVCRT_size_t size)
 {
   FIXME("(%p,%p,%d,%d)stub\n",file, buf, mode, size);
+  return -1;
 }
 
 /*********************************************************************
@@ -1931,7 +1862,7 @@
  */
 void MSVCRT_setbuf(MSVCRT_FILE* file, char *buf)
 {
-  MSVCRT_setvbuf(file, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
+  MSVCRT_setvbuf(file, buf, buf ? MSVCRT__IOFBF : MSVCRT__IONBF, BUFSIZ);
 }
 
 /*********************************************************************
@@ -1964,7 +1895,6 @@
     return msvcrt_alloc_fp(fd);
   return NULL;
 }
-extern int vsnprintf(void *, unsigned int, const void*, va_list);
 
 /*********************************************************************
  *		vfprintf (MSVCRT.@)
diff --git a/dlls/msvcrt/heap.c b/dlls/msvcrt/heap.c
index 50fc9cf..1759745 100644
--- a/dlls/msvcrt/heap.c
+++ b/dlls/msvcrt/heap.c
@@ -9,6 +9,9 @@
 
 #include "msvcrt.h"
 
+#include "msvcrt/stdlib.h"
+
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 /* MT */
diff --git a/dlls/msvcrt/locale.c b/dlls/msvcrt/locale.c
index f710cbe..60156f3 100644
--- a/dlls/msvcrt/locale.c
+++ b/dlls/msvcrt/locale.c
@@ -111,17 +111,9 @@
   return !strncasecmp(cmp, buff, strlen(cmp));
 }
 
-
-/* INTERNAL: Callback for enumerated languages */
-#ifdef __GNUC__
-#define UNUSED __attribute__((unused))
-#else
-#define UNUSED
-#endif
-
 static BOOL CALLBACK
-find_best_locale_proc(HMODULE hModule UNUSED, LPCSTR type UNUSED,
-                      LPCSTR name UNUSED, WORD LangID, LONG lParam)
+find_best_locale_proc(HMODULE hModule WINE_UNUSED, LPCSTR type WINE_UNUSED,
+                      LPCSTR name WINE_UNUSED, WORD LangID, LONG lParam)
 {
   locale_search_t *res = (locale_search_t *)lParam;
   const LCID lcid = MAKELCID(LangID, SORT_DEFAULT);
diff --git a/dlls/msvcrt/main.c b/dlls/msvcrt/main.c
index 859f0ac..b912f22 100644
--- a/dlls/msvcrt/main.c
+++ b/dlls/msvcrt/main.c
@@ -5,6 +5,9 @@
  */
 #include "msvcrt.h"
 
+#include "msvcrt/stdio.h"
+
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 /* Index to TLS */
@@ -21,11 +24,7 @@
 static inline BOOL msvcrt_free_tls(void);
 static inline void msvcrt_init_critical_sections(void);
 static inline void msvcrt_free_critical_sections(void);
-#ifdef __GNUC__
-const char *msvcrt_get_reason(DWORD reason) __attribute__((unused));
-#else
-const char *msvcrt_get_reason(DWORD reason);
-#endif
+const char* msvcrt_get_reason(DWORD reason) WINE_UNUSED;
 
 void msvcrt_init_io(void);
 void msvcrt_init_console(void);
diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c
index ce9e0f5..25a4aae 100644
--- a/dlls/msvcrt/math.c
+++ b/dlls/msvcrt/math.c
@@ -14,6 +14,8 @@
 #include <ieeefp.h>
 #endif
 
+#include "msvcrt/stdlib.h"
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 #ifndef HAVE_FINITE
@@ -674,7 +676,7 @@
  * VERSION
  *	[!i386] Non-x86 can't run win32 apps so we don't need binary compatibility
  */
-div_t MSVCRT_div(int num, int denom)
+MSVCRT_div_t MSVCRT_div(int num, int denom)
 {
   return div(num,denom);
 }
@@ -700,7 +702,7 @@
  * VERSION
  *	[!i386] Non-x86 can't run win32 apps so we don't need binary compatibility
  */
-ldiv_t MSVCRT_ldiv(long num, long denom)
+MSVCRT_ldiv_t MSVCRT_ldiv(long num, long denom)
 {
   return ldiv(num,denom);
 }
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c
index bd532f8..34517cb 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -10,6 +10,9 @@
  */
 #include "msvcrt.h"
 
+#include "msvcrt/string.h"
+
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 unsigned char MSVCRT_mbctype[257];
@@ -428,7 +431,7 @@
  *
  * Find a multibyte character in a multibyte string.
  */
-char *_mbschr(const char *str, unsigned int c)
+unsigned char* _mbschr(const unsigned char* str, unsigned int c)
 {
   if(MSVCRT___mb_cur_max > 1)
   {
@@ -472,7 +475,7 @@
 /*********************************************************************
  *		_mbsncat(MSVCRT.@)
  */
-char *_mbsncat(char *dst, const unsigned char *src, unsigned int len)
+unsigned char* _mbsncat(unsigned char* dst, const unsigned char* src, MSVCRT_size_t len)
 {
   if(MSVCRT___mb_cur_max > 1)
   {
diff --git a/dlls/msvcrt/misc.c b/dlls/msvcrt/misc.c
index 0535958..803902d 100644
--- a/dlls/msvcrt/misc.c
+++ b/dlls/msvcrt/misc.c
@@ -6,6 +6,10 @@
 
 #include "msvcrt.h"
 
+#include <stdlib.h>
+#include "msvcrt/stdlib.h"
+
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 typedef int (*MSVCRT_comp_func)(const void*, const void*);
@@ -19,8 +23,6 @@
     Beep(freq, duration);
 }
 
-extern int rand(void);
-
 /*********************************************************************
  *		rand (MSVCRT.@)
  */
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h
index f59a7c1..b4368da 100644
--- a/dlls/msvcrt/msvcrt.h
+++ b/dlls/msvcrt/msvcrt.h
@@ -11,10 +11,6 @@
 #include <ctype.h>
 #include <string.h>
 
-/* Files */
-#define MSVCRT_EOF   -1
-#define MSVCRT_WEOF (WCHAR)(0xFFFF)
-
 /* TLS data */
 extern DWORD MSVCRT_tls_index;
 
@@ -33,14 +29,13 @@
 #define SET_THREAD_VAR(x,y) \
   ((MSVCRT_thread_data*)TlsGetValue(MSVCRT_tls_index))->x = y
 
-void  MSVCRT__set_errno(int);
-int   MSVCRT__set_new_mode(int mode);
-int   _fcloseall(void);
-void* MSVCRT_malloc(unsigned int);
-void* MSVCRT_calloc(unsigned int, unsigned int);
-void  MSVCRT_free(void *);
-int   _cputs(const char *);
-int   _cprintf( const char *, ... );
-char* _strdup(const char *);
+void   MSVCRT__set_errno(int);
+char*  msvcrt_strndup(const char*,unsigned int);
+LPWSTR msvcrt_wstrndup(LPCWSTR, unsigned int);
+
+/* FIXME: This should be declared in new.h but it's not an extern "C" so 
+ * it would not be much use anyway. Even for Winelib applications.
+ */
+int    MSVCRT__set_new_mode(int mode);
 
 #endif /* __WINE_MSVCRT_H */
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 3b6ec88..4bd3e36 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -470,8 +470,8 @@
 @ cdecl _strtime(str) _strtime
 @ forward -noimport _strupr ntdll._strupr
 @ cdecl _swab(str str long) _swab
-@ stub _sys_errlist #() # FIXME: This is supposed to be a variable!
-@ stub _sys_nerr #() # FIXME: This is supposed to be a variable!
+@ extern _sys_errlist MSVCRT__sys_errlist
+@ extern _sys_nerr MSVCRT__sys_nerr
 @ cdecl _tell(long) _tell
 @ stub _telli64 #(long)
 @ cdecl _tempnam(str str) _tempnam
diff --git a/dlls/msvcrt/process.c b/dlls/msvcrt/process.c
index c2841bc..b9c805c 100644
--- a/dlls/msvcrt/process.c
+++ b/dlls/msvcrt/process.c
@@ -14,18 +14,11 @@
 #include "msvcrt.h"
 #include "ms_errno.h"
 
+#include "msvcrt/process.h"
+#include "msvcrt/stdlib.h"
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
-/* Process creation flags */
-#define _P_WAIT    0
-#define _P_NOWAIT  1
-#define _P_OVERLAY 2
-#define _P_NOWAITO 3
-#define _P_DETACH  4
-
-void MSVCRT__exit(int);
-void _searchenv(const char* file, const char* env, char *buf);
-
 /* FIXME: Check file extensions for app to run */
 static const unsigned int EXE = 'e' << 16 | 'x' << 8 | 'e';
 static const unsigned int BAT = 'b' << 16 | 'a' << 8 | 't';
@@ -83,9 +76,9 @@
 }
 
 /* INTERNAL: Convert argv list to a single 'delim'-separated string */
-static char* msvcrt_argvtos(const char* *arg, char delim)
+static char* msvcrt_argvtos(const char* const* arg, char delim)
 {
-  const char **search = arg;
+  const char* const* search = arg;
   long size = 0;
   char *ret;
 
@@ -152,8 +145,8 @@
 /*********************************************************************
  *		_spawnve (MSVCRT.@)
  */
-int _spawnve(int flags, const char* name, const char **argv,
-                            const char **envv)
+int _spawnve(int flags, const char* name, const char* const* argv,
+                            const char* const* envv)
 {
   char * args = msvcrt_argvtos(argv,' ');
   char * envs = msvcrt_argvtos(envv,0);
@@ -177,7 +170,7 @@
 /*********************************************************************
  *		_spawnv (MSVCRT.@)
  */
-int _spawnv(int flags, const char* name, const char **argv)
+int _spawnv(int flags, const char* name, const char* const* argv)
 {
   return _spawnve(flags, name, argv, NULL);
 }
@@ -185,8 +178,8 @@
 /*********************************************************************
  *		_spawnvpe (MSVCRT.@)
  */
-int _spawnvpe(int flags, const char* name, const char **argv,
-                            const char **envv)
+int _spawnvpe(int flags, const char* name, const char* const* argv,
+                            const char* const* envv)
 {
   char fullname[MAX_PATH];
   _searchenv(name, "PATH", fullname);
@@ -196,7 +189,7 @@
 /*********************************************************************
  *		_spawnvp (MSVCRT.@)
  */
-int _spawnvp(int flags, const char* name, const char **argv)
+int _spawnvp(int flags, const char* name, const char* const* argv)
 {
   return _spawnvpe(flags, name, argv, NULL);
 }
diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c
index 22d5c3e..0beb83e 100644
--- a/dlls/msvcrt/string.c
+++ b/dlls/msvcrt/string.c
@@ -8,6 +8,8 @@
  */
 #include "msvcrt.h"
 
+#include "msvcrt/stdlib.h"
+#include "msvcrt/string.h"
 
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
diff --git a/dlls/msvcrt/thread.c b/dlls/msvcrt/thread.c
index 89a5d04..138706c 100644
--- a/dlls/msvcrt/thread.c
+++ b/dlls/msvcrt/thread.c
@@ -5,6 +5,8 @@
  */
 #include "msvcrt.h"
 
+#include "msvcrt/process.h"
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 
@@ -13,7 +15,7 @@
  */
 unsigned long _beginthreadex(void* sec,
                              unsigned int stack,
-                             LPTHREAD_START_ROUTINE start,
+                             unsigned __stdcall (*start)(void*),
                              void* arg, unsigned int flag,
                              unsigned int* addr)
 {
diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c
index fbb1eb8..514e9c7 100644
--- a/dlls/msvcrt/time.c
+++ b/dlls/msvcrt/time.c
@@ -10,21 +10,18 @@
 #include <sys/times.h>
 #include "msvcrt.h"
 
-DEFAULT_DEBUG_CHANNEL(msvcrt);
+#include "msvcrt/stdlib.h"
+#include "msvcrt/sys/timeb.h"
+#include "msvcrt/time.h"
 
-typedef struct __MSVCRT_timeb
-{
-  time_t  time;
-  unsigned short  millitm;
-  short   timezone;
-  short   dstflag;
-} MSVCRT_timeb;
+
+DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 
 /* INTERNAL: Return formatted current time/date */
 char* msvcrt_get_current_time(char* out, const char* format)
 {
-  static const time_t bad_time = (time_t)-1;
+  static const MSVCRT_time_t bad_time = (MSVCRT_time_t)-1;
   time_t t;
   struct tm *_tm = NULL;
   char *retval = NULL;
@@ -73,7 +70,7 @@
 /*********************************************************************
  *		difftime (MSVCRT.@)
  */
-double MSVCRT_difftime(time_t time1, time_t time2)
+double MSVCRT_difftime(MSVCRT_time_t time1, MSVCRT_time_t time2)
 {
     return (double)(time1 - time2);
 }
@@ -81,16 +78,16 @@
 /*********************************************************************
  *		time (MSVCRT.@)
  */
-time_t MSVCRT_time(time_t* buf)
+MSVCRT_time_t MSVCRT_time(MSVCRT_time_t* buf)
 {
-  time_t curtime = time(NULL);
+  MSVCRT_time_t curtime = time(NULL);
   return buf ? *buf = curtime : curtime;
 }
 
 /*********************************************************************
  *		_ftime (MSVCRT.@)
  */
-void _ftime(MSVCRT_timeb* buf)
+void _ftime(struct _timeb *buf)
 {
   buf->time = MSVCRT_time(NULL);
   buf->millitm = 0; /* FIXME */
diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index 4ba83cc..ec8929d 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -10,11 +10,16 @@
 #include "winnls.h"
 #include "wine/unicode.h"
 
+#include "msvcrt/stdio.h"
+#include "msvcrt/stdlib.h"
+#include "msvcrt/string.h"
+#include "msvcrt/wctype.h"
+
 DEFAULT_DEBUG_CHANNEL(msvcrt);
 
 
 /* INTERNAL: MSVCRT_malloc() based wstrndup */
-LPWSTR msvcrt_wstrndup(LPCWSTR buf, unsigned int size)
+WCHAR* msvcrt_wstrndup(LPCWSTR buf, unsigned int size)
 {
   WCHAR* ret;
   unsigned int len = strlenW(buf), max_len;
@@ -33,9 +38,9 @@
 /*********************************************************************
  *		_wcsdup (MSVCRT.@)
  */
-LPWSTR _wcsdup( LPCWSTR str )
+WCHAR* _wcsdup( const WCHAR* str )
 {
-  LPWSTR ret = NULL;
+  WCHAR* ret = NULL;
   if (str)
   {
     int size = (strlenW(str) + 1) * sizeof(WCHAR);
@@ -48,7 +53,7 @@
 /*********************************************************************
  *		_wcsicoll (MSVCRT.@)
  */
-INT _wcsicoll( LPCWSTR str1, LPCWSTR str2 )
+INT _wcsicoll( const WCHAR* str1, const WCHAR* str2 )
 {
   /* FIXME: handle collates */
   return strcmpiW( str1, str2 );
@@ -57,9 +62,9 @@
 /*********************************************************************
  *		_wcsnset (MSVCRT.@)
  */
-LPWSTR _wcsnset( LPWSTR str, WCHAR c, INT n )
+WCHAR* _wcsnset( WCHAR* str, WCHAR c, MSVCRT_size_t n )
 {
-  LPWSTR ret = str;
+  WCHAR* ret = str;
   while ((n-- > 0) && *str) *str++ = c;
   return ret;
 }
@@ -67,10 +72,10 @@
 /*********************************************************************
  *		_wcsrev (MSVCRT.@)
  */
-LPWSTR _wcsrev( LPWSTR str )
+WCHAR* _wcsrev( WCHAR* str )
 {
-  LPWSTR ret = str;
-  LPWSTR end = str + strlenW(str) - 1;
+  WCHAR* ret = str;
+  WCHAR* end = str + strlenW(str) - 1;
   while (end > str)
   {
     WCHAR t = *end;
@@ -83,9 +88,9 @@
 /*********************************************************************
  *		_wcsset (MSVCRT.@)
  */
-LPWSTR _wcsset( LPWSTR str, WCHAR c )
+WCHAR* _wcsset( WCHAR* str, WCHAR c )
 {
-  LPWSTR ret = str;
+  WCHAR* ret = str;
   while (*str) *str++ = c;
   return ret;
 }
@@ -219,7 +224,7 @@
 /*********************************************************************
  *		vswprintf (MSVCRT.@)
  */
-int MSVCRT_vswprintf( LPWSTR str, LPCWSTR format, va_list args )
+int MSVCRT_vswprintf( WCHAR* str, const WCHAR* format, va_list args )
 {
   return _vsnwprintf( str, INT_MAX, format, args );
 }
@@ -227,7 +232,7 @@
 /*********************************************************************
  *		wcscoll (MSVCRT.@)
  */
-DWORD MSVCRT_wcscoll( LPCWSTR str1, LPCWSTR str2 )
+int MSVCRT_wcscoll( const WCHAR* str1, const WCHAR* str2 )
 {
   /* FIXME: handle collates */
   return strcmpW( str1, str2 );
@@ -236,12 +241,12 @@
 /*********************************************************************
  *		wcspbrk (MSVCRT.@)
  */
-LPWSTR MSVCRT_wcspbrk( LPCWSTR str, LPCWSTR accept )
+WCHAR* MSVCRT_wcspbrk( const WCHAR* str, const WCHAR* accept )
 {
-  LPCWSTR p;
+  const WCHAR* p;
   while (*str)
   {
-    for (p = accept; *p; p++) if (*p == *str) return (LPWSTR)str;
+    for (p = accept; *p; p++) if (*p == *str) return (WCHAR*)str;
       str++;
   }
   return NULL;
@@ -343,10 +348,6 @@
   return get_char_typeW(wc) & C1_XDIGIT;
 }
 
-extern char *_itoa( long , char *, int);
-extern char *_ultoa( long , char *, int);
-extern char *_ltoa( long , char *, int);
-
 /*********************************************************************
  *		_itow (MSVCRT.@)
  */
