Index: turbogears/widgets/base.py
===================================================================
--- turbogears/widgets/base.py	(revision 6997)
+++ turbogears/widgets/base.py	(working copy)
@@ -477,7 +477,6 @@
                 if not value.is_named:
                     value.name = name
                 declared_widgets.append(value)
-                del class_dict[name]
         declared_widgets.sort(key=lambda w: w._declaration_counter)
         cls = type.__new__(meta, class_name, bases, class_dict)
         cls.declared_widgets = declared_widgets
Index: turbogears/widgets/tests/test_widgets.py
===================================================================
--- turbogears/widgets/tests/test_widgets.py	(revision 6997)
+++ turbogears/widgets/tests/test_widgets.py	(working copy)
@@ -239,6 +239,23 @@
     assert widgetlist[2] == w3
     assert widgetlist[3] == w4
 
+def test_declared_widgets_in_widgetslist_accessable():
+    class W1(widgets.WidgetsList):
+        foo = widgets.Widget()
+    w1 = W1()
+    assert hasattr(w1, 'foo')
+
+    class W2(W1):
+        bar = widgets.Widget()
+    w2 = W2()
+    assert hasattr(w2, 'foo')
+    assert hasattr(w2, 'bar')
+
+    class W3(widgets.WidgetsList):
+        pass
+    w3 = W3(widgets.Widget(name='foo'))
+    assert not hasattr(w3, 'foo'), 'Only declared widgets must be accessable by name'
+
 def test_widget_url():
     """It might be needed to insert an URL somewhere"""
     url = widgets.URLLink(link='http://www.turbogears.org')

