Cleaned up some more USER dependencies.

diff --git a/dlls/ddraw/ddraw/dga.c b/dlls/ddraw/ddraw/dga.c
index 1a98547..128fa04 100644
--- a/dlls/ddraw/ddraw/dga.c
+++ b/dlls/ddraw/ddraw/dga.c
@@ -35,7 +35,6 @@
 #include "debugtools.h"
 #include "message.h"
 #include "options.h"
-#include "monitor.h"
 
 #define RESTORE_SIGNALS
 
@@ -550,8 +549,8 @@
 	}
       }
       
-      ddsfd.dwWidth = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
-      ddsfd.dwHeight = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
+      ddsfd.dwWidth = GetSystemMetrics(SM_CXSCREEN);
+      ddsfd.dwHeight = GetSystemMetrics(SM_CYSCREEN);
       TRACE(" enumerating (%ldx%ldx%d)\n",ddsfd.dwWidth,ddsfd.dwHeight,depths[i]);
       if (!modescb(&ddsfd,context)) return DD_OK;
       
diff --git a/dlls/ddraw/ddraw/dga2.c b/dlls/ddraw/ddraw/dga2.c
index 2c60201..0229dc1 100644
--- a/dlls/ddraw/ddraw/dga2.c
+++ b/dlls/ddraw/ddraw/dga2.c
@@ -19,7 +19,6 @@
 #include "debugtools.h"
 #include "message.h"
 #include "options.h"
-#include "monitor.h"
 
 DEFAULT_DEBUG_CHANNEL(ddraw);
 
@@ -89,8 +88,8 @@
     /* Get the screen dimensions as seen by Wine.
      * In that case, it may be better to ignore the -desktop mode and return the
      * real screen size => print a warning */
-    This->d->height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
-    This->d->width = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
+    This->d->height = GetSystemMetrics(SM_CYSCREEN);
+    This->d->width = GetSystemMetrics(SM_CXSCREEN);
     ddpriv->DGA.fb_addr = ddpriv->dev->data;
     ddpriv->DGA.fb_memsize = (ddpriv->dev->mode.imageWidth *
 			      ddpriv->dev->mode.imageHeight *
diff --git a/dlls/ddraw/ddraw/main.c b/dlls/ddraw/ddraw/main.c
index ec4861e..5d38dce 100644
--- a/dlls/ddraw/ddraw/main.c
+++ b/dlls/ddraw/ddraw/main.c
@@ -24,7 +24,6 @@
 #include "debugtools.h"
 #include "message.h"
 #include "options.h"
-#include "monitor.h"
 
 DEFAULT_DEBUG_CHANNEL(ddraw);
 
@@ -352,8 +351,8 @@
 	  }
 	}
 
-	ddsfd.dwWidth = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
-	ddsfd.dwHeight = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
+	ddsfd.dwWidth = GetSystemMetrics(SM_CXSCREEN);
+	ddsfd.dwHeight = GetSystemMetrics(SM_CYSCREEN);
 	TRACE(" enumerating (%ldx%ldx%d)\n",ddsfd.dwWidth,ddsfd.dwHeight,depths[i]);
 	if (!modescb(&ddsfd,context)) return DD_OK;
 
diff --git a/dlls/ddraw/ddraw/x11.c b/dlls/ddraw/ddraw/x11.c
index 41f525b..e01126a 100644
--- a/dlls/ddraw/ddraw/x11.c
+++ b/dlls/ddraw/ddraw/x11.c
@@ -23,7 +23,6 @@
 #include "debugtools.h"
 #include "message.h"
 #include "options.h"
-#include "monitor.h"
 
 DEFAULT_DEBUG_CHANNEL(ddraw);
 
@@ -676,8 +675,8 @@
     ddsfd.dwFlags |= DDSD_REFRESHRATE;
     ddsfd.u.dwRefreshRate = 60;
   }
-  maxWidth = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
-  maxHeight = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
+  maxWidth = GetSystemMetrics(SM_CXSCREEN);
+  maxHeight = GetSystemMetrics(SM_CYSCREEN);
   
   vi = TSXGetVisualInfo(display, VisualNoMask, &vt, &nvisuals);
   pf = TSXListPixmapFormats(display, &npixmap);
diff --git a/dlls/ddraw/dga.c b/dlls/ddraw/dga.c
index d5fbae8..511d66a 100644
--- a/dlls/ddraw/dga.c
+++ b/dlls/ddraw/dga.c
@@ -37,7 +37,6 @@
 #include "spy.h"
 #include "message.h"
 #include "options.h"
