diff --git a/console/interface.c b/console/interface.c
index 80bc1a872cfe2f30ec219545e217acf0d7f883d0..707bc98be8eeac295bd6b62eef1bf0b381f8001e 100644
--- a/console/interface.c
+++ b/console/interface.c
@@ -21,20 +21,10 @@ static int pop_driver(char **, char **, int *);
 
 static int console_initialized = FALSE;
 
-int CONSOLE_Init(char *drivers)
+static int CONSOLE_Init(void)
 {
-      /* When this function is called drivers should be a string
-         that consists of driver names followed by plus (+) signs
-         to denote additions. 
-
-         For example:
-            drivers = tty                Load just the tty driver
-            drivers = ncurses+xterm      Load ncurses then xterm
-
-         The "default" value is just tty.
-      */
-      
-      char *single;
+      char buffer[256];
+      char *single, *drivers = buffer;
       int length;
       char initial_rows[5];
       char initial_columns[5];
@@ -43,6 +33,18 @@ int CONSOLE_Init(char *drivers)
       driver.console_out = stdout;
       driver.console_in = stdin;
 
+      /* drivers should be a string that consists of driver names
+         followed by plus (+) signs to denote additions. 
+
+         For example:
+            drivers = tty                Load just the tty driver
+            drivers = ncurses+xterm      Load ncurses then xterm
+
+         The "default" value is just tty.
+      */
+      PROFILE_GetWineIniString( "console", "Drivers", CONSOLE_DEFAULT_DRIVER,
+                                buffer, sizeof(buffer) );
+
       while (pop_driver(&drivers, &single, &length))
       {
          if (!strncmp(single, "tty", length))
@@ -92,7 +94,7 @@ int CONSOLE_Init(char *drivers)
 void CONSOLE_Write(char out, int fg_color, int bg_color, int attribute)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.write)
    {
@@ -111,7 +113,7 @@ void CONSOLE_Close()
 void CONSOLE_MoveCursor(char row, char col)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.moveCursor)
    {
@@ -125,7 +127,7 @@ void CONSOLE_ClearWindow(char row1, char col1, char row2, char col2,
    int bg_color, int attribute)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.clearWindow)
    {
@@ -139,7 +141,7 @@ void CONSOLE_ScrollUpWindow(char row1, char col1, char row2, char col2,
    char lines, int bg_color, int attribute)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.scrollUpWindow)
    {
@@ -154,7 +156,7 @@ void CONSOLE_ScrollDownWindow(char row1, char col1, char row2, char col2,
    char lines, int bg_color, int attribute)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.scrollDownWindow)
    {
@@ -171,7 +173,7 @@ int CONSOLE_CheckForKeystroke(char *scan, char *ascii)
    a conv_* function in int16.c. Yuck. */
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.checkForKeystroke)
       return driver.checkForKeystroke(scan, ascii);
@@ -182,7 +184,7 @@ int CONSOLE_CheckForKeystroke(char *scan, char *ascii)
 void CONSOLE_GetKeystroke(char *scan, char *ascii)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.getKeystroke)
       driver.getKeystroke(scan, ascii);
@@ -191,7 +193,7 @@ void CONSOLE_GetKeystroke(char *scan, char *ascii)
 void CONSOLE_GetCursorPosition(char *row, char *col)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.getCursorPosition)
       driver.getCursorPosition(row, col);
@@ -200,7 +202,7 @@ void CONSOLE_GetCursorPosition(char *row, char *col)
 void CONSOLE_GetCharacterAtCursor(char *ch, int *fg, int *bg, int *a)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.getCharacterAtCursor)
       driver.getCharacterAtCursor(ch, fg, bg, a);
@@ -209,7 +211,7 @@ void CONSOLE_GetCharacterAtCursor(char *ch, int *fg, int *bg, int *a)
 void CONSOLE_Refresh()
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.refresh)
       driver.refresh();
@@ -218,7 +220,7 @@ void CONSOLE_Refresh()
 int CONSOLE_AllocColor(int color)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.allocColor)
       return driver.allocColor(color);
@@ -229,7 +231,7 @@ int CONSOLE_AllocColor(int color)
 void CONSOLE_ClearScreen()
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.clearScreen)
    {
@@ -242,7 +244,7 @@ void CONSOLE_ClearScreen()
 char CONSOLE_GetCharacter()
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    /* I'm not sure if we need this really. This is a function that can be
       accelerated that returns the next *non extended* keystroke */
@@ -255,7 +257,7 @@ char CONSOLE_GetCharacter()
 void CONSOLE_ResizeScreen(int x, int y)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.resizeScreen)
       driver.resizeScreen(x, y);
@@ -270,7 +272,7 @@ void CONSOLE_NotifyResizeScreen(int x, int y)
 void CONSOLE_SetBackgroundColor(int fg, int bg)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.setBackgroundColor)
       driver.setBackgroundColor(fg, bg);
@@ -279,7 +281,7 @@ void CONSOLE_SetBackgroundColor(int fg, int bg)
 void CONSOLE_GetBackgroundColor(int *fg, int *bg)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    if (driver.getBackgroundColor)
       driver.getBackgroundColor(fg, bg);
