--- /dev/null
+diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
+index 43c746b..750b425 100644
+--- a/hw/xfree86/common/xf86AutoConfig.c
++++ b/hw/xfree86/common/xf86AutoConfig.c
+@@ -75,6 +75,13 @@
+ "\tDevice\t" BUILTIN_DEVICE_NAME "\n" \
+ "EndSection\n\n"
+
++#define BUILTIN_SCREEN_SECTION_PROPRIETARY \
++ "Section \"Screen\"\n" \
++ "\tIdentifier\t" BUILTIN_SCREEN_NAME "\n" \
++ "\tDevice\t" BUILTIN_DEVICE_NAME "\n" \
++ "\tDefaultDepth\t24\n" \
++ "EndSection\n\n"
++
+ #define BUILTIN_LAYOUT_SECTION_PRE \
+ "Section \"ServerLayout\"\n" \
+ "\tIdentifier\t\"Builtin Default Layout\"\n"
+@@ -153,7 +160,11 @@ xf86AutoConfig(void)
+ for (p = deviceList; *p; p++) {
+ snprintf(buf, sizeof(buf), BUILTIN_DEVICE_SECTION, *p, 0, *p);
+ AppendToConfig(buf);
+- snprintf(buf, sizeof(buf), BUILTIN_SCREEN_SECTION, *p, 0, *p, 0);
++ if (strcmp(*p, "fglrx") == 0 || strcmp(*p, "nvidia") == 0)
++ snprintf(buf, sizeof(buf), BUILTIN_SCREEN_SECTION_PROPRIETARY, *p,
++ 0, *p, 0);
++ else
++ snprintf(buf, sizeof(buf), BUILTIN_SCREEN_SECTION, *p, 0, *p, 0);
+ AppendToConfig(buf);
+ }
+
+diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
+index e52f1da..bd62a7e 100644
+--- a/hw/xfree86/common/xf86pciBus.c
++++ b/hw/xfree86/common/xf86pciBus.c
+@@ -1107,7 +1107,8 @@ videoPtrToDriverList(struct pci_device *dev,
+ driverList[0] = "ast";
+ break;
+ case 0x1002:
+- driverList[0] = "ati";
++ driverList[0] = "fglrx";
++ driverList[1] = "ati";
+ break;
+ case 0x102c:
+ driverList[0] = "chips";
+@@ -1143,6 +1144,7 @@ videoPtrToDriverList(struct pci_device *dev,
+ {
+ int idx = 0;
+
++ driverList[idx++] = "nvidia";
+ #ifdef __linux__
+ driverList[idx++] = "nouveau";
+ #endif