-#include "monitor.h"
 
 #include "dga_private.h"
 
@@ -147,8 +146,8 @@
      * In that case, it may be better to ignore the -desktop mode and
      * return the real screen size => print a warning
      */
-    ddraw->d->height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
-    ddraw->d->width = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
+    ddraw->d->height = GetSystemMetrics(SM_CYSCREEN);
+    ddraw->d->width = GetSystemMetrics(SM_CXSCREEN);
     if ((ddraw->d->height != height) || (ddraw->d->width  != width))
       WARN("You seem to be running in -desktop mode. This may prove dangerous in DGA mode...\n");
     dgpriv->fb_addr		= addr;
diff --git a/dlls/ddraw/dga2.c b/dlls/ddraw/dga2.c
index 4964402..f72a4ca 100644
--- a/dlls/ddraw/dga2.c
+++ b/dlls/ddraw/dga2.c
@@ -26,7 +26,6 @@
 #include "spy.h"
 #include "message.h"
 #include "options.h"
-#include "monitor.h"
 
 #include "dga2_private.h"
 
@@ -140,9 +139,9 @@
 #undef XX
 	DPRINTF("\n");
       }
-      if ((MONITOR_GetHeight(&MONITOR_PrimaryMonitor) == modes[i].viewportHeight) &&
-	  (MONITOR_GetWidth(&MONITOR_PrimaryMonitor) == modes[i].viewportWidth) &&
-	  (MONITOR_GetDepth(&MONITOR_PrimaryMonitor) == modes[i].depth)
+      if ((GetSystemMetrics(SM_CYSCREEN) == modes[i].viewportHeight) &&
+	  (GetSystemMetrics(SM_CXSCREEN) == modes[i].viewportWidth) &&
+	  (X11DRV_GetDepth() == modes[i].depth)
 	  ) {
 	mode_to_use = modes[i].num;
       }
diff --git a/dlls/ddraw/direct3d/main.c b/dlls/ddraw/direct3d/main.c
index fd9ed2f..0d4b594 100644
--- a/dlls/ddraw/direct3d/main.c
+++ b/dlls/ddraw/direct3d/main.c
@@ -11,7 +11,6 @@
 #include "d3d.h"
 #include "message.h"
 #include "options.h"
-#include "monitor.h"
 #include "debugtools.h"
 
 #include "d3d_private.h"
diff --git a/dlls/ddraw/direct3d/mesa.c b/dlls/ddraw/direct3d/mesa.c
index f678cd1..a37071d 100644
--- a/dlls/ddraw/direct3d/mesa.c
+++ b/dlls/ddraw/direct3d/mesa.c
@@ -11,7 +11,6 @@
 #include "d3d.h"
 #include "message.h"
 #include "options.h"
-#include "monitor.h"
 #include "debugtools.h"
 
 #include "mesa_private.h"
diff --git a/dlls/ddraw/helper.c b/dlls/ddraw/helper.c
index a867cc6..6a30124 100644
--- a/dlls/ddraw/helper.c
+++ b/dlls/ddraw/helper.c
@@ -26,7 +26,6 @@
 #include "spy.h"
 #include "message.h"
 #include "options.h"
-#include "monitor.h"
 
 DEFAULT_DEBUG_CHANNEL(ddraw);
 
diff --git a/dlls/ddraw/main.c b/dlls/ddraw/main.c
index 251ffd9..eeb25f5 100644
--- a/dlls/ddraw/main.c
+++ b/dlls/ddraw/main.c
@@ -22,7 +22,6 @@
 #include "d3d.h"
 #include "debugtools.h"
 #include "message.h"
-#include "monitor.h"
 
 /* This for all the enumeration and creation of D3D-related objects */
 #include "ddraw_private.h"
diff --git a/dlls/ddraw/x11.c b/dlls/ddraw/x11.c
index 4fd2039..a5fb08e 100644
--- a/dlls/ddraw/x11.c
+++ b/dlls/ddraw/x11.c
@@ -13,7 +13,6 @@
 
 #include "winerror.h"
 #include "options.h"
-#include "monitor.h"
 #include "debugtools.h"
 #include "ddraw.h"
 
@@ -80,8 +79,8 @@
     case 0: MESSAGE("Conversion needed from %d.\n",depth); break;
     }
 
