diff --git a/server/registry.c b/server/registry.c
index ba78e1b..4b01b52 100644
--- a/server/registry.c
+++ b/server/registry.c
@@ -122,8 +122,8 @@
     char *buffer;  /* line buffer */
     int   len;     /* buffer length */
     int   line;    /* current input line */
-    char *tmp;     /* temp buffer to use while parsing input */
-    int   tmplen;  /* length of temp buffer */
+    WCHAR *tmp;    /* temp buffer to use while parsing input */
+    size_t tmplen; /* length of temp buffer */
 };
 
 
@@ -1021,9 +1021,9 @@
 }
 
 /* make sure the temp buffer holds enough space */
-static int get_file_tmp_space( struct file_load_info *info, int size )
+static int get_file_tmp_space( struct file_load_info *info, size_t size )
 {
-    char *tmp;
+    WCHAR *tmp;
     if (info->tmplen >= size) return 1;
     if (!(tmp = realloc( info->tmp, size )))
     {
@@ -1144,14 +1144,14 @@
     len = strlen(buffer) * sizeof(WCHAR);
     if (!get_file_tmp_space( info, len )) return NULL;
 
-    if ((res = parse_strW( (WCHAR *)info->tmp, &len, buffer, ']' )) == -1)
+    if ((res = parse_strW( info->tmp, &len, buffer, ']' )) == -1)
     {
         file_read_error( "Malformed key", info );
         return NULL;
     }
     if (sscanf( buffer + res, " %d", &modif ) != 1) modif = default_modif;
 
-    p = (WCHAR *)info->tmp;
+    p = info->tmp;
     while (prefix_len && *p) { if (*p++ == '\\') prefix_len--; }
 
     if (!*p)
@@ -1164,7 +1164,7 @@
         /* empty key name, return base key */
         return (struct key *)grab_object( base );
     }
-    if (!(name = copy_path( p, len - ((char *)p - info->tmp), 0 )))
+    if (!(name = copy_path( p, len - (p - info->tmp) * sizeof(WCHAR), 0 )))
     {
         file_read_error( "Key is too long", info );
         return NULL;
@@ -1204,20 +1204,20 @@
     if (!get_file_tmp_space( info, maxlen )) return NULL;
     if (buffer[0] == '@')
     {
-        info->tmp[0] = info->tmp[1] = 0;
+        info->tmp[0] = 0;
         *len = 1;
     }
     else
     {
-        if ((*len = parse_strW( (WCHAR *)info->tmp, &maxlen, buffer + 1, '\"' )) == -1) goto error;
+        if ((*len = parse_strW( info->tmp, &maxlen, buffer + 1, '\"' )) == -1) goto error;
         (*len)++;  /* for initial quote */
     }
     while (isspace(buffer[*len])) (*len)++;
     if (buffer[*len] != '=') goto error;
     (*len)++;
     while (isspace(buffer[*len])) (*len)++;
-    if (!(value = find_value( key, (WCHAR *)info->tmp, &index )))
-        value = insert_value( key, (WCHAR *)info->tmp, index );
+    if (!(value = find_value( key, info->tmp, &index )))
+        value = insert_value( key, info->tmp, index );
     return value;
 
  error:
@@ -1243,7 +1243,7 @@
     case REG_SZ:
         len = strlen(buffer) * sizeof(WCHAR);
         if (!get_file_tmp_space( info, len )) return 0;
-        if ((res = parse_strW( (WCHAR *)info->tmp, &len, buffer, '\"' )) == -1) goto error;
+        if ((res = parse_strW( info->tmp, &len, buffer, '\"' )) == -1) goto error;
         ptr = info->tmp;
         break;
     case REG_DWORD:
@@ -1257,7 +1257,7 @@
         {
             maxlen = 1 + strlen(buffer)/3;  /* 3 chars for one hex byte */
             if (!get_file_tmp_space( info, len + maxlen )) return 0;
-            if ((res = parse_hex( info->tmp + len, &maxlen, buffer )) == -1) goto error;
+            if ((res = parse_hex( (unsigned char *)info->tmp + len, &maxlen, buffer )) == -1) goto error;
             len += maxlen;
             buffer += res;
             while (isspace(*buffer)) buffer++;
@@ -1299,16 +1299,16 @@
     int len = strlen(name) * sizeof(WCHAR);
     if (!get_file_tmp_space( info, len )) return 0;
 
-    if ((res = parse_strW( (WCHAR *)info->tmp, &len, name, ']' )) == -1)
+    if ((res = parse_strW( info->tmp, &len, name, ']' )) == -1)
     {
         file_read_error( "Malformed key", info );
         return 0;
     }
-    for (p = (WCHAR *)info->tmp; *p; p++) if (*p == '\\') break;
+    for (p = info->tmp; *p; p++) if (*p == '\\') break;
     *p = 0;
     for (res = 1; key != root_key; res++)
     {
-        if (!strcmpiW( (WCHAR *)info->tmp, key->name )) break;
+        if (!strcmpiW( info->tmp, key->name )) break;
         key = key->parent;
     }
     if (key == root_key) res = 0;  /* no matching name */
