diff --git a/server/process.c b/server/process.c
index dc6d1cf..917785e 100644
--- a/server/process.c
+++ b/server/process.c
@@ -888,8 +888,8 @@
 
     if ((process = get_process_from_handle( req->handle, PROCESS_VM_READ )))
     {
-        read_process_memory( process, req->addr, req->len,
-                             get_req_size( req, req->data, sizeof(int) ), req->data );
+        size_t maxlen = get_req_data_size(req) / sizeof(int);
+        read_process_memory( process, req->addr, req->len, maxlen, get_req_data(req) );
         release_object( process );
     }
 }
@@ -901,9 +901,9 @@
 
     if ((process = get_process_from_handle( req->handle, PROCESS_VM_WRITE )))
     {
-        write_process_memory( process, req->addr, req->len,
-                              get_req_size( req, req->data, sizeof(int) ),
-                              req->first_mask, req->last_mask, req->data );
+        size_t maxlen = get_req_data_size(req) / sizeof(int);
+        write_process_memory( process, req->addr, req->len, maxlen,
+                              req->first_mask, req->last_mask, get_req_data(req) );
         release_object( process );
     }
 }
diff --git a/server/registry.c b/server/registry.c
index 944d731..3ca1c37 100644
--- a/server/registry.c
+++ b/server/registry.c
@@ -1437,8 +1437,8 @@
         set_error( STATUS_NO_MORE_ENTRIES );
         return;
     }
-    if (!(save_branch_info[save_branch_count].path = memdup( path, len+1 ))) return;
-    save_branch_info[save_branch_count].path[len] = 0;
+    if (!len || !(save_branch_info[save_branch_count].path = memdup( path, len ))) return;
+    save_branch_info[save_branch_count].path[len - 1] = 0;
     save_branch_info[save_branch_count].key = (struct key *)grab_object( key );
     save_branch_count++;
 }
@@ -1757,7 +1757,7 @@
 
     if ((key = get_hkey_obj( req->hkey, KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS )))
     {
-        register_branch_for_saving( key, req->file, get_req_strlen( req, req->file ) );
+        register_branch_for_saving( key, get_req_data(req), get_req_data_size(req) );
         release_object( key );
     }
 }
diff --git a/server/serial.c b/server/serial.c
index 64a9956..d102233 100644
--- a/server/serial.c
+++ b/server/serial.c
@@ -37,7 +37,6 @@
 #include "request.h"
 
 static void serial_dump( struct object *obj, int verbose );
-static void serial_destroy( struct object *obj );
 static int serial_get_read_fd( struct object *obj );
 static int serial_get_write_fd( struct object *obj );
 static int serial_get_info( struct object *obj, struct get_file_info_request *req );
@@ -46,8 +45,7 @@
 struct serial
 {
     struct object       obj;
-    char                name[16]; /* eg. /dev/ttyS1 */
-    int                 access;
+    unsigned int        access;
 
     /* timeout values */
     unsigned int        readinterval;
@@ -78,24 +76,65 @@
     serial_get_write_fd,          /* get_write_fd */
     no_flush,                     /* flush */
     serial_get_info,              /* get_file_info */
-    serial_destroy                /* destroy */
+    no_destroy                    /* destroy */
 };
 
 /* SERIAL PORT functions */
 
+static struct serial *create_serial( const char *nameptr, size_t len, unsigned int access )
+{
+    struct serial *serial;
+    struct termios tios;
+    int fd, flags = 0;
+    char *name;
+
+    if (!(name = mem_alloc( len + 1 ))) return NULL;
+    memcpy( name, nameptr, len );
+    name[len] = 0;
+
+    switch(access & (GENERIC_READ | GENERIC_WRITE))
+    {
+    case GENERIC_READ:  flags |= O_RDONLY; break;
+    case GENERIC_WRITE: flags |= O_WRONLY; break;
+    case GENERIC_READ|GENERIC_WRITE: flags |= O_RDWR; break;
+    default: break;
+    }
+
+    fd = open( name, flags );
+    free( name );
+    if (fd < 0)
+    {
+        file_set_error();
+        return NULL;
+    }
+
+    /* check its really a serial port */
+    if (tcgetattr(fd,&tios))
+    {
+        file_set_error();
+        close( fd );
+        return NULL;
+    }
+
+    if ((serial = alloc_object( &serial_ops, fd )))
+    {
+        serial->access       = access;
+        serial->readinterval = 0;
+        serial->readmult     = 0;
+        serial->readconst    = 0;
+        serial->writemult    = 0;
+        serial->writeconst   = 0;
+        serial->eventmask    = 0;
+        serial->commerror    = 0;
+    }
+    return serial;
+}
+
 static void serial_dump( struct object *obj, int verbose )
 {
     struct serial *serial = (struct serial *)obj;
     assert( obj->ops == &serial_ops );
-
-    fprintf( stderr, "Port fd=%d name='%s' mask=%x\n", 
-             serial->obj.fd, serial->name,serial->eventmask);
-}
-
-/* same as file_destroy, but don't delete comm ports */
-static void serial_destroy( struct object *obj )
-{
-    assert( obj->ops == &serial_ops );
+    fprintf( stderr, "Port fd=%d mask=%x\n", serial->obj.fd, serial->eventmask );
 }
 
 struct serial *get_serial_obj( struct process *process, int handle, unsigned int access )