-    ddraw->d->height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
-    ddraw->d->width = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
+    ddraw->d->height = GetSystemMetrics(SM_CYSCREEN);
+    ddraw->d->width = GetSystemMetrics(SM_CXSCREEN);
 #ifdef HAVE_LIBXXSHM
     /* Test if XShm is available. */
     if ((x11priv->xshm_active = DDRAW_XSHM_Available())) {
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index 4ce5ad8..0a032fd 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -45,7 +45,6 @@
 #include "user.h"
 #include "message.h"
 #include "mouse.h"
-#include "sysmetrics.h"
 #include "winbase.h"
 #include "winerror.h"
 #include "windef.h"
diff --git a/dlls/gdi/wing.c b/dlls/gdi/wing.c
index 595f09c..490c517 100644
--- a/dlls/gdi/wing.c
+++ b/dlls/gdi/wing.c
@@ -14,11 +14,10 @@
 #include "bitmap.h"
 #include "debugtools.h"
 #include "ldt.h"
-#include "monitor.h"
 #include "palette.h"
 #include "windef.h"
 
-DEFAULT_DEBUG_CHANNEL(wing)
+DEFAULT_DEBUG_CHANNEL(wing);
 
 
 typedef enum WING_DITHER_TYPE
@@ -53,24 +52,26 @@
  */
 BOOL16 WINAPI WinGRecommendDIBFormat16(BITMAPINFO *bmpi)
 {
+    HDC hdc;
     TRACE("(%p)\n", bmpi);
     if (!bmpi)
 	return FALSE;
 
+    hdc = CreateDCA( "DISPLAY", NULL, NULL, NULL );
     bmpi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
     bmpi->bmiHeader.biWidth = 320;
     bmpi->bmiHeader.biHeight = -1;
-    bmpi->bmiHeader.biPlanes = 1;
-    bmpi->bmiHeader.biBitCount = MONITOR_GetDepth(&MONITOR_PrimaryMonitor);
+    bmpi->bmiHeader.biPlanes = GetDeviceCaps( hdc, PLANES );
+    bmpi->bmiHeader.biBitCount = GetDeviceCaps( hdc, BITSPIXEL );
     bmpi->bmiHeader.biCompression = BI_RGB;
     bmpi->bmiHeader.biSizeImage = 0;
     bmpi->bmiHeader.biXPelsPerMeter = 0;
     bmpi->bmiHeader.biYPelsPerMeter = 0;
     bmpi->bmiHeader.biClrUsed = 0;
     bmpi->bmiHeader.biClrImportant = 0;
-
+    DeleteDC(hdc);
     return TRUE;
-  }
+}
 
 /***********************************************************************
  *        WinGCreateBitmap16    (WING.1003)
@@ -82,7 +83,7 @@
     TRACE(": create %ldx%ldx%d bitmap\n", bmpi->bmiHeader.biWidth,
 	  bmpi->bmiHeader.biHeight, bmpi->bmiHeader.biPlanes);
     return CreateDIBSection16(hdc, bmpi, 0, bits, 0, 0);
-		} 
+}
 
 /***********************************************************************
  *  WinGGetDIBPointer   (WING.1004)
@@ -129,8 +130,11 @@
  */
 HPALETTE16 WINAPI WinGCreateHalfTonePalette16(void)
 {
+    HDC hdc = CreateCompatibleDC(0);
+    HPALETTE16 ret = CreateHalftonePalette16(hdc);
     TRACE("(void)\n");
-    return CreateHalftonePalette16(GetDC16(0));
+    DeleteDC(hdc);
+    return ret;
 }
 
 /***********************************************************************
diff --git a/dlls/shell32/brsfolder.c b/dlls/shell32/brsfolder.c
index 3213d69..4aec983 100644
--- a/dlls/shell32/brsfolder.c
+++ b/dlls/shell32/brsfolder.c
@@ -5,7 +5,6 @@
 #include "heap.h"
 #include "dlgs.h"
 #include "win.h"
-#include "sysmetrics.h"
 #include "debugtools.h"
 #include "winreg.h"
 #include "authors.h"
@@ -22,7 +21,7 @@
 #include "shell32_main.h"
 #include "shellapi.h"
 
-DEFAULT_DEBUG_CHANNEL(shell)
+DEFAULT_DEBUG_CHANNEL(shell);
 
 #define		IDD_TREEVIEW 99
 
diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c
index 3b247b7..7020eba 100644
--- a/dlls/shell32/shell32_main.c
+++ b/dlls/shell32/shell32_main.c
@@ -15,7 +15,6 @@
 #include "heap.h"
 #include "dlgs.h"
 #include "ldt.h"
-#include "sysmetrics.h"
 #include "debugtools.h"
 #include "winreg.h"
 #include "authors.h"
diff --git a/dlls/ttydrv/ttydrv_main.c b/dlls/ttydrv/ttydrv_main.c
index 2ac0abe..de749ce 100644
--- a/dlls/ttydrv/ttydrv_main.c
+++ b/dlls/ttydrv/ttydrv_main.c
@@ -11,7 +11,6 @@
 #include "clipboard.h"
 #include "gdi.h"
 #include "message.h"
-#include "monitor.h"
 #include "user.h"
 #include "win.h"
 #include "debugtools.h"
@@ -53,6 +52,8 @@
 
 int cell_width = 8;
 int cell_height = 8;
+int screen_rows = 50;  /* default value */
+int screen_cols = 80;  /* default value */
 WINDOW *root_window;
 
 
