diff --git a/dlls/avifil32/avifile.c b/dlls/avifil32/avifile.c
index 66b9bc5..901010d 100644
--- a/dlls/avifil32/avifile.c
+++ b/dlls/avifil32/avifile.c
@@ -1086,7 +1086,7 @@
 
   if (This->sInfo.dwSampleSize != 0) {
     /* fixed samplesize -- we can read over frame/block boundaries */
-    ULONG block = start;
+    LONG block = start;
     LONG offset = 0;
 
     /* convert start sample to block,offset pair */
diff --git a/dlls/avifil32/editstream.c b/dlls/avifil32/editstream.c
index 946eb59..eba563a 100644
--- a/dlls/avifil32/editstream.c
+++ b/dlls/avifil32/editstream.c
@@ -552,7 +552,7 @@
   IAVIEditStreamImpl *pEdit = NULL;
   PAVISTREAM          pStream;
   DWORD               startPos, endPos, streamNr, nStreams;
-  LONG                n;
+  ULONG               n;
 
   TRACE("(%p,%p,%p,%p,%ld,%ld)\n",iface,plStart,plLength,
 	pSource,lStart,lLength);
diff --git a/dlls/kernel/atom16.c b/dlls/kernel/atom16.c
index 601225e..698ad14 100644
--- a/dlls/kernel/atom16.c
+++ b/dlls/kernel/atom16.c
@@ -59,7 +59,7 @@
     HANDLE16    next;
     WORD        refCount;
     BYTE        length;
-    BYTE        str[1];
+    CHAR        str[1];
 } ATOMENTRY;
 
 typedef struct
diff --git a/dlls/kernel/format_msg.c b/dlls/kernel/format_msg.c
index ce5ca6b..9e21031 100644
--- a/dlls/kernel/format_msg.c
+++ b/dlls/kernel/format_msg.c
@@ -84,9 +84,9 @@
     }
     else
     {
-        int len = MultiByteToWideChar( CP_ACP, 0, mre->Text, -1, NULL, 0 );
+        int len = MultiByteToWideChar( CP_ACP, 0, (const char *)mre->Text, -1, NULL, 0 );
         if (!(buffer = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) return NULL;
-        MultiByteToWideChar( CP_ACP, 0, mre->Text, -1, buffer, len );
+        MultiByteToWideChar( CP_ACP, 0, (const char*)mre->Text, -1, buffer, len );
     }
     TRACE("returning %s\n", wine_dbgstr_w(buffer));
     return buffer;
@@ -114,7 +114,7 @@
     }
     else
     {
-        int len = strlen(mre->Text) + 1;
+        int len = strlen((const char*)mre->Text) + 1;
         if (!(buffer = HeapAlloc( GetProcessHeap(), 0, len ))) return NULL;
         memcpy( buffer, mre->Text, len );
     }
diff --git a/dlls/kernel/lzexpand.c b/dlls/kernel/lzexpand.c
index 6fe8c5d..2979b75 100644
--- a/dlls/kernel/lzexpand.c
+++ b/dlls/kernel/lzexpand.c
@@ -455,7 +455,7 @@
 	FILETIME filetime;
 	struct	lzstate	*lzs;
 #define BUFLEN	1000
-	BYTE	buf[BUFLEN];
+	CHAR	buf[BUFLEN];
 	/* we need that weird typedef, for i can't seem to get function pointer
 	 * casts right. (Or they probably just do not like WINAPI in general)
 	 */
diff --git a/dlls/kernel/ne_segment.c b/dlls/kernel/ne_segment.c
index 4385fd3..4f4aff8 100644
--- a/dlls/kernel/ne_segment.c
+++ b/dlls/kernel/ne_segment.c
@@ -201,11 +201,10 @@
 
         case NE_RELTYPE_NAME:
             module = pModuleTable[rep->target1-1];
-            func_name = (char *)pModule + pModule->ne_imptab + rep->target2;
+            func_name = (BYTE *)pModule + pModule->ne_imptab + rep->target2;
             memcpy( buffer, func_name+1, *func_name );
             buffer[*func_name] = '\0';
-            func_name = buffer;
-            ordinal = NE_GetOrdinal( module, func_name );
+            ordinal = NE_GetOrdinal( module, buffer );
             address = NE_GetEntryPoint( module, ordinal );
 
             if (ERR_ON(fixup) && !address)
@@ -213,7 +212,7 @@
                 NE_MODULE *pTarget = NE_GetPtr( module );
                 ERR("No implementation for %.*s.%s, setting to 0xdeadbeef\n",
                     *((BYTE *)pTarget + pTarget->ne_restab),
-                    (char *)pTarget + pTarget->ne_restab + 1, func_name );
+                    (char *)pTarget + pTarget->ne_restab + 1, buffer );
             }
             if (!address) address = (FARPROC16) 0xdeadbeef;
             if (TRACE_ON(fixup))