@@ -147,50 +186,10 @@
 DECL_HANDLER(create_serial)
 {
     struct serial *serial;
-    int fd,flags;
-    struct termios tios;
 
     req->handle = -1;
-
-    flags = 0;
-    switch(req->access & (GENERIC_READ | GENERIC_WRITE))
+    if ((serial = create_serial( get_req_data(req), get_req_data_size(req), req->access )))
     {
-    case GENERIC_READ:  flags |= O_RDONLY; break;
-    case GENERIC_WRITE: flags |= O_WRONLY; break;
-    case GENERIC_READ|GENERIC_WRITE: flags |= O_RDWR; break;
-    default: break;
-    }
-
-    fd = open( req->name, flags );
-    if(fd < 0)
-    {
-        file_set_error();
-        return;
-    }
-
-    /* check its really a serial port */
-    if(0>tcgetattr(fd,&tios))
-    {
-        file_set_error();
-        close(fd);
-        return;
-    }
-
-    serial = alloc_object( &serial_ops, fd );
-    if (serial)
-    {
-        strncpy(serial->name,req->name,sizeof serial->name);
-        serial->name[sizeof(serial->name)-1] = 0;
-
-        serial->access       = req->access;
-        serial->readinterval = 0;
-        serial->readmult     = 0;
-        serial->readconst    = 0;
-        serial->writemult    = 0;
-        serial->writeconst   = 0;
-        serial->eventmask    = 0;
-        serial->commerror    = 0;
-
         req->handle = alloc_handle( current->process, serial, req->access, req->inherit );
         release_object( serial );
     }
diff --git a/server/trace.c b/server/trace.c
index b9e02a8..4ac36ea 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -51,25 +51,15 @@
     fputc( '}', stderr );
 }
 
-static void dump_string( const void *req, const char *str )
+static void dump_path_t( const void *req, const path_t *path )
 {
-    int len = get_req_strlen( req, str );
-    fprintf( stderr, "\"%.*s\"", len, str );
-}
-
-static void dump_unicode_string( const void *req, const WCHAR *str )
-{
+    const WCHAR *str = *path;
     size_t len = get_req_strlenW( req, str );
     fprintf( stderr, "L\"" );
     dump_strW( str, len, stderr, "\"\"" );
     fputc( '\"', stderr );
 }
 
-static void dump_path_t( const void *req, const path_t *path )
-{
-    dump_unicode_string( req, *path );
-}
-
 static void dump_context( const CONTEXT *context )
 {
 #ifdef __i386__
@@ -271,18 +261,6 @@
 
 /* dumping for functions for requests that have a variable part */
 
-static void dump_varargs_read_process_memory_reply( const struct read_process_memory_request *req )
-{
-    int count = min( req->len, get_req_size( req, req->data, sizeof(int) ));
-    dump_bytes( (unsigned char *)req->data, count * sizeof(int) );
-}
-
-static void dump_varargs_write_process_memory_request( const struct write_process_memory_request *req )
-{
-    int count = min( req->len, get_req_size( req, req->data, sizeof(int) ));
-    dump_bytes( (unsigned char *)req->data, count * sizeof(int) );
-}
-
 static void dump_varargs_enum_key_value_reply( const struct enum_key_value_request *req )
 {
     int count = min( req->len - req->offset, get_req_size( req, req->data, 1 ));
@@ -1130,7 +1108,7 @@
 static void dump_read_process_memory_reply( const struct read_process_memory_request *req )
 {
     fprintf( stderr, " data=" );
-    dump_varargs_read_process_memory_reply( req );
+    cur_pos += dump_varargs_bytes( req );
 }
 
 static void dump_write_process_memory_request( const struct write_process_memory_request *req )
@@ -1141,7 +1119,7 @@
     fprintf( stderr, " first_mask=%08x,", req->first_mask );
     fprintf( stderr, " last_mask=%08x,", req->last_mask );
     fprintf( stderr, " data=" );
-    dump_varargs_write_process_memory_request( req );
+    cur_pos += dump_varargs_bytes( req );
 }
 
 static void dump_create_key_request( const struct create_key_request *req )
@@ -1263,7 +1241,7 @@
     fprintf( stderr, " hkey=%d,", req->hkey );
     fprintf( stderr, " file=%d,", req->file );
     fprintf( stderr, " name=" );
-    dump_path_t( req, &req->name );
+    cur_pos += dump_varargs_unicode_str( req );
 }
 
 static void dump_save_registry_request( const struct save_registry_request *req )
@@ -1276,7 +1254,7 @@
 {
     fprintf( stderr, " hkey=%d,", req->hkey );
     fprintf( stderr, " file=" );
-    dump_string( req, req->file );
+    cur_pos += dump_varargs_string( req );
 }
 
 static void dump_set_registry_levels_request( const struct set_registry_levels_request *req )
@@ -1440,7 +1418,7 @@
     fprintf( stderr, " inherit=%d,", req->inherit );
     fprintf( stderr, " sharing=%08x,", req->sharing );
     fprintf( stderr, " name=" );
-    dump_string( req, req->name );
+    cur_pos += dump_varargs_string( req );
 }
 
 static void dump_create_serial_reply( const struct create_serial_request *req )