@@ -61,8 +62,6 @@
  */
 static void process_attach(void)
 {
-    int rows, cols;
-
     USER_Driver      = &user_driver;
     CLIPBOARD_Driver = &TTYDRV_CLIPBOARD_Driver;
     WND_Driver       = &TTYDRV_WND_Driver;
@@ -73,18 +72,9 @@
         werase(root_window);
         wrefresh(root_window);
     }
-    getmaxyx(root_window, rows, cols);
-#else  /* WINE_CURSES */
-    rows = 60; /* FIXME: Hardcoded */
-    cols = 80; /* FIXME: Hardcoded */
+    getmaxyx(root_window, screen_rows, screen_cols);
 #endif  /* WINE_CURSES */
 
-    MONITOR_PrimaryMonitor.rect.left   = 0;
-    MONITOR_PrimaryMonitor.rect.top    = 0;
-    MONITOR_PrimaryMonitor.rect.right  = cell_width * cols;
-    MONITOR_PrimaryMonitor.rect.bottom = cell_height * rows;
-    MONITOR_PrimaryMonitor.depth       = 1;
-
     TTYDRV_GDI_Initialize();
 
     /* load display.dll */
diff --git a/dlls/x11drv/x11drv_main.c b/dlls/x11drv/x11drv_main.c
index 39a2a1c..1280141 100644
--- a/dlls/x11drv/x11drv_main.c
+++ b/dlls/x11drv/x11drv_main.c
@@ -23,7 +23,6 @@
 #include "clipboard.h"
 #include "debugtools.h"
 #include "gdi.h"
-#include "monitor.h"
 #include "options.h"
 #include "user.h"
 #include "win.h"
@@ -69,7 +68,9 @@
 Display *display;
 Screen *screen;
 Visual *visual;
-int screen_depth;
+unsigned int screen_width;
+unsigned int screen_height;
+unsigned int screen_depth;
 Window root_window;
 
 /***********************************************************************
@@ -176,8 +177,8 @@
 #endif /* HAVE_OPENGL */    
 
     flags = TSXParseGeometry( geometry, &x, &y, &width, &height );
-    MONITOR_PrimaryMonitor.rect.right  = width;
-    MONITOR_PrimaryMonitor.rect.bottom = height;
+    screen_width  = width;
+    screen_height = height;
 
     /* Create window */
     win_attr.background_pixel = BlackPixel(display, 0);
@@ -292,11 +293,8 @@
 
     if (Options.synchronous) XSetErrorHandler( error_handler );
 
-    MONITOR_PrimaryMonitor.rect.left   = 0;
-    MONITOR_PrimaryMonitor.rect.top    = 0;
-    MONITOR_PrimaryMonitor.rect.right  = WidthOfScreen( screen );
-    MONITOR_PrimaryMonitor.rect.bottom = HeightOfScreen( screen );
-    MONITOR_PrimaryMonitor.depth       = screen_depth;
+    screen_width  = WidthOfScreen( screen );
+    screen_height = HeightOfScreen( screen );
 
     if (Options.desktopGeometry)
     {
diff --git a/graphics/painting.c b/graphics/painting.c
index 3cfe190..00f45d8 100644
--- a/graphics/painting.c
+++ b/graphics/painting.c
@@ -10,7 +10,6 @@
 #include "dc.h"
 #include "bitmap.h"
 #include "heap.h"
-#include "monitor.h"
 #include "cache.h"
 #include "region.h"
 #include "path.h"
diff --git a/graphics/ttydrv/dc.c b/graphics/ttydrv/dc.c
index cf50ebe..7c9a8d9 100644
--- a/graphics/ttydrv/dc.c
+++ b/graphics/ttydrv/dc.c
@@ -9,12 +9,11 @@
 #include "gdi.h"
 #include "bitmap.h"
 #include "dc.h"
-#include "monitor.h"
 #include "ttydrv.h"
 #include "winbase.h"
 #include "debugtools.h"
 
-DEFAULT_DEBUG_CHANNEL(ttydrv)
+DEFAULT_DEBUG_CHANNEL(ttydrv);
 
 /**********************************************************************/
 
@@ -62,15 +61,14 @@
     GDI_HEAP_UNLOCK( dc->w.hBitmap );
   } else {
     physDev->window = TTYDRV_GetRootWindow();
-    physDev->cellWidth = TTYDRV_GetCellWidth();
-    physDev->cellHeight = TTYDRV_GetCellHeight();
+    physDev->cellWidth = cell_width;
+    physDev->cellHeight = cell_height;
     
-    dc->w.bitsPerPixel = MONITOR_GetDepth(&MONITOR_PrimaryMonitor);
-    
+    dc->w.bitsPerPixel       = 1;
     dc->w.totalExtent.left   = 0;
     dc->w.totalExtent.top    = 0;
-    dc->w.totalExtent.right  = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
-    dc->w.totalExtent.bottom = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
+    dc->w.totalExtent.right  = cell_width * screen_cols;
+    dc->w.totalExtent.bottom = cell_height * screen_rows;
     dc->w.hVisRgn            = CreateRectRgnIndirect( &dc->w.totalExtent );    
   }
 
