--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -284,5 +284,31 @@
            It should be overridden for your specific envirnoment'''
         return None
 
+class ThemeProvider(object):
+    master_template = 'jinja_master/master.html'
+    footer = 'jinja_master/footer.html'
+    main_menu = 'jinja_master/main_menu.html'
+    nav_menu = 'jinja_master/nav_menu.html'
+    top_nav = 'jinja_master/top_nav.html'
+    sidebar_menu = 'jinja_master/sidebar_menu.html'
+    base_css = 'jinja_master/site_style.css'
+    theme_css = ['jinja_master/allura.css']
+
+    @classmethod
+    def get(cls):
+        name = config.get('theme', 'allura')
+        for ep in pkg_resources.iter_entry_points('allura.theme', name):
+            return ep.load()()
+
+    def set_theme(self, globs):
+        globs.theme = dict(master = self.master_template,
+                           footer = self.footer,
+                           main_menu = self.main_menu,
+                           nav_menu = self.nav_menu,
+                           top_nav = self.top_nav,
+                           sidebar_menu = self.sidebar_menu,
+                           base_css = self.base_css,
+                           theme_css = self.theme_css)
+
 class LocalProjectRegistrationProvider(ProjectRegistrationProvider):
     pass