diff --git a/files/directory.c b/files/directory.c
index 26ded31..9835a7d 100644
--- a/files/directory.c
+++ b/files/directory.c
@@ -285,7 +285,7 @@
     DOS_FULL_NAME full_name;
 
     TRACE(file, "(%s,%p)\n", path, lpsecattribs );
-    if (DOSFS_IsDevice( path ))
+    if (DOSFS_GetDevice( path ))
     {
         TRACE(file, "cannot use device '%s'!\n",path);
         DOS_ERROR( ER_AccessDenied, EC_AccessDenied, SA_Abort, EL_Disk );
@@ -353,7 +353,7 @@
 
     TRACE(file, "'%s'\n", path );
 
-    if (DOSFS_IsDevice( path ))
+    if (DOSFS_GetDevice( path ))
     {
         TRACE(file, "cannot remove device '%s'!\n", path);
         DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
diff --git a/files/dos_fs.c b/files/dos_fs.c
index 8c1659d..1204d09 100644
--- a/files/dos_fs.c
+++ b/files/dos_fs.c
@@ -46,11 +46,25 @@
 /* Chars we don't want to see in DOS file names */
 #define INVALID_DOS_CHARS  "*?<>|\"+=,;[] \345"
 
-static const char *DOSFS_Devices[] = {
-"CON","PRN","NUL","AUX","LPT1","LPT2","LPT3","LPT4","COM1","COM2","COM3","COM4","SCSIMGR$"
+static const DOS_DEVICE DOSFS_Devices[] =
+/* name, device flags (see Int 21/AX=0x4400) */
+{
+    { "CON",		0xc0d3 },
+    { "PRN",		0xa0c0 },
+    { "NUL",		0x80c4 },
+    { "AUX",		0x80c0 },
+    { "LPT1",		0xa0c0 },
+    { "LPT2",		0xa0c0 },
+    { "LPT3",		0xa0c0 },
+    { "LPT4",		0xc0d3 },
+    { "COM1",		0x80c0 },
+    { "COM2",		0x80c0 },
+    { "COM3",		0x80c0 },
+    { "COM4",		0x80c0 },
+    { "SCSIMGR$",	0xc0c0 },
+    { "HPSCAN",		0xc0c0 }
 };
 
-
 #define GET_DRIVE(path) \
     (((path)[1] == ':') ? toupper((path)[0]) - 'A' : DOSFS_CurDrive)
 
@@ -554,11 +568,11 @@
 
 
 /***********************************************************************
- *           DOSFS_IsDevice
+ *           DOSFS_GetDevice
  *
- * Check if a DOS file name represents a DOS device.
+ * Check if a DOS file name represents a DOS device and return the device.
  */
-BOOL32 DOSFS_IsDevice( const char *name )
+const DOS_DEVICE *DOSFS_GetDevice( const char *name )
 {
     int	i;
     const char *p;
@@ -568,14 +582,14 @@
     if ((p = strrchr( name, '\\' ))) name = p + 1;
     for (i = 0; i < sizeof(DOSFS_Devices)/sizeof(DOSFS_Devices[0]); i++)
     {
-        const char *dev = DOSFS_Devices[i];
+        const char *dev = DOSFS_Devices[i].name;
         if (!lstrncmpi32A( dev, name, strlen(dev) ))
         {
             p = name + strlen( dev );
-            if (!*p || (*p == '.')) return TRUE;
+            if (!*p || (*p == '.')) return &DOSFS_Devices[i];
         }
     }
-    return FALSE;
+    return NULL;
 }
 
 /***********************************************************************
@@ -595,15 +609,15 @@
     if ((p = strrchr( name, '\\' ))) name = p + 1;
     for (i = 0; i < sizeof(DOSFS_Devices)/sizeof(DOSFS_Devices[0]); i++)
     {
-        const char *dev = DOSFS_Devices[i];
+        const char *dev = DOSFS_Devices[i].name;
         if (!lstrncmpi32A( dev, name, strlen(dev) ))
         {
             p = name + strlen( dev );
             if (!*p || (*p == '.')) {
 	    	/* got it */
-		if (!strcmp(DOSFS_Devices[i],"NUL"))
+		if (!strcmp(DOSFS_Devices[i].name,"NUL"))
 			return FILE_OpenUnixFile("/dev/null",unixmode);
-		if (!strcmp(DOSFS_Devices[i],"CON")) {
+		if (!strcmp(DOSFS_Devices[i].name,"CON")) {
 			switch (unixmode) {
 			case O_RDONLY:
 				return GetStdHandle( STD_INPUT_HANDLE );
@@ -617,7 +631,7 @@
 				break;
 			}
 		}
-		if (!strcmp(DOSFS_Devices[i],"SCSIMGR$")) {
+		if (!strcmp(DOSFS_Devices[i].name,"SCSIMGR$")) {
 		        if ((handle = FILE_Alloc( &file )) == INVALID_HANDLE_VALUE32)
 				return HFILE_ERROR32;
 			else {
@@ -625,7 +639,15 @@
 				return handle;
 			}
 		}
-		FIXME(dosfs,"device open %s not supported (yet)\n",DOSFS_Devices[i]);
+                if (!strcmp(DOSFS_Devices[i].name,"HPSCAN")) {
+                        if ((handle = FILE_Alloc( &file )) == INVALID_HANDLE_VALUE32)
+                                return HFILE_ERROR32;
+                        else {
+                                file->unix_name = HEAP_strdupA( SystemHeap, 0, name );
+                                return handle;
+                        }
+                }
+		FIXME(dosfs,"device open %s not supported (yet)\n",DOSFS_Devices[i].name);
     		return HFILE_ERROR32;
 	    }
         }
@@ -770,7 +792,12 @@
                    (p_s < full->short_name + sizeof(full->short_name) - 1) &&
                    (p_l < full->long_name + sizeof(full->long_name) - 1))
             {
-                *p_l++ = *p_s++ = tolower(*name);
+                *p_s++ = tolower(*name);
+                /* If the drive is case-sensitive we want to create new */
+                /* files in lower-case otherwise we can't reopen them   */
+                /* under the same short name. */
+	    	if (flags & DRIVE_CASE_SENSITIVE) *p_l++ = tolower(*name);
+		else *p_l++ = *name;
                 name++;
             }
             *p_l = *p_s = '\0';
diff --git a/files/drive.c b/files/drive.c
index de25491..8dcf69e 100644
--- a/files/drive.c
+++ b/files/drive.c
@@ -971,6 +971,7 @@
                                        LPSTR fsname, DWORD fsname_len )
 {
     int drive;
+    char *cp;
 
     /* FIXME, SetLastErrors missing */
 
@@ -985,7 +986,13 @@
         drive = toupper(root[0]) - 'A';
     }
     if (!DRIVE_IsValid( drive )) return FALSE;
-    if (label) lstrcpyn32A( label, DOSDrives[drive].label, label_len );
+    if (label)
+    {
+       lstrcpyn32A( label, DOSDrives[drive].label, label_len );
+       for (cp = label; *cp; cp++);
+       while (cp != label && *(cp-1) == ' ') cp--;
+       *cp = '\0';
+    }
     if (serial) *serial = DOSDrives[drive].serial;
 
     /* Set the filesystem information */
diff --git a/files/file.c b/files/file.c
index c48bbc6..d9ac977 100644
--- a/files/file.c
+++ b/files/file.c
@@ -197,7 +197,7 @@
  *
  * Release a DOS file obtained with FILE_GetFile.
  */
-static void FILE_ReleaseFile( FILE_OBJECT *file )
+void FILE_ReleaseFile( FILE_OBJECT *file )
 {
     K32OBJ_DecCount( &file->header );
 }
@@ -350,7 +350,7 @@
 
     if (!path) return HFILE_ERROR32;
 
-    if (DOSFS_IsDevice( path ))
+    if (DOSFS_GetDevice( path ))
     {
     	HFILE32	ret;
 
@@ -388,7 +388,7 @@
 
     if (!path) return INVALID_HANDLE_VALUE32;
 
-    if (DOSFS_IsDevice( path ))
+    if (DOSFS_GetDevice( path ))
     {
         WARN(file, "cannot create DOS device '%s'!\n", path);
         DOS_ERROR( ER_AccessDenied, EC_NotFound, SA_Abort, EL_Disk );
@@ -1278,7 +1278,7 @@
 
     TRACE(file, "'%s'\n", path );
 
-    if (DOSFS_IsDevice( path ))
+    if (DOSFS_GetDevice( path ))
     {
         WARN(file, "cannot remove DOS device '%s'!\n", path);
         DOS_ERROR( ER_FileNotFound, EC_NotFound, SA_Abort, EL_Disk );
diff --git a/files/profile.c b/files/profile.c
index 4110e71..c1f0daf 100644
--- a/files/profile.c
+++ b/files/profile.c
@@ -9,6 +9,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <sys/stat.h>
+
 #include "windows.h"
 #include "file.h"
 #include "heap.h"
@@ -36,11 +38,16 @@
     char            *dos_name;
     char            *unix_name;
     char            *filename;
+    time_t           mtime;
 } PROFILE;
 
 
-/* Cached profile file */
-static PROFILE CurProfile = { FALSE, NULL, NULL };
+#define N_CACHED_PROFILES 10
+
+/* Cached profile files */
+static PROFILE *MRUProfile[N_CACHED_PROFILES]={NULL};
+
+#define CurProfile (MRUProfile[0])
 
 /* wine.ini profile content */
 static PROFILESECTION *WineProfile;
@@ -205,17 +212,22 @@
                 next_section  = &section->next;
                 next_key      = &section->key;
                 prev_key      = NULL;
+
+                TRACE(profile, "New section: '%s'\n",section->name);
+
                 continue;
             }
         }
+
+        p2=p+strlen(p) - 1;
+        while ((p2 > p) && ((*p2 == '\n') || PROFILE_isspace(*p2))) *p2--='\0';
+
         if ((p2 = strchr( p, '=' )) != NULL)
         {
             char *p3 = p2 - 1;
             while ((p3 > p) && PROFILE_isspace(*p3)) *p3-- = '\0';
             *p2++ = '\0';
             while (*p2 && PROFILE_isspace(*p2)) p2++;
-            p3 = p2 + strlen(p2) - 1;
-            while ((p3 > p2) && ((*p3 == '\n') || PROFILE_isspace(*p3))) *p3--='\0';
         }
 
         if(*p || !prev_key || *prev_key->name)
@@ -341,9 +353,16 @@
     char *p, buffer[MAX_PATHNAME_LEN];
     const char *unix_name;
     FILE *file = NULL;
+    struct stat buf;
 
-    if (!CurProfile.changed || !CurProfile.dos_name) return TRUE;
-    if (!(unix_name = CurProfile.unix_name) || !(file = fopen(unix_name, "w")))
+    if(!CurProfile)
+    {
+        WARN(profile, "No current profile!\n");
+        return FALSE;
+    }
+
+    if (!CurProfile->changed || !CurProfile->dos_name) return TRUE;
+    if (!(unix_name = CurProfile->unix_name) || !(file = fopen(unix_name, "w")))
     {
         /* Try to create it in $HOME/.wine */
         /* FIXME: this will need a more general solution */
@@ -352,7 +371,7 @@
             strcpy( buffer, p );
             strcat( buffer, "/.wine/" );
             p = buffer + strlen(buffer);
-            strcpy( p, strrchr( CurProfile.dos_name, '\\' ) + 1 );
+            strcpy( p, strrchr( CurProfile->dos_name, '\\' ) + 1 );
             CharLower32A( p );
             file = fopen( buffer, "w" );
             unix_name = buffer;
@@ -361,14 +380,16 @@
     
     if (!file)
     {
-        WARN(profile, "could not save profile file %s\n", CurProfile.dos_name);
+        WARN(profile, "could not save profile file %s\n", CurProfile->dos_name);
         return FALSE;
     }
 
-    TRACE(profile, "Saving '%s' into '%s'\n", CurProfile.dos_name, unix_name );
-    PROFILE_Save( file, CurProfile.section );
+    TRACE(profile, "Saving '%s' into '%s'\n", CurProfile->dos_name, unix_name );
+    PROFILE_Save( file, CurProfile->section );
     fclose( file );
-    CurProfile.changed = FALSE;
+    CurProfile->changed = FALSE;
+    if(!stat(unix_name,&buf))
+       CurProfile->mtime=buf.st_mtime;
     return TRUE;
 }
 
@@ -384,13 +405,25 @@
     char buffer[MAX_PATHNAME_LEN];
     char *newdos_name, *p;
     FILE *file = NULL;
+    int i,j;
+    struct stat buf;
+    PROFILE *tempProfile;
 
-    if (CurProfile.filename && !strcmp( filename, CurProfile.filename ))
-    {
-        TRACE(profile, "(%s): already opened\n",
-                         filename );
-        return TRUE;
-    }
+    /* First time around */
+
+    if(!CurProfile)
+       for(i=0;i<N_CACHED_PROFILES;i++)
+         {
+          MRUProfile[i]=HEAP_xalloc( SystemHeap, 0, sizeof(PROFILE) );
+          MRUProfile[i]->changed=FALSE;
+          MRUProfile[i]->section=NULL;
+          MRUProfile[i]->dos_name=NULL;
+          MRUProfile[i]->unix_name=NULL;
+          MRUProfile[i]->filename=NULL;
+          MRUProfile[i]->mtime=0;
+         }
+
+    /* Check for a match */
 
     if (strchr( filename, '/' ) || strchr( filename, '\\' ) || 
         strchr( filename, ':' ))
@@ -404,25 +437,61 @@
         strcat( buffer, filename );
         if (!DOSFS_GetFullName( buffer, FALSE, &full_name )) return FALSE;
     }
