diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index cf5600b..7e744cd 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -231,7 +231,7 @@
 DWORD convertHexCSVToHex(char *str, BYTE *buf, ULONG bufLen)
 {
     char *s = str;  /* Pointer to current */
-    char *b = buf;  /* Pointer to result  */
+    char *b = (char*) buf;  /* Pointer to result  */
 
     ULONG strLen    = strlen(str);
     ULONG strPos    = 0;
@@ -408,7 +408,7 @@
             dwLen--;
             val_data[dwLen]='\0';
         }
-        lpbData = val_data;
+        lpbData = (BYTE*) val_data;
     } else if (dwParseType == REG_DWORD)  /* Convert the dword types */
     {
         dwLen   = convertHexToDWord(val_data, convert);
@@ -1195,7 +1195,7 @@
             case REG_SZ:
             case REG_EXPAND_SZ:
                 fputs("\"", file);
-                REGPROC_export_string(file, *val_buf);
+                REGPROC_export_string(file, (char*) *val_buf);
                 fputs("\"\n", file);
                 break;
 
diff --git a/programs/taskmgr/dbgchnl.c b/programs/taskmgr/dbgchnl.c
index aebbb0e..aec460d 100644
--- a/programs/taskmgr/dbgchnl.c
+++ b/programs/taskmgr/dbgchnl.c
@@ -201,7 +201,7 @@
     int                         i, ret = 1;
     unsigned int                j;
     void*                       buf_addr;
-    unsigned char               buffer[32];
+    char                        buffer[32];
     void*                       addr;
     const char**                cache = NULL;
     unsigned                    num_cache, used_cache;
diff --git a/programs/wcmd/builtins.c b/programs/wcmd/builtins.c
index a8a54c5..0d1a259 100644
--- a/programs/wcmd/builtins.c
+++ b/programs/wcmd/builtins.c
@@ -69,8 +69,8 @@
   if (GetConsoleScreenBufferInfo(hStdOut, &consoleInfo))
   {
       COORD topLeft;
-      long screenSize;
-      
+      DWORD screenSize;
+
       screenSize = consoleInfo.dwSize.X * (consoleInfo.dwSize.Y + 1);
 
       topLeft.X = 0;
diff --git a/programs/wcmd/wcmdmain.c b/programs/wcmd/wcmdmain.c
index 5be391d..1c1cd5b 100644
--- a/programs/wcmd/wcmdmain.c
+++ b/programs/wcmd/wcmdmain.c
@@ -496,7 +496,7 @@
          * it's new input & output handles)
          */
         size_t sz = max(sizeof(unsigned) + (sizeof(char) + sizeof(HANDLE)) * 3, st_p.cbReserved2);
-        char* ptr = HeapAlloc(GetProcessHeap(), 0, sz);
+        BYTE* ptr = HeapAlloc(GetProcessHeap(), 0, sz);
         if (ptr)
         {
             unsigned num = *(unsigned*)st_p.lpReserved2;
@@ -506,7 +506,7 @@
             memcpy(ptr, st_p.lpReserved2, st_p.cbReserved2);
             st->cbReserved2 = sz;
             st->lpReserved2 = ptr;
-                
+
 #define WX_OPEN 0x01    /* see dlls/msvcrt/file.c */
             if (num <= 0 || (flags[0] & WX_OPEN))
             {
diff --git a/programs/winedbg/debugger.h b/programs/winedbg/debugger.h
index 64a992e..64fc111 100644
--- a/programs/winedbg/debugger.h
+++ b/programs/winedbg/debugger.h
@@ -297,7 +297,7 @@
 extern struct expr*     expr_alloc_func_call(const char*, int nargs, ...);
 extern struct expr*     expr_alloc_typecast(struct type_expr_t*, struct expr*);
 extern struct dbg_lvalue expr_eval(struct expr*);
-extern struct expr*     expr_clone(const struct expr* exp, unsigned* local_binding);
+extern struct expr*     expr_clone(const struct expr* exp, BOOL *local_binding);
 extern int              expr_free(struct expr* exp);
 extern int              expr_print(const struct expr* exp);
 
diff --git a/programs/winedbg/display.c b/programs/winedbg/display.c
index 58e3415..2f91895 100644
--- a/programs/winedbg/display.c
+++ b/programs/winedbg/display.c
@@ -60,7 +60,7 @@
 int display_add(struct expr *exp, int count, char format)
 {
     int         i;
-    int         local_binding = FALSE;
+    BOOL local_binding = FALSE;
 
     for (i = 0; i < ndisplays; i++)
         if (displaypoints[i].exp == NULL)
diff --git a/programs/winedbg/expr.c b/programs/winedbg/expr.c
index 8372b46..b28c737 100644
--- a/programs/winedbg/expr.c
+++ b/programs/winedbg/expr.c
@@ -770,7 +770,7 @@
     return TRUE;
 }
 
-struct expr* expr_clone(const struct expr* exp, unsigned* local_binding)
+struct expr* expr_clone(const struct expr* exp, BOOL *local_binding)
 {
     int		        i;
     struct expr*        rtn;
diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c
index e89470c..f815359 100644
--- a/programs/winedbg/gdbproxy.c
+++ b/programs/winedbg/gdbproxy.c
@@ -2083,7 +2083,7 @@
 {
     int                 sock;
     struct sockaddr_in  s_addrs;
-    int                 s_len = sizeof(s_addrs);
+    unsigned int        s_len = sizeof(s_addrs);
     struct pollfd       pollfd;
     IMAGEHLP_MODULE     imh_mod;
 
diff --git a/programs/winedbg/info.c b/programs/winedbg/info.c
index dad9365..db589d3 100644
--- a/programs/winedbg/info.c
+++ b/programs/winedbg/info.c
@@ -692,7 +692,7 @@
     struct dll_option_layout    dol;
     int                         i;
     char*                       str;
-    unsigned char               buffer[32];
+    char                        buffer[32];
     unsigned char               mask;
     int                         done = 0;
     BOOL                        bAll;