@@ -222,7 +221,7 @@
                 TRACE("%d: %.*s.%s=%04x:%04x %s\n", i + 1,
                        *((BYTE *)pTarget + pTarget->ne_restab),
                        (char *)pTarget + pTarget->ne_restab + 1,
-                       func_name, HIWORD(address), LOWORD(address),
+                       buffer, HIWORD(address), LOWORD(address),
                        NE_GetRelocAddrName( rep->address_type, additive ) );
             }
             break;
diff --git a/dlls/kernel/relay16.c b/dlls/kernel/relay16.c
index 319dadf..48f8a8d 100644
--- a/dlls/kernel/relay16.c
+++ b/dlls/kernel/relay16.c
@@ -236,11 +236,11 @@
     ET_BUNDLE *bundle;
     ET_ENTRY *entry;
 
+    *pOrd = 0;
     if (!(pModule = NE_GetPtr( FarGetOwner16( GlobalHandle16( frame->module_cs ) ))))
         return NULL;
 
     max_offset = 0;
-    *pOrd = 0;
     bundle = (ET_BUNDLE *)((BYTE *)pModule + pModule->ne_enttab);
     do
     {
diff --git a/dlls/kernel/resource16.c b/dlls/kernel/resource16.c
index 3f178f7..ec69234 100644
--- a/dlls/kernel/resource16.c
+++ b/dlls/kernel/resource16.c
@@ -261,7 +261,7 @@
             if (!(pTypeInfo->type_id & 0x8000))
             {
                 BYTE *p = pResTab + pTypeInfo->type_id;
-                if ((*p == len) && !strncasecmp( p+1, str, len ))
+                if ((*p == len) && !strncasecmp( (char*)p+1, str, len ))
                 {
                     TRACE("  Found type '%s'\n", str );
                     return pTypeInfo;
@@ -308,7 +308,7 @@
         {
             if (pNameInfo->id & 0x8000) continue;
             p = pResTab + pNameInfo->id;
-            if ((*p == len) && !strncasecmp( p+1, str, len ))
+            if ((*p == len) && !strncasecmp( (char*)p+1, str, len ))
                 return pNameInfo;
         }
     }
diff --git a/dlls/kernel/snoop16.c b/dlls/kernel/snoop16.c
index 19e10d4..f2a7fc6 100644
--- a/dlls/kernel/snoop16.c
+++ b/dlls/kernel/snoop16.c
@@ -203,7 +203,7 @@
 	/* Now search the non-resident names table */
 
 	if (!*cpnt && pModule->nrname_handle) {
-		cpnt = (char *)GlobalLock16( pModule->nrname_handle );
+		cpnt = (unsigned char *)GlobalLock16( pModule->nrname_handle );
 		while (*cpnt) {
 			cpnt += *cpnt + 1 + sizeof(WORD);
 			if (*(WORD*)(cpnt+*cpnt+1) == ordinal) {
diff --git a/dlls/kernel/sync.c b/dlls/kernel/sync.c
index 4dd5236..54b6f16 100644
--- a/dlls/kernel/sync.c
+++ b/dlls/kernel/sync.c
@@ -831,7 +831,7 @@
  */
 BOOL WINAPI ReleaseSemaphore( HANDLE handle, LONG count, LONG *previous )
 {
-    NTSTATUS status = NtReleaseSemaphore( handle, count, previous );
+    NTSTATUS status = NtReleaseSemaphore( handle, count, (PULONG)previous );
     if (status) SetLastError( RtlNtStatusToDosError(status) );
     return !status;
 }
diff --git a/dlls/kernel/volume.c b/dlls/kernel/volume.c
index 2f43c09..0a6a23e 100644
--- a/dlls/kernel/volume.c
+++ b/dlls/kernel/volume.c
@@ -374,7 +374,7 @@
         }
     }
     if (label_len) RtlMultiByteToUnicodeN( label, (len-1) * sizeof(WCHAR),
-                                           &label_len, label_ptr, label_len );
+                                           &label_len, (char*)label_ptr, label_len );
     label_len /= sizeof(WCHAR);
     label[label_len] = 0;
     while (label_len && label[label_len-1] == ' ') label[--label_len] = 0;
@@ -386,7 +386,7 @@
  */
 static BOOL VOLUME_SetSuperblockLabel( enum fs_type type, HANDLE handle, const WCHAR *label )
 {
-    BYTE label_data[11];
+    CHAR label_data[11];
     DWORD offset, len;
 
     switch(type)