-    if (CurProfile.dos_name &&
-        !strcmp( full_name.short_name, CurProfile.dos_name ))
-    {
-        TRACE(profile, "(%s): already opened\n",
-                         filename );
-        return TRUE;
-    }
 
-    /* Flush the previous profile */
+    for(i=0;i<N_CACHED_PROFILES;i++)
+      {
+       if ((MRUProfile[i]->filename && !strcmp( filename, MRUProfile[i]->filename )) ||
+           (MRUProfile[i]->dos_name && !strcmp( full_name.short_name, MRUProfile[i]->dos_name )))
+         {
+          if(i)
+            {
+             PROFILE_FlushFile();
+             tempProfile=MRUProfile[i];
+             for(j=i;j>0;j--)
+                MRUProfile[j]=MRUProfile[j-1];
+             CurProfile=tempProfile;
+            }
+          if(!stat(CurProfile->unix_name,&buf) && CurProfile->mtime==buf.st_mtime)
+            {
+             TRACE(profile, "(%s): already opened (mru=%d)\n",
+                              filename, i );
+             return TRUE;
+            }
+          TRACE(profile, "(%s): already opened, needs refreshing (mru=%d)\n",
+                           filename, i );
+         }
+      }
+
+    /* Rotate the oldest to the top to be replaced */
+
+    if(i==N_CACHED_PROFILES)
+      {
+       tempProfile=MRUProfile[N_CACHED_PROFILES-1];
+       for(i=N_CACHED_PROFILES-1;i>0;i--)
+          MRUProfile[i]=MRUProfile[i-1];
+       CurProfile=tempProfile;
+      }
+
+    /* Flush the profile */
+
+    if(CurProfile->filename)
+      {
+       PROFILE_FlushFile();
+       PROFILE_Free( CurProfile->section );
+       if (CurProfile->dos_name) HeapFree( SystemHeap, 0, CurProfile->dos_name );
+       if (CurProfile->unix_name) HeapFree( SystemHeap, 0, CurProfile->unix_name );
+       if (CurProfile->filename) HeapFree( SystemHeap, 0, CurProfile->filename );
+       CurProfile->changed=FALSE;
+       CurProfile->section=NULL;
+       CurProfile->dos_name=NULL;
+       CurProfile->unix_name=NULL;
+       CurProfile->filename=NULL;
+       CurProfile->mtime=0;
+      }
 
     newdos_name = HEAP_strdupA( SystemHeap, 0, full_name.short_name );