@@ -288,7 +290,7 @@ void CONSOLE_GetBackgroundColor(int *fg, int *bg)
 void CONSOLE_WriteRawString(char *str)
 {
    if (!console_initialized)
-      console_initialized = CONSOLE_Init(driver.driver_list);
+      console_initialized = CONSOLE_Init();
       
    /* This is a special function that is only for internal use and 
       does not actually call any of the console drivers. It's 
diff --git a/documentation/wine.man.in b/documentation/wine.man.in
index 62ab8db2cecaf814107c887c213331455a888f72..26f085eac9b62b4d314d6f3880191c2ec27d4842 100644
--- a/documentation/wine.man.in
+++ b/documentation/wine.man.in
@@ -91,12 +91,6 @@ For more information, see the
 file contained in the source distribution.
 .SH OPTIONS
 .TP
-.I -backingstore
-Turn on backing store
-Backingstore stores pixels of obscured window parts off-screen.
-This buffer is used to restore these parts faster once they are to reappear,
-but it consumes additional memory of course.
-.TP
 .I -config filename
 Use the named configuration file rather than the default
 (@sysconfdir@/wine.conf or ~/.winerc).
@@ -212,12 +206,6 @@ Read only files may not be opened in write mode (the default is to
 allow opening read-only files for writing, because most Windows
 programs always request read-write access, even on CD-ROM drives...).
 .TP
-.I -fixedmap
-Use a "standard" color map.
-.TP
-.I -iconic
-Start as an icon
-.TP
 .I -language xx
 Set the language to
 .I xx
@@ -227,15 +215,6 @@ Set the language to
 Create each top-level window as a properly managed X window instead of
 creating our own "sticky" window.
 .TP
-.I -mode modename
-Determines the mode in which
-.B wine
-is started. Possible mode names are
-.I standard
-and
-.I enhanced.
-Enhanced mode is the default (when no -mode option is specified).
-.TP
 .I -name name
 Set the application name
 .TP
diff --git a/files/profile.c b/files/profile.c
index 5575b91097f8cddcc20a25963cc70f2d4b379031..4085f5d95db88595edf89b5132ce5a8a25925695 100644
--- a/files/profile.c
+++ b/files/profile.c
@@ -21,11 +21,13 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "winnls.h"
+#include "winreg.h"
 #include "file.h"
 #include "heap.h"
 #include "debugtools.h"
 #include "xmalloc.h"
 #include "options.h"
+#include "server.h"
 
 DEFAULT_DEBUG_CHANNEL(profile);
 
@@ -62,8 +64,8 @@ static PROFILE *MRUProfile[N_CACHED_PROFILES]={NULL};
 
 #define CurProfile (MRUProfile[0])
 
-/* wine.ini profile content */
-static PROFILESECTION *PROFILE_WineProfile;
+/* wine.ini config file registry root */
+static HKEY wine_profile_key;
 
 #define PROFILE_MAX_LINE_LEN   1024
 
@@ -79,7 +81,7 @@ static char PROFILE_WineIniUsed[MAX_PATHNAME_LEN] = "";
 #define WINE_INI_GLOBAL ETCDIR "/wine.conf"
 #define WINE_CONFIG_DIR "/.wine"   /* config dir inside $HOME */
 
-static LPCWSTR wininiW = NULL;
+static const WCHAR wininiW[] = { 'w','i','n','.','i','n','i',0 };
 
 static CRITICAL_SECTION PROFILE_CritSect;
 
@@ -299,6 +301,70 @@ static PROFILESECTION *PROFILE_Load( FILE *file )
 }
 
 
