diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
index c2c7f35..0acb65e 100644
--- a/data/org.gnome.shell.gschema.xml.in
+++ b/data/org.gnome.shell.gschema.xml.in
@@ -58,6 +58,15 @@
 	ripple animation is still there, but nothing else happens.
       </_description>
     </key>
+    <key name="app-switcher-all-workspaces" type="b">
+      <default>true</default>
+      <_summary>Show all workspaces in application switcher</_summary>
+      <_description>
+        If true, applications in all workspaces is shown in application
+        switcher. Otherwise only applications and windows in current
+        workspace is shown.
+      </_description>
+    </key>
     <child name="clock" schema="org.gnome.shell.clock"/>
     <child name="calendar" schema="org.gnome.shell.calendar"/>
     <child name="recorder" schema="org.gnome.shell.recorder"/>
diff --git a/js/ui/altTab.js b/js/ui/altTab.js
index 36e6eef..f1fd57e 100644
--- a/js/ui/altTab.js
+++ b/js/ui/altTab.js
@@ -2,6 +2,7 @@
 
 const Clutter = imports.gi.Clutter;
 const Gdk = imports.gi.Gdk;
+const Gio = imports.gi.Gio;
 const Lang = imports.lang;
 const Mainloop = imports.mainloop;
 const Meta = imports.gi.Meta;
@@ -27,6 +28,8 @@ const THUMBNAIL_FADE_TIME = 0.1; // seconds
 
 const iconSizes = [96, 64, 48, 32, 22];
 
+const APP_SWITCHER_ALL_WORKSPACES_KEY = 'app-switcher-all-workspaces';
+
 function mod(a, b) {
     return (a + b) % b;
 }
@@ -847,14 +850,20 @@ AppSwitcher.prototype = {
         let activeWorkspace = global.screen.get_active_workspace();
         let workspaceIcons = [];
         let otherIcons = [];
+        let settings = new Gio.Settings({ schema: 'org.gnome.shell' });
+        let showAllWorkspaces = settings.get_boolean(APP_SWITCHER_ALL_WORKSPACES_KEY);
         for (let i = 0; i < apps.length; i++) {
             let appIcon = new AppIcon(apps[i]);
             // Cache the window list now; we don't handle dynamic changes here,
             // and we don't want to be continually retrieving it
             appIcon.cachedWindows = appIcon.app.get_windows();
+            if (!showAllWorkspaces)
+                appIcon.cachedWindows = appIcon.cachedWindows.filter(function (w) {
+                    return w.get_workspace() == activeWorkspace;
+                });
             if (this._hasWindowsOnWorkspace(appIcon, activeWorkspace))
               workspaceIcons.push(appIcon);
-            else
+            else if (showAllWorkspaces)
               otherIcons.push(appIcon);
         }
 