diff --git a/graphics/x11drv/init.c b/graphics/x11drv/init.c
index d013535..521fff0 100644
--- a/graphics/x11drv/init.c
+++ b/graphics/x11drv/init.c
@@ -15,11 +15,10 @@
 #include "debugtools.h"
 #include "ldt.h"
 #include "local.h"
-#include "monitor.h"
 #include "winnt.h"
 #include "x11drv.h"
 
-DEFAULT_DEBUG_CHANNEL(x11drv)
+DEFAULT_DEBUG_CHANNEL(x11drv);
 
 static BOOL X11DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
                                LPCSTR output, const DEVMODEA* initData );
@@ -189,12 +188,12 @@
 	  WidthOfScreen(X11DRV_GetXScreen()), WidthMMOfScreen(X11DRV_GetXScreen()) );
 #endif
 
-    X11DRV_DevCaps.version = 0x300;
-    X11DRV_DevCaps.horzSize = WidthMMOfScreen(X11DRV_GetXScreen()) * MONITOR_GetWidth(&MONITOR_PrimaryMonitor) / WidthOfScreen(X11DRV_GetXScreen());
-    X11DRV_DevCaps.vertSize = HeightMMOfScreen(X11DRV_GetXScreen()) * MONITOR_GetHeight(&MONITOR_PrimaryMonitor) / HeightOfScreen(X11DRV_GetXScreen());
-    X11DRV_DevCaps.horzRes = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
-    X11DRV_DevCaps.vertRes = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
-    X11DRV_DevCaps.bitsPixel = X11DRV_GetDepth();
+    X11DRV_DevCaps.version   = 0x300;
+    X11DRV_DevCaps.horzSize  = WidthMMOfScreen(screen) * screen_width / WidthOfScreen(screen);
+    X11DRV_DevCaps.vertSize  = HeightMMOfScreen(screen) * screen_height / HeightOfScreen(screen);
+    X11DRV_DevCaps.horzRes   = screen_width;
+    X11DRV_DevCaps.vertRes   = screen_height;
+    X11DRV_DevCaps.bitsPixel = screen_depth;
  
     /* Resolution will be adjusted during the font init */
 
@@ -261,12 +260,12 @@
     {
         physDev->drawable  = X11DRV_GetXRootWindow();
         physDev->gc        = TSXCreateGC( display, physDev->drawable, 0, NULL );
-        dc->w.bitsPerPixel = X11DRV_GetDepth();
+        dc->w.bitsPerPixel = screen_depth;
 
         dc->w.totalExtent.left   = 0;
         dc->w.totalExtent.top    = 0;
-        dc->w.totalExtent.right  = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
-        dc->w.totalExtent.bottom = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
+        dc->w.totalExtent.right  = screen_width;
+        dc->w.totalExtent.bottom = screen_height;
         dc->w.hVisRgn            = CreateRectRgnIndirect( &dc->w.totalExtent );
     }
 
