diff --git a/hw/xfree86/common/dgaproc.h b/hw/xfree86/common/dgaproc.h
index 7925bd4838a03f9897db6f5abf404d43626452bb..b9f00305603470efbafc04fbcf8e06ac00f24d0c 100644
--- a/hw/xfree86/common/dgaproc.h
+++ b/hw/xfree86/common/dgaproc.h
@@ -56,7 +56,6 @@ typedef struct {
 
 extern Bool DGAScreenAvailable(ScreenPtr pScreen);
 extern Bool DGAActive(int Index);
-extern void DGAShutdown(void);
 
 extern Bool DGAVTSwitch(void);
 extern Bool DGAStealButtonEvent(DeviceIntPtr dev, int Index,
diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index de805c4c054da9612fa5785f5e7b633a4795ac86..fa70ba2f03a3ac2841dbb85f6cb7bfb1205f3d64 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -268,7 +268,7 @@ DGACloseScreen(ScreenPtr pScreen)
     DGAScreenPtr pScreenPriv = DGA_GET_SCREEN_PRIV(pScreen);
 
     mieqSetHandler(ET_DGAEvent, NULL);
-
+    pScreenPriv->pScrn->SetDGAMode(pScreenPriv->pScrn, 0, NULL);
     FreeMarkedVisuals(pScreen);
 
     pScreen->CloseScreen = pScreenPriv->CloseScreen;
@@ -276,9 +276,6 @@ DGACloseScreen(ScreenPtr pScreen)
     pScreen->InstallColormap = pScreenPriv->InstallColormap;
     pScreen->UninstallColormap = pScreenPriv->UninstallColormap;
 
-    /* DGAShutdown() should have ensured that no DGA
-       screen were active by here */
-
     free(pScreenPriv);
 
     return ((*pScreen->CloseScreen) (pScreen));
@@ -576,24 +573,6 @@ DGAActive(int index)
     return FALSE;
 }
 
-/* Called by the event code in case the server is abruptly terminated */
-
-void
-DGAShutdown(void)
-{
-    ScrnInfoPtr pScrn;
-    int i;
-
-    if (!DGAScreenKeyRegistered)
-        return;
-
-    for (i = 0; i < screenInfo.numScreens; i++) {
-        pScrn = xf86Screens[i];
-
-        (void) (*pScrn->SetDGAMode) (pScrn, 0, NULL);
-    }
-}
-
 /* Called by the extension to initialize a mode */
 
 static int
diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 455a0eccbd96f648591b4d41632dccc00080c938..80676c669416da7374ab6870ce942fa844f6a723 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -166,9 +166,6 @@ xf86ProcessActionEvent(ActionEvent action, void *arg)
     case ACTION_TERMINATE:
         if (!xf86Info.dontZap) {
             xf86Msg(X_INFO, "Server zapped. Shutting down.\n");
-#ifdef XFreeXDGA
-            DGAShutdown();
-#endif
             GiveUp(0);
         }
         break;
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 8773a47e863f6701307f6023ec4bdb2f469ed6b5..2ec15f027e5a24421c0dad08582c0e2ae5d35fc3 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -57,9 +57,6 @@
 #include "systemd-logind.h"
 
 #include "loaderProcs.h"
-#ifdef XFreeXDGA
-#include "dgaproc.h"
-#endif
 
 #define XF86_OS_PRIVS
 #include "xf86.h"
@@ -884,10 +881,6 @@ ddxGiveUp(enum ExitCode error)
         xf86Screens[i]->vtSema = FALSE;
     }
 
-#ifdef XFreeXDGA
-    DGAShutdown();
-#endif
-
     if (xorgHWOpenConsole)
         xf86CloseConsole();