-    PROFILE_FlushFile();
-    PROFILE_Free( CurProfile.section );
-    if (CurProfile.dos_name) HeapFree( SystemHeap, 0, CurProfile.dos_name );
-    if (CurProfile.unix_name) HeapFree( SystemHeap, 0, CurProfile.unix_name );
-    if (CurProfile.filename) HeapFree( SystemHeap, 0, CurProfile.filename );
-    CurProfile.section   = NULL;
-    CurProfile.dos_name  = newdos_name;
-    CurProfile.filename  = HEAP_strdupA( SystemHeap, 0, filename );
+    CurProfile->dos_name  = newdos_name;
+    CurProfile->filename  = HEAP_strdupA( SystemHeap, 0, filename );
 
     /* Try to open the profile file, first in $HOME/.wine */
 
@@ -438,13 +507,13 @@
         {
             TRACE(profile, "(%s): found it in %s\n",
                              filename, buffer );
-            CurProfile.unix_name = HEAP_strdupA( SystemHeap, 0, buffer );
+            CurProfile->unix_name = HEAP_strdupA( SystemHeap, 0, buffer );
         }
     }
 
     if (!file)
     {
-        CurProfile.unix_name = HEAP_strdupA( SystemHeap, 0,
+        CurProfile->unix_name = HEAP_strdupA( SystemHeap, 0,
                                              full_name.long_name );
         if ((file = fopen( full_name.long_name, "r" )))
             TRACE(profile, "(%s): found it in %s\n",
@@ -453,8 +522,10 @@
 
     if (file)
     {
-        CurProfile.section = PROFILE_Load( file );
+        CurProfile->section = PROFILE_Load( file );
         fclose( file );
+        if(!stat(CurProfile->unix_name,&buf))
+           CurProfile->mtime=buf.st_mtime;
     }
     else
     {
@@ -481,7 +552,7 @@
         if (section->name && !strcasecmp( section->name, section_name ))
         {
             UINT32 oldlen = len;
-            for (key = section->key; key; key = key->next)
+            for (key = section->key; key && *(key->name); key = key->next)
             {
                 if (len <= 2) break;
                 if (IS_ENTRY_COMMENT(key->name)) continue;  /* Skip comments */
@@ -507,7 +578,7 @@
 		buffer[-1] = '\0';
                 return oldlen - 2;
             }
-            return oldlen - len + 1;
+            return oldlen - len;
         }
         section = section->next;
     }
@@ -529,14 +600,14 @@
     if (!def_val) def_val = "";
     if (key_name && key_name[0])
     {
-        key = PROFILE_Find( &CurProfile.section, section, key_name, FALSE );
+        key = PROFILE_Find( &CurProfile->section, section, key_name, FALSE );
         PROFILE_CopyEntry( buffer, (key && key->value) ? key->value : def_val,
                            len, FALSE );
         TRACE(profile, "('%s','%s','%s'): returning '%s'\n",
                          section, key_name, def_val, buffer );
         return strlen( buffer );
     }
-    return PROFILE_GetSection(CurProfile.section, section, buffer, len,
+    return PROFILE_GetSection(CurProfile->section, section, buffer, len,
 				FALSE, FALSE);
 }
 
@@ -552,8 +623,8 @@
     if (!key_name)  /* Delete a whole section */
     {
         TRACE(profile, "('%s')\n", section_name);
-        CurProfile.changed |= PROFILE_DeleteSection( &CurProfile.section,
-                                                     section_name );
+        CurProfile->changed |= PROFILE_DeleteSection( &CurProfile->section,
+                                                      section_name );
         return TRUE;         /* Even if PROFILE_DeleteSection() has failed,
                                 this is not an error on application's level.*/
     }
@@ -561,13 +632,13 @@
     {
         TRACE(profile, "('%s','%s')\n",
                          section_name, key_name );
-        CurProfile.changed |= PROFILE_DeleteKey( &CurProfile.section,
-                                                 section_name, key_name );
+        CurProfile->changed |= PROFILE_DeleteKey( &CurProfile->section,
+                                                  section_name, key_name );
         return TRUE;          /* same error handling as above */
     }
     else  /* Set the key value */
     {
-        PROFILEKEY *key = PROFILE_Find( &CurProfile.section, section_name,
+        PROFILEKEY *key = PROFILE_Find( &CurProfile->section, section_name,
                                         key_name, TRUE );
         TRACE(profile, "('%s','%s','%s'): \n",
                          section_name, key_name, value );
@@ -584,7 +655,7 @@
         }
         else TRACE(profile, "  creating key\n" );
         key->value = HEAP_strdupA( SystemHeap, 0, value );
-        CurProfile.changed = TRUE;
+        CurProfile->changed = TRUE;
     }
     return TRUE;
 }
@@ -1013,7 +1084,7 @@
                                           UINT32 len, LPCSTR filename )
 {
     if (PROFILE_Open( filename ))
-        return PROFILE_GetSection(CurProfile.section, section, buffer, len,
+        return PROFILE_GetSection(CurProfile->section, section, buffer, len,
                                 FALSE, TRUE);
 
     return 0;
@@ -1092,7 +1163,7 @@
     if (PROFILE_Open( filename )) {
 	buf=buffer;
 	cursize=0;
-	section=CurProfile.section;
+	section=CurProfile->section;
 	for ( ; section; section = section->next) 
             if (section->name) {
 		l=strlen (section->name);
@@ -1122,7 +1193,7 @@
     PROFILEKEY *k;
 
     if (PROFILE_Open( filename )) {
-        k=PROFILE_Find ( &CurProfile.section, section, key, FALSE);
+        k=PROFILE_Find ( &CurProfile->section, section, key, FALSE);
 	if (!k) return FALSE;
     	lstrcpyn32A( buf, k->value, strlen(k->value));
         return TRUE;