+/***********************************************************************
+ *           PROFILE_RegistryLoad
+ *
+ * Load a profile tree from a file into a registry key.
+ */
+static DWORD PROFILE_RegistryLoad( HKEY root, FILE *file )
+{
+    HKEY hkey = 0;
+    DWORD err = 0;
+    char buffer[PROFILE_MAX_LINE_LEN];
+    char *p, *p2;
+    int line = 0;
+
+    while (fgets( buffer, PROFILE_MAX_LINE_LEN, file ))
+    {
+        line++;
+        p = buffer;
+        while (*p && PROFILE_isspace(*p)) p++;
+        if (*p == '[')  /* section start */
+        {
+            if (!(p2 = strrchr( p, ']' )))
+            {
+                WARN("Invalid section header at line %d: '%s'\n",
+		     line, p );
+            }
+            else
+            {
+                *p2 = '\0';
+                p++;
+                if (hkey) RegCloseKey( hkey );
+                if ((err = RegCreateKeyExA( root, p, 0, NULL, REG_OPTION_VOLATILE,
+                                            KEY_ALL_ACCESS, NULL, &hkey, NULL ))) return err;
+                TRACE("New section: '%s'\n",p);
+                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++;
+        }
+
+        if (*p && hkey && !IS_ENTRY_COMMENT(p))
+        {
+            if (!p2) p2 = "";
+            if ((err = RegSetValueExA( hkey, p, 0, REG_SZ, p2, strlen(p2)+1 )))
+            {
+                RegCloseKey( hkey );
+                return err;
+            }
+            TRACE("New key: name='%s', value='%s'\n",p,p2);
+        }
+    }
+    if (hkey) RegCloseKey( hkey );
+    return 0;
+}
+
+
 /***********************************************************************
  *           PROFILE_DeleteSection
  *
@@ -766,120 +832,63 @@ static BOOL PROFILE_SetString( LPCSTR section_name, LPCSTR key_name,
 int PROFILE_GetWineIniString( const char *section, const char *key_name,
                               const char *def, char *buffer, int len )
 {
-    int	ret;
-
-    EnterCriticalSection( &PROFILE_CritSect );
+    char tmp[PROFILE_MAX_LINE_LEN];
+    HKEY hkey;
+    DWORD err;
 
-    if (key_name)
+    if (!(err = RegOpenKeyA( wine_profile_key, section, &hkey )))
     {
-        PROFILEKEY *key = PROFILE_Find(&PROFILE_WineProfile, section, key_name, FALSE);
-        PROFILE_CopyEntry( buffer, (key && key->value) ? key->value : def,
-                           len, TRUE );
-        TRACE("('%s','%s','%s'): returning '%s'\n",
-                         section, key_name, def, buffer );
-        ret = strlen( buffer );
-    } 
-    else 
-    {
-       ret = PROFILE_GetSection( PROFILE_WineProfile, section, buffer, len, TRUE, FALSE );
+        DWORD type;
+        DWORD count = sizeof(tmp);
+        err = RegQueryValueExA( hkey, key_name, 0, &type, tmp, &count );
+        RegCloseKey( hkey );
     }
-    LeaveCriticalSection( &PROFILE_CritSect );
-
-    return ret;
+    PROFILE_CopyEntry( buffer, err ? def : tmp, len, TRUE );
+    TRACE( "('%s','%s','%s'): returning '%s'\n", section, key_name, def, buffer );
+    return strlen(buffer);
 }
 
 
 /***********************************************************************
- *           PROFILE_GetWineIniInt
+ *           PROFILE_EnumWineIniString
  *
- * Get a config integer from the wine.ini file.
+ * Get a config string from the wine.ini file.
  */
-int PROFILE_GetWineIniInt( const char *section, const char *key_name, int def )
+BOOL PROFILE_EnumWineIniString( const char *section, int index,
+                                char *name, int name_len, char *buffer, int len )
 {
-    char buffer[20];
-    char *p;
-    long result;
-    PROFILEKEY *key;
-    int	ret;
+    char tmp[PROFILE_MAX_LINE_LEN];
+    HKEY hkey;
+    DWORD err, type;
+    DWORD count = sizeof(tmp);
 
-    EnterCriticalSection( &PROFILE_CritSect );
-
-    key = PROFILE_Find( &PROFILE_WineProfile, section, key_name, FALSE );
-    if (!key || !key->value) {
-       ret = def;
-    } else {
-       PROFILE_CopyEntry( buffer, key->value, sizeof(buffer), TRUE );
-       result = strtol( buffer, &p, 0 );
-       ret = (p == buffer) ? 0  /* No digits at all */ : (int)result;
+    if (RegOpenKeyA( wine_profile_key, section, &hkey )) return FALSE;
+    err = RegEnumValueA( hkey, index, name, (DWORD*)&name_len, NULL, &type, tmp, &count );
+    RegCloseKey( hkey );
+    if (!err)
+    {
+        PROFILE_CopyEntry( buffer, tmp, len, TRUE );
+        TRACE( "('%s',%d): returning '%s'='%s'\n", section, index, name, buffer );
     }
-
-    LeaveCriticalSection( &PROFILE_CritSect );
-
-    return ret;
+    return !err;
 }
 
 
-/******************************************************************************
- *
- *   int  PROFILE_EnumerateWineIniSection(
- *     char const  *section,  #Name of the section to enumerate
- *     void  (*cbfn)(char const *key, char const *value, void *user),
- *                            # Address of the callback function 
- *     void  *user )          # User-specified pointer.
- *
- *   For each entry in a section in the wine.conf file, this function will
- *   call the specified callback function, informing it of each key and
- *   value.  An optional user pointer may be passed to it (if this is not
- *   needed, pass NULL through it and ignore the value in the callback
- *   function).
- *
- *   The callback function must accept three parameters:
- *      The name of the key (char const *)
- *      The value of the key (char const *)
- *      A user-specified parameter (void *)
- *   Note that the first two are char CONST *'s, not char *'s!  The callback
- *   MUST not modify these strings!
+/***********************************************************************
+ *           PROFILE_GetWineIniInt
  *
- *   The return value indicates the number of times the callback function
- *   was called.
+ * Get a config integer from the wine.ini file.
  */
-int  PROFILE_EnumerateWineIniSection(
-    char const  *section,
-    void  (*cbfn)(char const *, char const *, void *),
-    void  *userptr )
+int PROFILE_GetWineIniInt( const char *section, const char *key_name, int def )
 {
-    PROFILESECTION  *scansect;
-    PROFILEKEY  *scankey;
-    int  calls = 0;
-
-    EnterCriticalSection( &PROFILE_CritSect );
-
-    /* Search for the correct section */
-    for(scansect = PROFILE_WineProfile; scansect; scansect = scansect->next) {
-	if(scansect->name && !strcasecmp(scansect->name, section)) {
-
-	    /* Enumerate each key with the callback */
-	    for(scankey = scansect->key; scankey; scankey = scankey->next) {
-
-		/* Ignore blank entries -- these shouldn't exist, but let's
-		   be extra careful */
-		if (!scankey->name[0]) continue;
-                if (!scankey->value) cbfn(scankey->name, NULL, userptr);
-                else
-                {
-                    char value[1024];
-                    PROFILE_CopyEntry(value, scankey->value, sizeof(value), TRUE);
-		    cbfn(scankey->name, value, userptr);
-                }
-                ++calls;
-	    }
-	
-	    break;
-	}
-    }
-    LeaveCriticalSection( &PROFILE_CritSect );
+    char buffer[20];
+    char *p;
+    long result;
 
-    return calls;
+    PROFILE_GetWineIniString( section, key_name, "", buffer, sizeof(buffer) );
+    if (!buffer[0]) return def;
+    result = strtol( buffer, &p, 0 );
+    return (p == buffer) ? 0  /* No digits at all */ : (int)result;
 }
 
 
@@ -950,24 +959,29 @@ int PROFILE_LoadWineIni(void)
     const char *p;
     FILE *f;
 
+    if (RegCreateKeyExA( HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config", 0, NULL,
+                         REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &wine_profile_key, NULL ))
+    {
+        ERR("Cannot create config registry key\n" );
+        return 0;
+    }
+
     InitializeCriticalSection( &PROFILE_CritSect );
     MakeCriticalSectionGlobal( &PROFILE_CritSect );
 
+    if (!CLIENT_IsBootThread()) return 1;  /* already loaded */
+
     if ( (Options.configFileName!=NULL) && (f = fopen(Options.configFileName, "r")) )
     {
       /* Open -config specified file */
-      PROFILE_WineProfile = PROFILE_Load ( f);
-      fclose ( f );
       lstrcpynA(PROFILE_WineIniUsed,Options.configFileName,MAX_PATHNAME_LEN);
-      return 1;
+      goto found;
     }
 
     if ( (p = getenv( "WINE_INI" )) && (f = fopen( p, "r" )) )
     {
-	PROFILE_WineProfile = PROFILE_Load( f );
-	fclose( f );
 	lstrcpynA(PROFILE_WineIniUsed,p,MAX_PATHNAME_LEN);
-	return 1;
+	goto found;
     }
     if ((p = getenv( "HOME" )) != NULL)
     {
@@ -975,10 +989,8 @@ int PROFILE_LoadWineIni(void)
         strcat( buffer, PROFILE_WineIniName );
         if ((f = fopen( buffer, "r" )) != NULL)
         {
-            PROFILE_WineProfile = PROFILE_Load( f );
-            fclose( f );
 	    lstrcpynA(PROFILE_WineIniUsed,buffer,MAX_PATHNAME_LEN);
-            return 1;
+            goto found;
         }
     }
     else WARN("could not get $HOME value for config file.\n" );
@@ -987,14 +999,17 @@ int PROFILE_LoadWineIni(void)
 
     if ((f = fopen( WINE_INI_GLOBAL, "r" )) != NULL)
     {
-        PROFILE_WineProfile = PROFILE_Load( f );
-        fclose( f );
 	lstrcpynA(PROFILE_WineIniUsed,WINE_INI_GLOBAL,MAX_PATHNAME_LEN);
-        return 1;
+        goto found;
     }
     MESSAGE( "Can't open configuration file %s or $HOME%s\n",
 	 WINE_INI_GLOBAL, PROFILE_WineIniName );
     return 0;
+
+ found:
+    PROFILE_RegistryLoad( wine_profile_key, f );
+    fclose( f );
+    return 1;
 }
 
 
@@ -1066,7 +1081,6 @@ UINT WINAPI GetProfileIntA( LPCSTR section, LPCSTR entry, INT def_val )
  */
 UINT WINAPI GetProfileIntW( LPCWSTR section, LPCWSTR entry, INT def_val )
 {
-    if (!wininiW) wininiW = HEAP_strdupAtoW( GetProcessHeap(), 0, "win.ini" );
     return GetPrivateProfileIntW( section, entry, def_val, wininiW );
 }
 
@@ -1096,7 +1110,6 @@ INT WINAPI GetProfileStringA( LPCSTR section, LPCSTR entry, LPCSTR def_val,
 INT WINAPI GetProfileStringW( LPCWSTR section, LPCWSTR entry,
 			      LPCWSTR def_val, LPWSTR buffer, UINT len )
 {
-    if (!wininiW) wininiW = HEAP_strdupAtoW( GetProcessHeap(), 0, "win.ini" );
     return GetPrivateProfileStringW( section, entry, def_val,
 				     buffer, len, wininiW );
 }
@@ -1125,7 +1138,6 @@ BOOL WINAPI WriteProfileStringA( LPCSTR section, LPCSTR entry,
 BOOL WINAPI WriteProfileStringW( LPCWSTR section, LPCWSTR entry,
                                      LPCWSTR string )
 {
-    if (!wininiW) wininiW = HEAP_strdupAtoW( GetProcessHeap(), 0, "win.ini" );
     return WritePrivateProfileStringW( section, entry, string, wininiW );
 }
 
@@ -1306,7 +1318,6 @@ INT WINAPI GetProfileSectionA( LPCSTR section, LPSTR buffer, DWORD len )
  */
 INT WINAPI GetProfileSectionW( LPCWSTR section, LPWSTR buffer, DWORD len )
 {
-    if (!wininiW) wininiW = HEAP_strdupAtoW( GetProcessHeap(), 0, "win.ini" );
     return GetPrivateProfileSectionW( section, buffer, len, wininiW );
 }
 
@@ -1442,8 +1453,6 @@ BOOL WINAPI WriteProfileSectionA( LPCSTR section, LPCSTR keys_n_values)
  */
 BOOL WINAPI WriteProfileSectionW( LPCWSTR section, LPCWSTR keys_n_values)
 {
-   if (!wininiW) wininiW = HEAP_strdupAtoW( GetProcessHeap(), 0, "win.ini");
-   
    return (WritePrivateProfileSectionW (section,keys_n_values, wininiW));
 }
 
diff --git a/graphics/psdrv/afm.c b/graphics/psdrv/afm.c
index ce6ed4f74a8137fe1bd7f4aebceb19cd6dcef246..dcd136b2154eaad87a1c3896e423fd35b30cf4e7 100644
--- a/graphics/psdrv/afm.c
+++ b/graphics/psdrv/afm.c
@@ -382,31 +382,6 @@ static void PSDRV_ReencodeCharWidths(AFM *afm)
     return;
 }
 
-/***********************************************************
- *
- *	PSDRV_afmfilesCallback
- *
- * Callback for PROFILE_EnumerateWineIniSection
- * Try to parse AFM file `value', alter the CharWidths field of afm struct if
- * the font is using AdobeStandardEncoding to correspond to WinANSI, then add
- * afm to system font list.
- */
-static void PSDRV_afmfilesCallback(char const *key, char const *value,
-void *user)
-{
-    AFM *afm;
-
-    afm = PSDRV_AFMParse(value);
-    if(afm) {
-        if(afm->EncodingScheme && 
-	   !strcmp(afm->EncodingScheme, "AdobeStandardEncoding")) {
-	    PSDRV_ReencodeCharWidths(afm);
-	}
-        PSDRV_AddAFMtoList(&PSDRV_AFMFontList, afm);
-    }
-    return;
-}
-
 
 /***********************************************************
  *
@@ -437,7 +412,22 @@ static void PSDRV_DumpFontList(void)
  */
 BOOL PSDRV_GetFontMetrics(void)
 {
-    PROFILE_EnumerateWineIniSection( "afmfiles", PSDRV_afmfilesCallback, NULL);
+    int idx = 0;
+    char key[256];
+    char value[256];
+
+    while (PROFILE_EnumWineIniString( "afmfiles", idx++, key, sizeof(key), value, sizeof(value)))
+    {
+        AFM *afm = PSDRV_AFMParse(value);
+        if (afm)
+        {
+            if(afm->EncodingScheme && 
+               !strcmp(afm->EncodingScheme, "AdobeStandardEncoding")) {
+                PSDRV_ReencodeCharWidths(afm);
+            }
+            PSDRV_AddAFMtoList(&PSDRV_AFMFontList, afm);
+        }
+    }
     PSDRV_DumpFontList();
     return TRUE;
 }
diff --git a/graphics/x11drv/xfont.c b/graphics/x11drv/xfont.c
index b596a147d6c1585317055e7cdbf29881bdbd665a..0f2f18e932e9d09c992192699eeabda0cdf22725 100644
--- a/graphics/x11drv/xfont.c
+++ b/graphics/x11drv/xfont.c
@@ -2120,83 +2120,6 @@ static BOOL XFONT_WriteCachedMetrics( int fd, unsigned x_checksum, int x_count,
     return FALSE;
 }
 
-/***********************************************************************
- *           XFONT_CheckIniSection
- *
- * INIT ONLY
- *
- *   Examines wine.conf for old/invalid font entries and recommend changes to
- *   the user.
- *
- *   Revision history
- *        05-Jul-1997 Dave Cuthbert (dacut@ece.cmu.edu)
- *             Original implementation.
- */
-static void XFONT_CheckIniCallback(char const *, char const *, void *);
-
-static char const  *fontmsgprologue =
-"Wine warning:\n"
-"   The following entries in the [fonts] section of the wine.conf file are\n"
-"   obsolete or invalid:\n";
-
-static char const  *fontmsgepilogue =
-"   These entries should be eliminated or updated.\n"
-"   See the documentation/fonts file for more information.\n";
-
-static int XFONT_CheckIniSection(void)
-{
-    int  found = 0;
-
-    PROFILE_EnumerateWineIniSection("Fonts", &XFONT_CheckIniCallback,
-                    (void *)&found);
-    if(found)
-	MESSAGE(fontmsgepilogue);
-
-    return 1;
-}
-
-static void  XFONT_CheckIniCallback(
-    char const  *key,
-    char const  *value,
-    void  *found)
-{
-    /* Ignore any keys that start with potential comment characters "'", '#',
-       or ';'. */
-    if(key[0] == '\'' || key[0] == '#' || key[0] == ';' || key[0] == '\0')
-	return;
-
-    /* Make sure this is a valid key */
-    if((strncasecmp(key, INIAliasSection, 5) == 0) ||
-       (strncasecmp(key, INIIgnoreSection, 6) == 0) ||
-       (strcasecmp( key, INIDefault) == 0) ||
-       (strcasecmp( key, INIDefaultFixed) == 0) ||
-       (strcasecmp( key, INIGlobalMetrics) == 0) ||
-       (strcasecmp( key, INIResolution) == 0) ||
-       (strcasecmp( key, INIDefaultSerif) == 0) ||
-       (strcasecmp( key, INIDefaultSansSerif) ==0) )
-    {
-	/* Valid key; make sure the value doesn't contain a wildcard */
-	if(strchr(value, '*')) {
-	    if(*(int *)found == 0) {
-		MESSAGE(fontmsgprologue);
-		++*(int *)found;
-	    }
-	    MESSAGE("     %s=%s [no wildcards allowed]\n", key, value);
-	}
-    }
-    else {
-	/* Not a valid key */
-	if(*(int *)found == 0) {
-	    MESSAGE(fontmsgprologue);
-	    ++*(int *)found;
-	}
-	
-	MESSAGE("     %s=%s [obsolete]\n", key, value);
-    }
-
-    return;
-}
-
 /***********************************************************************
  *           XFONT_GetPointResolution()
  *
@@ -2631,8 +2554,6 @@ BOOL X11DRV_FONT_Init( DeviceCaps* pDevCaps )
   int       i,res, x_count, fd, buf_size;
   char      *buffer;
 
-  XFONT_CheckIniSection();
-
   res = XFONT_GetPointResolution( pDevCaps );
       
   x_pattern = TSXListFonts(display, "*", MAX_FONTS, &x_count );
diff --git a/include/console.h b/include/console.h
index a3c3afd25ba3caf1c0441cbb832c317f05e8d4f3..82c23e6fac550ac5a7fdcd3f8a67de842309f45a 100644
--- a/include/console.h
+++ b/include/console.h
@@ -58,7 +58,6 @@ typedef struct CONSOLE_DRIVER
    
    /* Other data */
    int norefresh;
-   char *driver_list;
    FILE *console_out;
    FILE *console_in;
    int x_res;
@@ -69,7 +68,6 @@ typedef struct CONSOLE_DRIVER
 extern CONSOLE_device driver; /* Global driver struct */
 
 /* Generic defines */
-int  CONSOLE_Init(char *drivers);
 void CONSOLE_Close(void);
 void CONSOLE_Write(char out, int fg_color, int bg_color, int attribute);
 void CONSOLE_MoveCursor(char row, char col);
diff --git a/include/main.h b/include/main.h
index 58db6c957d5e87d4083ad2a635cf15d151585e43..9265c4e10365cf8a589b07e00489880548e211e9 100644
--- a/include/main.h
+++ b/include/main.h
@@ -15,7 +15,6 @@ extern int MAIN_GetLanguageID(char*lang, char*country, char*charset, char*dialec
 extern BOOL MAIN_ParseDebugOptions(char *options);
 
 extern void MAIN_ParseLanguageOption( char *arg );
-extern void MAIN_ParseModeOption( char *arg );
 
 extern BOOL RELAY_Init(void);
 extern void THUNK_InitCallout(void);
diff --git a/include/options.h b/include/options.h
index 072055c97e5f611f9d0c29ab44bd5595c25a6c41..7a7396d001fb15ba8cbaaf4fd2b2e05eb455693b 100644
--- a/include/options.h
+++ b/include/options.h
@@ -51,13 +51,6 @@ typedef struct
 
 extern const WINE_LANGUAGE_DEF Languages[];
 
-/* Supported modes */
-typedef enum
-{
-    MODE_STANDARD,
-    MODE_ENHANCED
-} WINE_MODE;
-
 struct options
 {
     int  *argc;
@@ -66,15 +59,10 @@ struct options
     char * programName;     /* To use when loading resources */
     char  *dllFlags;        /* -dll flags (hack for Winelib support) */
     int    usePrivateMap;
-    int    useFixedMap;
     int    synchronous;     /* X synchronous mode */
-    int    backingstore;    /* Use backing store */
-    short  cmdShow;
     int    debug;
     int    failReadOnly;    /* Opening a read only file will fail
 			       if write access is requested */
-    WINE_MODE mode;         /* Start Wine in selected mode
-			       (standard/enhanced) */
     WINE_LANGUAGE language; /* Current language */
     int    managed;	    /* Managed windows */
     int    perfectGraphics; /* Favor correctness over speed for graphics */
@@ -95,14 +83,10 @@ extern int PROFILE_LoadWineIni(void);
 extern void PROFILE_UsageWineIni(void);
 extern int PROFILE_GetWineIniString( const char *section, const char *key_name,
                                      const char *def, char *buffer, int len );
-extern int PROFILE_GetWineIniInt( const char *section, const char *key_name,
-                                  int def );
-extern int PROFILE_EnumerateWineIniSection(
-    char const *section,
-    void (*callback)(char const *key, char const *name, void *user),
-    void *userptr );		     
-extern int PROFILE_GetWineIniBool( char const *section, char const *key_name,
-				   int def );
+extern BOOL PROFILE_EnumWineIniString( const char *section, int index,
+                                       char *name, int name_len, char *buffer, int len );
+extern int PROFILE_GetWineIniInt( const char *section, const char *key_name, int def );
+extern int PROFILE_GetWineIniBool( char const *section, char const *key_name, int def );
 extern char* PROFILE_GetStringItem( char* );
 
 /* Version functions */
diff --git a/misc/main.c b/misc/main.c
index 1db31c5167c03406f22832f68d483e83768192a8..7ac24eaad40db850626dc51ea252589781f0a441 100644
--- a/misc/main.c
+++ b/misc/main.c
@@ -94,13 +94,9 @@ struct options Options =
     NULL,           /* programName */
     NULL,           /* dllFlags */
     FALSE,          /* usePrivateMap */
-    FALSE,          /* useFixedMap */
     FALSE,          /* synchronous */
-    FALSE,          /* backing store */
-    SW_SHOWNORMAL,  /* cmdShow */
     FALSE,
     FALSE,          /* failReadOnly */
-    MODE_ENHANCED,  /* Enhanced mode */
 #ifdef DEFAULT_LANG
     DEFAULT_LANG,   /* Default language */
 #else
@@ -122,9 +118,7 @@ static const char szUsage[] =
   "Usage:  %s [options] \"program_name [arguments]\"\n"
   "\n"
   "Options:\n"
-  "    -backingstore   Turn on backing store\n"
   "    -config name    Specify config file to use\n"
-  "    -console driver Select which driver(s) to use for the console\n"
   "    -debug          Enter debugger before starting application\n"
   "    -debugmsg name  Turn debugging-messages on or off\n"
   "    -depth n        Change the depth to use for multiple-depth screens\n"
@@ -132,13 +126,10 @@ static const char szUsage[] =
   "    -display name   Use the specified display\n"
   "    -dll name       Enable or disable built-in DLLs\n"
   "    -failreadonly   Read only files may not be opened in write mode\n"
-  "    -fixedmap       Use a \"standard\" color map\n"
   "    -help           Show this help message\n"
-  "    -iconic         Start as an icon\n"
   "    -language xx    Set the language (one of Br,Ca,Cs,Cy,Da,De,En,Eo,Es,Fi,Fr,Ga,Gd,Gv\n"
   "                    Hu,It,Ko,Kw,Nl,No,Pl,Pt,Sv,Ru,Wa)\n"
   "    -managed        Allow the window manager to manage created windows\n"
-  "    -mode mode      Start Wine in a particular mode (standard or enhanced)\n"
   "    -name name      Set the application name\n"
   "    -nodga          Disable XFree86 DGA extensions\n"
   "    -noxshm         Disable XSHM extension\n"
@@ -718,23 +709,6 @@ void MAIN_ParseLanguageOption( char *arg )
 }
 
 
-/***********************************************************************
- *           MAIN_ParseModeOption
- *
- * Parse -mode option.
- */
-void MAIN_ParseModeOption( char *arg )
-{
-    if (!lstrcmpiA("enhanced", arg)) Options.mode = MODE_ENHANCED;
-    else if (!lstrcmpiA("standard", arg)) Options.mode = MODE_STANDARD;
-    else
-    {
-        MESSAGE( "Invalid mode '%s' specified.\n", arg);
-        MESSAGE( "Valid modes are: 'standard', 'enhanced' (default).\n");
-	ExitProcess(1);
-    }
-}
-
 /***********************************************************************
  *           MAIN_ParseOptions
  *
diff --git a/misc/version.c b/misc/version.c
index 19851895a02c0fae88097c8acb5102535ae92f72..7a4a223239f253a1fcb22c9677ffd6d11a10fc2f 100644
--- a/misc/version.c
+++ b/misc/version.c
@@ -471,22 +471,7 @@ DWORD WINAPI GetWinFlags16(void)
   GetSystemInfo(&si);
 
   /* There doesn't seem to be any Pentium flag.  */
-  result = cpuflags[MIN (si.wProcessorLevel, 4)];
-
-  switch(Options.mode)
-  {
-  case MODE_STANDARD:
-      result |= WF_STANDARD | WF_PMODE | WF_80x87;
-      break;
-
-  case MODE_ENHANCED:
-      result |= WF_ENHANCED | WF_PMODE | WF_80x87 | WF_PAGING;
-      break;
-
-  default:
-      ERR("Unknown mode set? This shouldn't happen. Check GetWinFlags()!\n");
-      break;
-  }
+  result = cpuflags[MIN (si.wProcessorLevel, 4)] | WF_ENHANCED | WF_PMODE | WF_80x87 | WF_PAGING;
   if (si.wProcessorLevel >= 4) result |= WF_HASCPUID;
   ovi.dwOSVersionInfoSize = sizeof(ovi);
   GetVersionExA(&ovi);
diff --git a/windows/x11drv/main.c b/windows/x11drv/main.c
index bbc752c18be57cba10133e1648fe0b19bed942df..7cacbc2b797ecad661394c155d6a8ba6649e4ce2 100644
--- a/windows/x11drv/main.c
+++ b/windows/x11drv/main.c
@@ -20,7 +20,6 @@
 #include <unistd.h>
 
 #include "clipboard.h"
-#include "console.h"
 #include "debugtools.h"
 #include "desktop.h"
 #include "keyboard.h"
@@ -49,7 +48,6 @@ void X11DRV_USER_RestoreSetup(void);
 
 static XrmOptionDescRec optionsTable[] =
 {
-    { "-backingstore",  ".backingstore",    XrmoptionNoArg,  (caddr_t)"on" },
     { "-desktop",       ".desktop",         XrmoptionSepArg, (caddr_t)NULL },
     { "-depth",         ".depth",           XrmoptionSepArg, (caddr_t)NULL },
     { "-display",       ".display",         XrmoptionSepArg, (caddr_t)NULL },
@@ -58,20 +56,17 @@ static XrmOptionDescRec optionsTable[] =
     { "-name",          ".name",            XrmoptionSepArg, (caddr_t)NULL },
     { "-perfect",       ".perfect",         XrmoptionNoArg,  (caddr_t)"on" },
     { "-privatemap",    ".privatemap",      XrmoptionNoArg,  (caddr_t)"on" },
-    { "-fixedmap",      ".fixedmap",        XrmoptionNoArg,  (caddr_t)"on" },
     { "-synchronous",   ".synchronous",     XrmoptionNoArg,  (caddr_t)"on" },
     { "-debug",         ".debug",           XrmoptionNoArg,  (caddr_t)"on" },
     { "-debugmsg",      ".debugmsg",        XrmoptionSepArg, (caddr_t)NULL },
     { "-dll",           ".dll",             XrmoptionSepArg, (caddr_t)NULL },
     { "-failreadonly",  ".failreadonly",    XrmoptionNoArg,  (caddr_t)"on" },
-    { "-mode",          ".mode",            XrmoptionSepArg, (caddr_t)NULL },
     { "-managed",       ".managed",         XrmoptionNoArg,  (caddr_t)"off"},
     { "-winver",        ".winver",          XrmoptionSepArg, (caddr_t)NULL },
     { "-config",        ".config",          XrmoptionSepArg, (caddr_t)NULL },
     { "-nodga",         ".nodga",           XrmoptionNoArg,  (caddr_t)"off"},
     { "-noxshm",        ".noxshm",          XrmoptionNoArg,  (caddr_t)"off"},
     { "-dxgrab",        ".dxgrab",          XrmoptionNoArg,  (caddr_t)"on" },
-    { "-console",       ".console",         XrmoptionSepArg, (caddr_t)NULL },
     { "-dosver",        ".dosver",          XrmoptionSepArg, (caddr_t)NULL }
 };
 
@@ -229,16 +224,10 @@ void X11DRV_USER_ParseOptions(int *argc, char *argv[])
 		     Options.programName, argc, argv );
   
   /* Get all options */
-  if (X11DRV_USER_GetResource( db, ".iconic", &value ))
-    Options.cmdShow = SW_SHOWMINIMIZED;
   if (X11DRV_USER_GetResource( db, ".privatemap", &value ))
     Options.usePrivateMap = TRUE;
-  if (X11DRV_USER_GetResource( db, ".fixedmap", &value ))
-    Options.useFixedMap = TRUE;
   if (X11DRV_USER_GetResource( db, ".synchronous", &value ))
     Options.synchronous = TRUE;
-  if (X11DRV_USER_GetResource( db, ".backingstore", &value ))
-    Options.backingstore = TRUE;	
   if (X11DRV_USER_GetResource( db, ".debug", &value ))
     Options.debug = TRUE;
   if (X11DRV_USER_GetResource( db, ".failreadonly", &value ))
@@ -253,8 +242,6 @@ void X11DRV_USER_ParseOptions(int *argc, char *argv[])
     MAIN_ParseLanguageOption( (char *)value.addr );
   if (X11DRV_USER_GetResource( db, ".managed", &value))
     Options.managed = TRUE;
-  if (X11DRV_USER_GetResource( db, ".mode", &value))
-    MAIN_ParseModeOption( (char *)value.addr );
   if (X11DRV_USER_GetResource( db, ".debugoptions", &value))
     MAIN_ParseDebugOptions((char*)value.addr);
   if (X11DRV_USER_GetResource( db, ".debugmsg", &value))
@@ -284,10 +271,6 @@ void X11DRV_USER_ParseOptions(int *argc, char *argv[])
     Options.noXSHM = TRUE;
   if (X11DRV_USER_GetResource( db, ".dxgrab", &value))
     Options.DXGrab = TRUE;
-  if (X11DRV_USER_GetResource( db, ".console", &value))
-      driver.driver_list = xstrdup((char *)value.addr);
-  else
-      driver.driver_list = CONSOLE_DEFAULT_DRIVER;
 }
 
 /***********************************************************************
diff --git a/windows/x11drv/wnd.c b/windows/x11drv/wnd.c
index 14ca4125ba99e0b9c3170e0625de28a9f48e8dcd..c37d3d856cbe2854b71d867bf09e351bf92151c1 100644
--- a/windows/x11drv/wnd.c
+++ b/windows/x11drv/wnd.c
@@ -216,7 +216,7 @@ BOOL X11DRV_WND_CreateWindow(WND *wndPtr, CLASS *classPtr, CREATESTRUCTA *cs, BO
 
       win_attr.bit_gravity   = (classPtr->style & (CS_VREDRAW | CS_HREDRAW)) ? BGForget : BGNorthWest;
       win_attr.colormap      = X11DRV_PALETTE_PaletteXColormap;
-      win_attr.backing_store = Options.backingstore ? WhenMapped : NotUseful;
+      win_attr.backing_store = NotUseful;
       win_attr.save_under    = ((classPtr->style & CS_SAVEBITS) != 0);
       win_attr.cursor        = X11DRV_MOUSE_XCursor;