diff --git a/Allura/allura/app.py b/Allura/allura/app.py
index 3ef8435..62b115c 100644
--- a/Allura/allura/app.py
+++ b/Allura/allura/app.py
@@ -92,13 +92,6 @@
                 self.children.append(e)
                 child_index[lbl] = e
 
-class WidgetController(BaseController):
-    widgets=[]
-
-    def __init__(self, app): pass
-
-    def portlet(self, content):
-        return '<div class="portlet">%s</div>' % content
 
 class Application(object):
     """
@@ -133,7 +126,6 @@
     permissions=[]
     sitemap = [ ]
     installable=True
-    widget = WidgetController
     searchable = False
     DiscussionClass = model.Discussion
     PostClass = model.Post
diff --git a/Allura/allura/ext/admin/admin_main.py b/Allura/allura/ext/admin/admin_main.py
index 5d0d493..51ce063 100644
--- a/Allura/allura/ext/admin/admin_main.py
+++ b/Allura/allura/ext/admin/admin_main.py
@@ -10,7 +10,7 @@
 from webob import exc
 from bson import ObjectId
 
-from allura.app import Application, WidgetController, DefaultAdminController, SitemapEntry
+from allura.app import Application, DefaultAdminController, SitemapEntry
 from allura.lib import helpers as h
 from allura import version
 from allura import model as M
diff --git a/Allura/allura/ext/project_home/model/__init__.py b/Allura/allura/ext/project_home/model/__init__.py
deleted file mode 100644
index 134451a..0000000
--- a/Allura/allura/ext/project_home/model/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from dashboard import PortalConfig
diff --git a/Allura/allura/ext/project_home/model/dashboard.py b/Allura/allura/ext/project_home/model/dashboard.py
deleted file mode 100644
index 381b550..0000000
--- a/Allura/allura/ext/project_home/model/dashboard.py
+++ /dev/null
@@ -1,73 +0,0 @@
-import logging
-
-from tg.decorators import Decoration
-from tg.render import render
-from pylons import c, request
-
-from ming import schema
-from ming.orm import Mapper
-from ming.orm import FieldProperty, ForeignIdProperty
-
-from allura.lib.helpers import push_config
-from allura.model import Artifact
-
-log = logging.getLogger(__name__)
-
-class PortalConfig(Artifact):
-    class __mongometa__:
-        name='portal_config'
-    type_s = 'Project Portal Configuration'
-
-    _id = FieldProperty(schema.ObjectId)
-    user_id = ForeignIdProperty('User')
-    layout_class = FieldProperty(str)
-    layout = FieldProperty([
-            {'name':str,
-             'content':[
-                    {'mount_point':str,
-                     'widget_name':str }
-                    ]
-             }])
-
-    @classmethod
-    def current(cls):
-        result = cls.query.get(user_id=c.user._id)
-        if result is None:
-            result = cls(user_id=c.user._id,
-                         layout_class='onecol',
-                         layout=[dict(name='content',
-                                      content=[dict(mount_point='home',
-                                                    widget_name='welcome')
-                                               ])])
-        return result
-
-    def rendered_layout(self):
-        return [
-            dict(name=div.name,
-                 content=[ render_widget(**w)
-                           for w in div.content]
-                 )
-            for div in self.layout ]
-            
-
-    def url(self):
-        return self.app_config.script_name()
-
-    def index(self):
-        return None
-
-def render_widget(mount_point, widget_name):
-    app = c.project.app_instance(mount_point)
-    method = getattr(app.widget(app), widget_name)
-    with push_config(c, app=app):
-        result = method()
-    if isinstance(result, dict):
-        deco = Decoration.get_decoration(method)
-        content_type, engine, template, exclude_names = \
-            deco.lookup_template_engine(request)
-        template_vars = dict((k,v) for k,v in result.iteritems()
-                             if k not in exclude_names)
-        return render(template_vars, engine, template)
-    return result
-
-Mapper.compile_all()
diff --git a/Allura/allura/ext/project_home/nf/home/css/project_home.css b/Allura/allura/ext/project_home/nf/home/css/project_home.css
deleted file mode 100644
index 4ef8098..0000000
--- a/Allura/allura/ext/project_home/nf/home/css/project_home.css
+++ /dev/null
@@ -1,17 +0,0 @@
-div.twocol #col1 
-{
-    width: 40%;
-    float: left;
-}
-
-div.twocol #col2
-{
-    width: 50%;
-    float: left;
-}
-
-div.portlet
-{
-    margin: 2px;
-    background-color: white;
-}
diff --git a/Allura/allura/ext/project_home/project_main.py b/Allura/allura/ext/project_home/project_main.py
index 16dc5f0..96c706a 100644
--- a/Allura/allura/ext/project_home/project_main.py
+++ b/Allura/allura/ext/project_home/project_main.py
@@ -1,40 +1,22 @@
-import difflib
 import logging
-from pprint import pformat
 
 import pkg_resources
-from pylons import c, request
-from tg import expose, redirect, flash
+from pylons import c
+from tg import expose, redirect
 from tg.decorators import with_trailing_slash
-from webob import exc
-
 
 from allura import version
-from allura.app import Application, WidgetController, ConfigOption, SitemapEntry
+from allura.app import Application, SitemapEntry
 from allura.lib import helpers as h
 from allura.controllers import BaseController
-from allura.ext.project_home import model as M
 from allura import model
-from allura.lib.security import require, require_access
-from allura.lib.decorators import require_post
-from allura.lib.widgets.project_list import ProjectScreenshots
+
 
 log = logging.getLogger(__name__)
 
-class W:
-    screenshot_list = ProjectScreenshots()
-
-class ProjectWidgets(WidgetController):
-    widgets=['welcome']
-
-    def __init__(self, app): pass
-
-    def welcome(self):
-        return self.portlet('<p><!-- Please configure your widgets --></p>')
 
 class ProjectHomeApp(Application):
     __version__ = version.__version__
-    widget = ProjectWidgets
     installable = False
     tool_label = 'home'
     default_mount_label='Project Home'
@@ -47,7 +29,6 @@
     def __init__(self, project, config):
         Application.__init__(self, project, config)
         self.root = ProjectHomeController()
-        self.api_root = RootRestController()
         self.templates = pkg_resources.resource_filename(
             'allura.ext.project_home', 'templates')
 
@@ -61,19 +42,18 @@
         '''
         return [ SitemapEntry(
                 self.config.options.mount_label.title(),
-                '.')]
-
+                '..')]
 
     @property
     @h.exceptionless([], log)
     def sitemap(self):
         menu_id = 'Home'
         return [
-            SitemapEntry('Home', c.project.url()) ]
+            SitemapEntry('Home', '..') ]
 
     @h.exceptionless([], log)
     def sidebar_menu(self):
-        return [ SitemapEntry('Configure', 'configuration')]
+        return [ ]
 
     def admin_menu(self):
         return []
@@ -86,72 +66,10 @@
                 model.ACE.allow(pr._id, perm)
                 for perm in self.permissions ]
 
+
 class ProjectHomeController(BaseController):
 
-    def _check_security(self):
-        require_access(c.project, 'read')
-
     @with_trailing_slash
-    @expose('jinja:allura.ext.project_home:templates/project_index.html')
-    def index(self, **kw):
-        config = M.PortalConfig.current()
-        c.screenshot_list = W.screenshot_list
-        return dict(
-            layout_class=config.layout_class,
-            layout=config.rendered_layout())
-
-    @expose('jinja:allura.ext.project_home:templates/project_dashboard_configuration.html')
-    def configuration(self):
-        config = M.PortalConfig.current()
-        mount_points = [
-            (ac.options.mount_point, ac.load())
-            for ac in c.project.app_configs ]
-        widget_types = [
-            dict(mount_point=mp, widget_name=w)
-            for mp, app_class in mount_points
-            for w in app_class.widget.widgets ]
-        return dict(
-            layout_class=config.layout_class,
-            layout=config.layout,
-            widget_types=widget_types)
-
-    @h.vardec
     @expose()
-    @require_post()
-    def update_configuration(self, divs=None, layout_class=None, new_div=None, **kw):
-        require_access(c.project, 'update')
-        config = M.PortalConfig.current()
-        config.layout_class = layout_class
-        # Handle updated and deleted divs
-        if divs is None: divs = []
-        new_divs = []
-        for div in divs:
-            log.info('Got div update:%s', pformat(div))
-            if div.get('del'): continue
-            new_divs.append(div)
-        # Handle new divs
-        if new_div:
-            new_divs.append(dict(name=h.nonce(), content=[]))
-        config.layout = []
-        for div in new_divs:
-            content = []
-            for w in div.get('content', []):
-                if w.get('del'): continue
-                mp,wn = w['widget'].split('/')
-                content.append(dict(mount_point=mp, widget_name=wn))
-            if div.get('new_widget'):
-                content.append(dict(mount_point='home', widget_name='welcome'))
-            config.layout.append(dict(
-                    name=div['name'],
-                    content=content))
-        redirect('configuration')
-
-
-class RootRestController(BaseController):
-
-    def _check_security(self):
-        require_access(c.project, 'read')
-
-    @expose('json:')
-    def index(self, **kwargs):
-        return dict(shortname=c.project.shortname)
+    def index(self, **kw):
+        redirect('..')
diff --git a/Allura/allura/ext/project_home/templates/__init__.py b/Allura/allura/ext/project_home/templates/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/Allura/allura/ext/project_home/templates/__init__.py
+++ /dev/null
diff --git a/Allura/allura/ext/project_home/templates/project_dashboard_configuration.html b/Allura/allura/ext/project_home/templates/project_dashboard_configuration.html
deleted file mode 100644
index 0142abd..0000000
--- a/Allura/allura/ext/project_home/templates/project_dashboard_configuration.html
+++ /dev/null
@@ -1,79 +0,0 @@
-{% extends g.theme.master %}
-
-{% block title %}{{c.project.name}} / Configure Dashboard{% endblock %}
-
-{% block header %}Configure Dashboard for {{c.project.name}}{% endblock %}
-
-{% block extra_css %}
-    <link rel="stylesheet" type="text/css"  
-          href="{{g.app_static('css/project_home.css')}}"/>
-{% endblock %}
-
-
-{% block content %}
-          <form method="post" action="update_configuration">
-            <div class="span-3 clear"><label for="layout_class">Layout Class</label></div>
-            <div class="span-10">
-              <select name="layout_class" id="layout_class" class="title">
-                <option value="onecol" {% if layout_class=='onecol' %}selected="selected"{% endif %}>
-                  One Column</option>
-                <option value="twocol" {% if layout_class=='twocol' %}selected="selected"{% endif %}>
-                  Two Column</option>
-              </select>
-            </div>
-            <div class="span-5 last">
-              <input type="submit" value="Update Layout"/>
-            </div>
-            
-            {% for div in layout %}
-            <div style="margin-bottom: 1em; border: 1px solid #ddd" class="span-18 last">
-              <div class="span-3 clear"><label for="divs-{{loop.index0}}.name">Div Name</label></div>
-              <div class="span-14 last">
-                <input type="text" name="divs-{{loop.index0}}.name" id="divs-{{loop.index0}}.name" value="{{div.name}}" class="title span-10"/> &nbsp;
-                <input type="submit" name="divs-{{loop.index0}}.del" value="Remove Div"/>
-              </div>
-              <div class="span-3 clear"><label>Widgets</label></div>
-              <div class="span-14 last">
-                {% if not div.content %}
-                <span">No widgets have been added.</span>
-                {% else %}
-                <table>
-                  <thead>
-                    <tr>
-                      <th>Widget</th>
-                      <th>Remove</th>
-                    </tr>
-                  </thead>
-                  <tbody>
-                    {% set i = loop.index0 %}
-                    {% for w in div.content %}
-                    <tr class="{{loop.cycle('even', '')}}">
-                      <td>
-                        <select name="divs-{{i}}.content-{{loop.index0}}.widget" id="divs-{{i}}.content-{{loop.index0}}">
-                          {% for wt in widget_types %}
-                            <option value="{{wt.mount_point}}/{{wt.widget_name}}"
-                                  {% if wt==w %}selected="selected"{% endif %}>{{wt.mount_point}} / {{wt.widget_name}}</option>
-                          {% endfor %}
-                        </select>
-                      </td>
-                      <td>
-                        <input type="submit" name="divs-{{i}}.content-{{loop.index0}}.del"
-                               value="Remove Widget"/>
-                      </td>
-                    </tr>
-                    {% endfor %}
-                  </tbody>
-                </table>
-                {% endif %}
-              </div>
-              <div class="push-3 span-14 clear last">
-                <input type="submit" name="divs-{{loop.index0}}.new_widget" value="Add new widget"/>
-              </div>
-            </div>
-            {% endfor %}
-            
-            <div class="clear">
-              <input type="submit" name="new_div" value="Add new div"/>
-            </div>
-          </form>
-{% endblock %}
diff --git a/Allura/allura/ext/project_home/templates/project_index.html b/Allura/allura/ext/project_home/templates/project_index.html
deleted file mode 100644
index ed5b4d6..0000000
--- a/Allura/allura/ext/project_home/templates/project_index.html
+++ /dev/null
@@ -1,68 +0,0 @@
-{% set hide_left_bar = True %}
-{% set show_right_bar = True %}
-{% extends g.theme.master %}
-
-{% block title %}{{c.project.homepage_title}}{% endblock %}
-
-{% block header %}{{c.project.homepage_title}}{% endblock %}
-
-{% block extra_css %}
-    <link rel="stylesheet" type="text/css" 
-          href="{{g.app_static('css/project_home.css')}}"/>
-    <link rel="alternate" type="application/rss+xml" title="RSS" href="../feed.rss"/>
-    <link rel="alternate" type="application/atom+xml" title="Atom" href="../feed.atom"/>
-{% endblock %}
-
-
-{% block content %}
-  {{c.project.description_html|safe}}
-  <div class="{{layout_class}}">
-    {% for div in layout %}
-    <div class="{{div.name}}">
-      {% for w in div.content %}{{w|safe}}{% endfor %}
-    </div>
-    {% endfor %}
-  </div>
-  {{c.screenshot_list.display(project=c.project)}}
-{% endblock %}
-
-{% block right_content %}
-  {% if c.project.accolades %}
-    <div class="listed">
-      <b>Awards:</b>
-      {% for accolade in c.project.accolades %}
-      <a href="{{accolade.award.longurl()}}" title="{{accolade.award.full}}">
-        <small class="badge {{accolade.award.short}}">{{accolade.award.short}}</small>
-      </a>
-      {% else %}
-        <span>No Awards</span>
-      {% endfor %}
-    </div>
-  {% endif %}
-
-  {% if c.project.labels and not (c.project.labels|length == 1 and c.project.labels[0]=='') %}
-  <div class="listed">
-    <b>Labels:</b>
-    {% for label in c.project.labels %}
-      <span class="ui-corner-all tag">{{label}} </span>
-    {% endfor %}
-  </div>
-  {% endif %}
-
-  <div class="listed last gravatar sm">
-    <b>Developers:</b>
-    {% for u in c.project.users() %}
-    <a href="{{u.url()}}">
-      {{lib.gravatar(u, size=24)}}
-    </a>
-    {% endfor %}
-  </div>
-{% endblock %}
-
-{% block extra_js %}
-  {% if c.project.best_download_url() %}
-  <script type="text/javascript">
-      $("#download-button").load("{{c.project.best_download_url()}}");
-  </script>
-  {% endif %}
-{% endblock %}
diff --git a/Allura/allura/ext/user_profile/nf/home/css/user_profile.css b/Allura/allura/ext/user_profile/nf/home/css/user_profile.css
index e2f5eaa..e69de29 100644
--- a/Allura/allura/ext/user_profile/nf/home/css/user_profile.css
+++ b/Allura/allura/ext/user_profile/nf/home/css/user_profile.css
@@ -1,17 +0,0 @@
-div.twocol #col1
-{
-    width: 40%;
-    float: left;
-}
-
-div.twocol #col2
-{
-    width: 50%;
-    float: left;
-}
-
-div.portlet
-{
-    margin: 2px;
-    background-color: yellow;
-}
\ No newline at end of file
diff --git a/Allura/allura/ext/user_profile/user_main.py b/Allura/allura/ext/user_profile/user_main.py
index 39af32a..e017ad2 100644
--- a/Allura/allura/ext/user_profile/user_main.py
+++ b/Allura/allura/ext/user_profile/user_main.py
@@ -7,10 +7,9 @@
 from tg import expose, redirect, validate, response
 
 from allura import version
-from allura.app import Application, WidgetController
+from allura.app import Application
 from allura.lib import helpers as h
 from allura.lib.helpers import DateTimeConverter
-from allura.ext.project_home import model as M
 from allura.lib.security import require_access
 from allura.model import User, Feed, ACE
 from allura.controllers import BaseController
@@ -18,17 +17,9 @@
 
 log = logging.getLogger(__name__)
 
-class UserWidgets(WidgetController):
-    widgets=['welcome']
-
-    def __init__(self, app): pass
-
-    def welcome(self):
-        return self.portlet('<p><!-- Please configure your widgets --></p>')
 
 class UserProfileApp(Application):
     __version__ = version.__version__
-    widget = UserWidgets
     installable = False
     icons={
         24:'images/sftheme/24x24/home_24.png',
@@ -81,10 +72,6 @@
     #             print r.docs
     #     return dict(user=user)
 
-    @expose('jinja:allura.ext.user_profile:templates/user_dashboard_configuration.html')
-    def configuration(self):
-        return dict(user=c.project.user_project_of)
-
     @expose()
     @validate(dict(
             since=DateTimeConverter(if_empty=None),
@@ -108,34 +95,3 @@
         response.headers['Content-Type'] = ''
         response.content_type = 'application/xml'
         return feed.writeString('utf-8')
-
-    @h.vardec
-    @expose()
-    @require_post()
-    def update_configuration(self, divs=None, layout_class=None, new_div=None, **kw):
-        require_access(c.project, 'update')
-        config = M.PortalConfig.current()
-        config.layout_class = layout_class
-        # Handle updated and deleted divs
-        if divs is None: divs = []
-        new_divs = []
-        for div in divs:
-            log.info('Got div update:%s', pformat(div))
-            if div.get('del'): continue
-            new_divs.append(div)
-        # Handle new divs
-        if new_div:
-            new_divs.append(dict(name=h.nonce(), content=[]))
-        config.layout = []
-        for div in new_divs:
-            content = []
-            for w in div.get('content', []):
-                if w.get('del'): continue
-                mp,wn = w['widget'].split('/')
-                content.append(dict(mount_point=mp, widget_name=wn))
-            if div.get('new_widget'):
-                content.append(dict(mount_point='profile', widget_name='welcome'))
-            config.layout.append(dict(
-                    name=div['name'],
-                    content=content))
-        redirect('configuration')
diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index 69c54b3..dbe92ff 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -578,11 +578,6 @@
             self.uninstall_app(ac.options.get('mount_point'))
         MappedClass.delete(self)
 
-    def render_widget(self, widget):
-        app = self.app_instance(widget['mount_point'])
-        with h.push_config(c, project=self, app=app):
-            return getattr(app.widget(app), widget['widget_name'])()
-
     def breadcrumbs(self):
         entry = ( self.name, self.url() )
         if self.parent_project:
diff --git a/Allura/allura/tests/functional/test_user_profile.py b/Allura/allura/tests/functional/test_user_profile.py
index afd64c7..4c6ebcd 100644
--- a/Allura/allura/tests/functional/test_user_profile.py
+++ b/Allura/allura/tests/functional/test_user_profile.py
@@ -10,15 +10,6 @@
         response = self.app.get('/u/test-admin/profile/')
         assert '<h2 class="dark title">Test Admin' in response
         assert 'OpenIDs' in response
-        response = self.app.get('/u/test-admin/profile/configuration')
-        assert 'Configure Dashboard' in response
-
-    @td.with_user_project('test-admin')
-    def test_profile_config(self):
-        # Not fully implemented, just do coverage
-        response = self.app.post('/u/test-admin/profile/update_configuration', params=variable_encode({
-                                     'layout_class': 'something', 'divs': [{'name': 'foo', 'content': [{'widget': 'lotsa/content'}]}],
-                                     'new_div': {'name': 'bar', 'new_widget': 'widg'}}))
 
     def test_wrong_profile(self):
         response = self.app.get('/u/no-such-user/profile/', status=404)
@@ -39,4 +30,3 @@
         response = self.app.get('/u/test-admin/profile/feed')
         assert 'Recent posts by Test Admin' in response
         assert 'WikiPage Home modified by Test Admin' in response
-
diff --git a/Allura/allura/tests/test_app.py b/Allura/allura/tests/test_app.py
index e4c5beb..359e796 100644
--- a/Allura/allura/tests/test_app.py
+++ b/Allura/allura/tests/test_app.py
@@ -51,7 +51,3 @@
                 app.SitemapEntry('d', 'd/')]])
     assert len(sm.children) == 3
 
-def test_widget_controller():
-    wc = app.WidgetController(c.app)
-    assert 'portlet' in wc.portlet('Foo'), wc.portlet('Foo')
-
