diff --git a/generateDS.py b/generateDS.py
index 748f6686901f15c40cbdbc0e2b76b21dd1f6a764..42da8e1b04e8c42571f456bf9afcfb6a17f92ce6 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -1132,27 +1132,7 @@ class XschemaElement(XschemaElementBase):
                 else:
                     self.complex = 1
             elif type_val in SimpleTypeDict:
-                count = 0
-                type_val1 = type_val
-                while True:
-                    element = SimpleTypeDict[type_val1]
-                    type_val1 = element.getBase()
-                    if type_val1 and not is_builtin_simple_type(type_val1):
-                        type_val1 = strip_namespace(type_val1)
-                    if type_val1 is None:
-                        # Something seems wrong.  Can't find base simple type.
-                        #   Give up and use default.
-                        type_val = StringType[0]
-                        break
-                    if type_val1 in SimpleTypeDict:
-                        count += 1
-                        if count > 10:
-                            # Give up.  We're in a loop.  Use default.
-                            type_val = StringType[0]
-                            break
-                    else:
-                        type_val = type_val1
-                        break
+                type_val = resolveBaseTypeForSimpleType(type_val)
                 # Add the namespace prefix to the simple type if needed.
                 if len(type_val.split(':')) == 1:
                     type_val = CurrentNamespacePrefix + type_val
@@ -4183,7 +4163,10 @@ def generateCtor(wrt, prefix, element):
             wrt("            initvalue_ = %s\n" % (mbrname, ))
             wrt("        self.%s = initvalue_\n" % (name, ))
         else:
-            pythonType = SchemaToPythonTypeMap.get(attrDef.getType())
+            attrType = attrDef.getType()
+            if attrType in SimpleTypeDict:
+                attrType = resolveBaseTypeForSimpleType(attrType)
+            pythonType = SchemaToPythonTypeMap.get(attrType)
             attrVal = "_cast(%s, %s)" % (pythonType, mbrname, )
             wrt('        self.%s = %s\n' % (name, attrVal, ))
     # Generate member initializers in ctor.
@@ -4304,6 +4287,31 @@ def find_simple_type_def(tree, stName, element, child, ns, base):
     return st
 
 
+def resolveBaseTypeForSimpleType(type_val):
+    count = 0
+    type_val1 = type_val
+    while True:
+        element = SimpleTypeDict[type_val1]
+        type_val1 = element.getBase()
+        if type_val1 and not is_builtin_simple_type(type_val1):
+            type_val1 = strip_namespace(type_val1)
+        if type_val1 is None:
+            # Something seems wrong.  Can't find base simple type.
+            #   Give up and use default.
+            type_val = StringType[0]
+            break
+        if type_val1 in SimpleTypeDict:
+            count += 1
+            if count > 10:
+                # Give up.  We're in a loop.  Use default.
+                type_val = StringType[0]
+                break
+        else:
+            type_val = type_val1
+            break
+    return type_val
+
+
 def get_target_value(default, stName):
     stObj = SimpleTypeDict.get(stName)
     targetValue = default
diff --git a/tests/validate_simpletypes.xsd b/tests/validate_simpletypes.xsd
index 2493ac381399cd6d5f2e6ef2cc23f5f094edf12f..17c00070934da8da5c3aaaf0f3320dc3bdd41e77 100644
--- a/tests/validate_simpletypes.xsd
+++ b/tests/validate_simpletypes.xsd
@@ -15,7 +15,7 @@
 
     <xs:complexType name="simpleOneType" mixed="0">
         <xs:sequence>
-            <xs:element name="integer_range_1_value" type="integer_range_1_st"/>
+            <xs:element name="integer_range_1_value" type="integer_range_1_st" default="5"/>
             <xs:element name="pattern_value" type="pattern_st"/>
             <xs:element name="token_enum_value" type="token_enum_st"/>
             <xs:element name="integer_range_incl_value" type="integer_range_incl_st"/>
@@ -50,6 +50,7 @@
             <xs:element name="primative_integer" type="xs:integer"/>
             <xs:element name="primative_float" type="xs:float"/>
         </xs:sequence>
+        <xs:attribute name="integer_range_1_value_with_default" type="integer_range_1_st" default="6"/>
     </xs:complexType>
     <!-- Test for use of an anonymous simple type inside an anonymous complexType. -->
     <xs:element name="simpleTypeData" type="simpleTwoType"/>