diff --git a/include/monitor.h b/include/monitor.h
deleted file mode 100644
index e7c95c5..0000000
--- a/include/monitor.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Monitor definitions
- *
- */
-
-#ifndef __WINE_MONITOR_H
-#define __WINE_MONITOR_H
-
-#include "windef.h"
-
-typedef struct tagMONITOR 
-{
-    RECT rect;
-    int  depth;
-} MONITOR;
-
-extern MONITOR MONITOR_PrimaryMonitor;
-
-static int inline MONITOR_GetWidth(MONITOR *pMonitor)
-{
-    return pMonitor->rect.right - pMonitor->rect.left;
-}
-
-static int inline MONITOR_GetHeight(MONITOR *pMonitor)
-{
-    return pMonitor->rect.bottom - pMonitor->rect.top;
-}
-
-static int inline MONITOR_GetDepth(MONITOR *pMonitor)
-{
-    return pMonitor->depth;
-}
-
-#endif /* __WINE_MONITOR_H */
diff --git a/include/sysmetrics.h b/include/sysmetrics.h
index fa15d81..ad922d4 100644
--- a/include/sysmetrics.h
+++ b/include/sysmetrics.h
@@ -10,4 +10,8 @@
 extern void SYSMETRICS_Init(void);  /* sysmetrics.c */
 extern void SYSCOLOR_Init(void);  /* syscolor.c */
 
+/* Wine extensions */
+#define SM_WINE_BPP (SM_CMETRICS+1)  /* screen bpp */
+#define SM_WINE_CMETRICS SM_WINE_BPP
+
 #endif  /* __WINE_SYSMETRICS_H */
diff --git a/include/ttydrv.h b/include/ttydrv.h
index 58412b4..c993cb2 100644
--- a/include/ttydrv.h
+++ b/include/ttydrv.h
@@ -123,9 +123,8 @@
 
 extern int cell_width;
 extern int cell_height;
-static inline int TTYDRV_GetCellWidth(void)  { return cell_width; }
-static inline int TTYDRV_GetCellHeight(void) { return cell_height; }
-
+extern int screen_rows;
+extern int screen_cols;
 extern WINDOW *root_window;
 static inline WINDOW *TTYDRV_GetRootWindow(void) { return root_window; }
 
diff --git a/include/x11drv.h b/include/x11drv.h
index c15c356..501bba3 100644
--- a/include/x11drv.h
+++ b/include/x11drv.h
@@ -323,12 +323,14 @@
 extern Screen *screen;
 extern Visual *visual;
 extern Window root_window;
-extern int screen_depth;
+extern unsigned int screen_width;
+extern unsigned int screen_height;
+extern unsigned int screen_depth;
 
 static inline Screen *X11DRV_GetXScreen(void)    { return screen; }
 static inline Visual *X11DRV_GetVisual(void)     { return visual; }
 static inline Window X11DRV_GetXRootWindow(void) { return root_window; }
-static inline int X11DRV_GetDepth(void)          { return screen_depth; }
+static inline unsigned int X11DRV_GetDepth(void) { return screen_depth; }
 
 extern BOOL X11DRV_GetScreenSaveActive(void);
 extern void X11DRV_SetScreenSaveActive(BOOL bActivate);
diff --git a/misc/main.c b/misc/main.c
index 68ec23a..92de99f 100644
--- a/misc/main.c
+++ b/misc/main.c
@@ -28,7 +28,6 @@
 #include "version.h"
 #include "winnls.h"
 #include "console.h"
-#include "monitor.h"
 #include "gdi.h"
 #include "user.h"
 #include "windef.h"
diff --git a/windows/multimon.c b/windows/multimon.c
index 0d0fef8..52c574d 100644
--- a/windows/multimon.c
+++ b/windows/multimon.c
@@ -4,7 +4,6 @@
  * Copyright 1998 Turchanov Sergey
  */
 
-#include "monitor.h"
 #include "windef.h"
 #include "wingdi.h"
 #include "winbase.h"
@@ -14,8 +13,6 @@
 
 #define xPRIMARY_MONITOR ((HMONITOR)0x12340042)
 
-MONITOR MONITOR_PrimaryMonitor;
-
 /***********************************************************************
  *		MonitorFromPoint
  */
