diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index e27070093..5b999f638 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -59,18 +59,6 @@ const WorkspacesView = new Lang.Class({
         this._extraWorkspaces = [];
         this._updateExtraWorkspaces();
 
-        // Position/scale the desktop windows and their children after the
-        // workspaces have been created. This cannot be done first because
-        // window movement depends on the Workspaces object being accessible
-        // as an Overview member.
-        this._overviewShowingId =
-            Main.overview.connect('showing',
-                                 Lang.bind(this, function() {
-                for (let w = 0; w < this._workspaces.length; w++)
-                    this._workspaces[w].zoomToOverview();
-                for (let w = 0; w < this._extraWorkspaces.length; w++)
-                    this._extraWorkspaces[w].zoomToOverview();
-        }));
         this._overviewShownId =
             Main.overview.connect('shown',
                                  Lang.bind(this, function() {
@@ -141,12 +129,14 @@ const WorkspacesView = new Lang.Class({
         return this._workspaces[active];
     },
 
-    hide: function() {
-        let activeWorkspaceIndex = global.screen.get_active_workspace_index();
-        let activeWorkspace = this._workspaces[activeWorkspaceIndex];
-
-        activeWorkspace.actor.raise_top();
+    zoomToOverview: function() {
+        for (let w = 0; w < this._workspaces.length; w++)
+            this._workspaces[w].zoomToOverview();
+        for (let w = 0; w < this._extraWorkspaces.length; w++)
+            this._extraWorkspaces[w].zoomToOverview();
+    },
 
+    zoomFromOverview: function() {
         this.actor.remove_clip();
 
         for (let w = 0; w < this._workspaces.length; w++)
@@ -276,7 +266,6 @@ const WorkspacesView = new Lang.Class({
     _onDestroy: function() {
         this._destroyExtraWorkspaces();
         this.scrollAdjustment.run_dispose();
-        Main.overview.disconnect(this._overviewShowingId);
         Main.overview.disconnect(this._overviewShownId);
         global.window_manager.disconnect(this._switchWorkspaceNotifyId);
         this._settings.disconnect(this._updateExtraWorkspacesId);
@@ -443,6 +432,8 @@ const WorkspacesDisplay = new Lang.Class({
 
     show: function() {
         this._updateWorkspacesViews();
+        for (let i = 0; i < this._workspacesViews.length; i++)
+            this._workspacesViews[i].zoomToOverview();
 
         this._restackedNotifyId =
             Main.overview.connect('windows-restacked',
@@ -452,9 +443,8 @@ const WorkspacesDisplay = new Lang.Class({
     },
 
     zoomFromOverview: function() {
-        for (let i = 0; i < this._workspacesViews.length; i++) {
-            this._workspacesViews[i].hide();
-        }
+        for (let i = 0; i < this._workspacesViews.length; i++)
+            this._workspacesViews[i].zoomFromOverview();
     },
 
     hide: function() {