diff --git a/data/Makefile.am b/data/Makefile.am
index 4e73e03..c62719c 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -23,38 +23,48 @@ dist_images_DATA =				\
 	magnifier.svg
 
 themedir = $(pkgdatadir)/theme
-dist_theme_DATA =				\
-	theme/add-workspace.svg			\
-	theme/close-window.svg			\
-	theme/close.svg				\
-	theme/corner-ripple.png			\
-	theme/dash-placeholder.svg		\
-	theme/dialog-error.svg			\
-	theme/filter-selected.svg		\
-	theme/gnome-shell.css			\
-	theme/mosaic-view-active.svg		\
-	theme/mosaic-view.svg			\
-	theme/move-window-on-new.svg		\
-	theme/process-working.png		\
-	theme/remove-workspace.svg		\
-	theme/running-indicator.svg		\
-	theme/scroll-button-down-hover.png	\
-	theme/scroll-button-down.png		\
-	theme/scroll-button-up-hover.png	\
-	theme/scroll-button-up.png		\
-	theme/scroll-hhandle.svg		\
-	theme/scroll-vhandle.svg		\
-	theme/section-more.svg			\
-	theme/section-more-open.svg		\
-	theme/separator-white.png		\
-	theme/single-view-active.svg		\
-	theme/single-view.svg			\
-	theme/toggle-off-us.svg			\
-	theme/toggle-off-intl.svg		\
-	theme/toggle-on-us.svg			\
-	theme/toggle-on-intl.svg		\
-	theme/ws-switch-arrow-left.svg		\
-	theme/ws-switch-arrow-right.svg
+dist_theme_DATA = \
+	theme/gnome-shell.css
+
+themesdir = $(pkgdatadir)/themes
+
+default_themedir = $(themesdir)/default
+dist_default_theme_DATA =				\
+	themes/default/add-workspace.svg			\
+	themes/default/close-window.svg			\
+	themes/default/close.svg				\
+	themes/default/corner-ripple.png			\
+	themes/default/dash-placeholder.svg		\
+	themes/default/dialog-error.svg			\
+	themes/default/filter-selected.svg		\
+	themes/default/mosaic-view-active.svg		\
+	themes/default/mosaic-view.svg			\
+	themes/default/move-window-on-new.svg		\
+	themes/default/process-working.png		\
+	themes/default/remove-workspace.svg		\
+	themes/default/running-indicator.svg		\
+	themes/default/scroll-button-down-hover.png	\
+	themes/default/scroll-button-down.png		\
+	themes/default/scroll-button-up-hover.png	\
+	themes/default/scroll-button-up.png		\
+	themes/default/scroll-hhandle.svg		\
+	themes/default/scroll-vhandle.svg		\
+	themes/default/section-more.svg			\
+	themes/default/section-more-open.svg		\
+	themes/default/separator-white.png		\
+	themes/default/single-view-active.svg		\
+	themes/default/single-view.svg			\
+	themes/default/toggle-off-us.svg			\
+	themes/default/toggle-off-intl.svg		\
+	themes/default/toggle-on-us.svg			\
+	themes/default/toggle-on-intl.svg		\
+	themes/default/ws-switch-arrow-left.svg		\
+	themes/default/ws-switch-arrow-right.svg	\
+	themes/default/gnome-shell.css
+
+none_themedir = $(themesdir)/none
+dist_none_theme_DATA = \
+	themes/none/gnome-shell.css
 
 gsettings_SCHEMAS =					\
 	org.gnome.accessibility.magnifier.gschema.xml	\
diff --git a/js/ui/main.js b/js/ui/main.js
index 1d456af..515fa1b 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -45,6 +45,9 @@ const Util = imports.misc.util;
 const DEFAULT_BACKGROUND_COLOR = new Clutter.Color();
 DEFAULT_BACKGROUND_COLOR.from_pixel(0x2266bbff);
 
+const GNOME_SHELL_SCHEMAS = 'org.gnome.shell';
+const GNOME_SHELL_THEME_KEY = 'theme';
+
 let chrome = null;
 let panel = null;
 let placesManager = null;
@@ -67,6 +70,7 @@ let xdndHandler = null;
 let statusIconDispatcher = null;
 let _errorLogStack = [];
 let _startDate;
+let _settings = new Gio.Settings({ schema: GNOME_SHELL_SCHEMAS });
 
 let background = null;
 
@@ -211,8 +215,26 @@ function start() {
  */
 function loadTheme() {
     let themeContext = St.ThemeContext.get_for_stage (global.stage);
-    let stylesheetPath = global.datadir + '/theme/gnome-shell.css';
-    let theme = new St.Theme ({ application_stylesheet: stylesheetPath });
+
+    let applicationStylesheetPath = global.datadir + '/theme/gnome-shell.css';
+
+    let userStylesheetPath = global.userdatadir + '/theme/gnome-shell.css';
+    if (!GLib.file_test(userStylesheetPath, GLib.FileTest.IS_REGULAR))
+        userStylesheetPath = null;
+
+    let themeName = _settings.get_string(GNOME_SHELL_THEME_KEY);
+    if ((themeName == 'none') && (userStylesheetPath == null))
+        themeName = 'default';
+
+    let themeStylesheetPath = global.datadir + '/themes/' + themeName + '/gnome-shell.css';
+    if (!GLib.file_test(themeStylesheetPath, GLib.FileTest.IS_REGULAR))
+        themeStylesheetPath = global.datadir + '/themes/default/gnome-shell.css';
+
+    let theme = new St.Theme ({
+          application_stylesheet: applicationStylesheetPath,
+          theme_stylesheet: userStylesheetPath,
+          default_stylesheet: themeStylesheetPath,
+        });
     themeContext.set_theme (theme);
 }
 