@@ -80,7 +77,9 @@
         (lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) &&
         SystemParametersInfoA(SPI_GETWORKAREA, 0, &rcWork, 0))
     {
-        lpMonitorInfo->rcMonitor = MONITOR_PrimaryMonitor.rect;
+        SetRect( &lpMonitorInfo->rcMonitor, 0, 0,
+                 GetSystemMetrics(SM_CXSCREEN),
+                 GetSystemMetrics(SM_CYSCREEN) );
         lpMonitorInfo->rcWork = rcWork;
         lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY;
 	
@@ -105,7 +104,9 @@
         (lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) &&
         SystemParametersInfoW(SPI_GETWORKAREA, 0, &rcWork, 0))
     {
-        lpMonitorInfo->rcMonitor = MONITOR_PrimaryMonitor.rect;
+        SetRect( &lpMonitorInfo->rcMonitor, 0, 0,
+                 GetSystemMetrics(SM_CXSCREEN),
+                 GetSystemMetrics(SM_CYSCREEN) );
         lpMonitorInfo->rcWork = rcWork;
         lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY;
 
@@ -127,7 +128,9 @@
         MONITORENUMPROC lpfnEnumProc,
         LPARAM          dwData)
 {
-    RECT rcLimit = MONITOR_PrimaryMonitor.rect;
+    RECT rcLimit;
+    SetRect( &rcLimit, 0, 0, GetSystemMetrics(SM_CXSCREEN),
+             GetSystemMetrics(SM_CYSCREEN) );
 
     if (!lpfnEnumProc)
         return FALSE;
diff --git a/windows/sysmetrics.c b/windows/sysmetrics.c
index 8180718..c397fc3 100644
--- a/windows/sysmetrics.c
+++ b/windows/sysmetrics.c
@@ -6,18 +6,18 @@
  */
 
 #include <stdio.h>
+#include <assert.h>
 
 #include "windef.h"
 #include "wingdi.h"
 #include "wine/winuser16.h"
 #include "winbase.h"
 #include "winuser.h"
-#include "monitor.h"
 #include "options.h"
 #include "sysmetrics.h"
 #include "tweak.h"
 
-static short sysMetrics[SM_CMETRICS+1];
+static int sysMetrics[SM_WINE_CMETRICS+1];
 
 /***********************************************************************
  *           SYSMETRICS_Init
@@ -38,10 +38,14 @@
  */
 void SYSMETRICS_Init(void)
 {
+    HDC hdc = CreateDCA( "DISPLAY", NULL, NULL, NULL );
+    assert(hdc);
+
     sysMetrics[SM_CXCURSOR] = 32;
     sysMetrics[SM_CYCURSOR] = 32;
-    sysMetrics[SM_CXSCREEN] = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
-    sysMetrics[SM_CYSCREEN] =  MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
+    sysMetrics[SM_CXSCREEN] = GetDeviceCaps( hdc, HORZRES );
+    sysMetrics[SM_CYSCREEN] = GetDeviceCaps( hdc, VERTRES );
+    sysMetrics[SM_WINE_BPP] = GetDeviceCaps( hdc, BITSPIXEL );
     if (TWEAK_WineLook > WIN31_LOOK)
 	sysMetrics[SM_CXVSCROLL] =
 	    PROFILE_GetWineIniInt("Tweak.Layout", "ScrollBarWidth", 16);
@@ -168,6 +172,8 @@
     sysMetrics[SM_CMONITORS] = 1;
     sysMetrics[SM_SAMEDISPLAYFORMAT] = 1;
     sysMetrics[SM_CMETRICS] = SM_CMETRICS;
+
+    DeleteDC( hdc );
 }
 
 
@@ -185,6 +191,6 @@
  */
 INT WINAPI GetSystemMetrics( INT index )
 {
-    if ((index < 0) || (index > SM_CMETRICS)) return 0;
+    if ((index < 0) || (index > SM_WINE_CMETRICS)) return 0;
     else return sysMetrics[index];    
 }
diff --git a/windows/ttydrv/init.c b/windows/ttydrv/init.c
index 747a3e6..dedd860 100644
--- a/windows/ttydrv/init.c
+++ b/windows/ttydrv/init.c
@@ -5,7 +5,6 @@
  */
 
 #include "clipboard.h"
-#include "monitor.h"
 #include "user.h"
 #include "win.h"
 #include "ttydrv.h"
diff --git a/windows/user.c b/windows/user.c
index 4b363ca..4cfa2e1 100644
--- a/windows/user.c
+++ b/windows/user.c
@@ -24,19 +24,19 @@
 #include "toolhelp.h"
 #include "message.h"
 #include "module.h"
-#include "monitor.h"
 #include "miscemu.h"
 #include "shell.h"
+#include "sysmetrics.h"
 #include "callback.h"
 #include "local.h"
 #include "process.h"
 #include "debugtools.h"
 
-DECLARE_DEBUG_CHANNEL(hook)
-DECLARE_DEBUG_CHANNEL(local)
-DECLARE_DEBUG_CHANNEL(system)
-DECLARE_DEBUG_CHANNEL(win)
-DECLARE_DEBUG_CHANNEL(win32)
+DECLARE_DEBUG_CHANNEL(hook);
+DECLARE_DEBUG_CHANNEL(local);
+DECLARE_DEBUG_CHANNEL(system);
+DECLARE_DEBUG_CHANNEL(win);
+DECLARE_DEBUG_CHANNEL(win32);
 
 /***********************************************************************
  *           GetFreeSystemResources   (USER.284)
@@ -333,9 +333,9 @@
   MESSAGE("\tflags=");_dump_CDS_flags(flags);MESSAGE("\n");
   if (devmode==NULL)
     FIXME_(system)("   devmode=NULL (return to default mode)\n");
-  else if ( (devmode->dmBitsPerPel != MONITOR_GetDepth(&MONITOR_PrimaryMonitor)) 
-	    || (devmode->dmPelsHeight != MONITOR_GetHeight(&MONITOR_PrimaryMonitor))
-	    || (devmode->dmPelsWidth != MONITOR_GetWidth(&MONITOR_PrimaryMonitor)) )
+  else if ( (devmode->dmBitsPerPel != GetSystemMetrics(SM_WINE_BPP)) 
+	    || (devmode->dmPelsHeight != GetSystemMetrics(SM_CYSCREEN))
+	    || (devmode->dmPelsWidth != GetSystemMetrics(SM_CXSCREEN)) )
 
   {
 
@@ -363,9 +363,9 @@
   MESSAGE("\tflags=");_dump_CDS_flags(flags);MESSAGE("\n");
   if (devmode==NULL)
     FIXME_(system)("   devmode=NULL (return to default mode)\n");
-  else if ( (devmode->dmBitsPerPel != MONITOR_GetDepth(&MONITOR_PrimaryMonitor)) 
-	    || (devmode->dmPelsHeight != MONITOR_GetHeight(&MONITOR_PrimaryMonitor))
-	    || (devmode->dmPelsWidth != MONITOR_GetWidth(&MONITOR_PrimaryMonitor)) )
+  else if ( (devmode->dmBitsPerPel != GetSystemMetrics(SM_WINE_BPP))
+	    || (devmode->dmPelsHeight != GetSystemMetrics(SM_CYSCREEN))
+	    || (devmode->dmPelsWidth != GetSystemMetrics(SM_CXSCREEN)) )
 
   {
 
@@ -404,9 +404,9 @@
 
 	TRACE_(system)("(%s,%ld,%p)\n",name,n,devmode);
 	if (n==0) {
-		devmode->dmBitsPerPel = MONITOR_GetDepth(&MONITOR_PrimaryMonitor);
-		devmode->dmPelsHeight = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
-		devmode->dmPelsWidth  = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
+		devmode->dmBitsPerPel = GetSystemMetrics(SM_WINE_BPP);
+		devmode->dmPelsHeight = GetSystemMetrics(SM_CYSCREEN);
+		devmode->dmPelsWidth  = GetSystemMetrics(SM_CXSCREEN);
 		return TRUE;
 	}
 	if ((n-1)<NRMODES*NRDEPTHS) {
diff --git a/windows/win.c b/windows/win.c
index e973f7d..99acd4b 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -20,7 +20,6 @@
 #include "hook.h"
 #include "menu.h"
 #include "message.h"
-#include "monitor.h"
 #include "nonclient.h"
 #include "queue.h"
 #include "winpos.h"
diff --git a/windows/x11drv/init.c b/windows/x11drv/init.c
index 0b256c5..525e041 100644
--- a/windows/x11drv/init.c
+++ b/windows/x11drv/init.c
@@ -5,7 +5,6 @@
  */
 
 #include "clipboard.h"
-#include "monitor.h"
 #include "user.h"
 #include "win.h"
 #include "x11drv.h"
diff --git a/windows/x11drv/mouse.c b/windows/x11drv/mouse.c
index eab97ec..96c6f80 100644
--- a/windows/x11drv/mouse.c
+++ b/windows/x11drv/mouse.c
@@ -11,7 +11,6 @@
 #include "callback.h"
 #include "debugtools.h"
 #include "mouse.h"
-#include "monitor.h"
 #include "win.h"
 #include "windef.h"
 #include "x11drv.h"
@@ -274,8 +273,8 @@
 void X11DRV_MOUSE_SendEvent( DWORD mouseStatus, DWORD posX, DWORD posY, 
                              DWORD keyState, DWORD time, HWND hWnd )
 {
-    int width  = MONITOR_GetWidth (&MONITOR_PrimaryMonitor);
-    int height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
+    int width  = GetSystemMetrics( SM_CXSCREEN );
+    int height = GetSystemMetrics( SM_CYSCREEN );
     int iWndsLocks;
     WINE_MOUSEEVENT wme;