Index: turbogears/widgets/base.py
===================================================================
--- turbogears/widgets/base.py	(Revision 6960)
+++ turbogears/widgets/base.py	(Arbeitskopie)
@@ -3,8 +3,8 @@
 import pkg_resources
 import warnings
 from turbogears import view, startup, config
-from turbogears.util import setlike, to_unicode, copy_if_mutable, \
-    get_package_name, request_available
+from turbogears.util import (setlike, to_unicode, copy_if_mutable,
+    get_package_name, request_available)
 from turbogears.i18n.utils import get_locale
 from turbogears.widgets.meta import MetaWidget, load_kid_template
 from cherrypy import request
@@ -184,15 +184,12 @@
                 setattr(self, param, copy_if_mutable(params.pop(param)))
 
             else:
-                if hasattr(self, param):
-                    # make sure we don't alter mutable class attributes
-                    value = copy_if_mutable(getattr(self.__class__, param),
-                                            True)
-                    if value[1]:
-                        # re-set it only if mutable
-                        setattr(self, param, value[0])
-                else:
-                    setattr(self, param, None)
+                # make sure we don't alter mutable class attributes
+                value, mutable = copy_if_mutable(
+                    getattr(self.__class__, param), True)
+                if mutable:
+                    # re-set it only if mutable
+                    setattr(self, param, value)
 
         for unused in params.iterkeys():
             warnings.warn('keyword argument "%s" is unused at %r instance' % (
Index: turbogears/widgets/meta.py
===================================================================
--- turbogears/widgets/meta.py	(Revision 6960)
+++ turbogears/widgets/meta.py	(Arbeitskopie)
@@ -37,11 +37,16 @@
         for param in params:
             # Swap all params listed at 'params' with a ParamDescriptor
             try:
-                dct[param_prefix+param] = dct[param]
+                dct[param_prefix + param] = dct[param]
                 dct[param] = ParamDescriptor(param)
             except KeyError:
-                # declared in a superclass, skip it...
-                pass
+                for base in bases:
+                    if hasattr(base, param):
+                        break
+                else:
+                    # not declared in any superclass, let default be None
+                    dct[param_prefix + param] = None
+                    dct[param] = ParamDescriptor(param)
         params = list(params)
         dct['params'] = params
         if compound:

