diff --git a/src/xercesc/framework/psvi/XSModel.cpp b/src/xercesc/framework/psvi/XSModel.cpp
index 3c20ace84a61f1ece7b3d169f03398ee4790bd25..23f32e28d9595481ec5c1085ed60000733beb729 100644
--- a/src/xercesc/framework/psvi/XSModel.cpp
+++ b/src/xercesc/framework/psvi/XSModel.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.20  2004/02/05 18:09:53  cargilld
+ * Fix a seg fault with PSVI and set basetype of anysimpletype to be anytype.
+ *
  * Revision 1.19  2004/01/29 11:46:30  cargilld
  * Code cleanup changes to get rid of various compiler diagnostic messages.
  *
@@ -244,11 +247,11 @@ XSModel::XSModel( XMLGrammarPool *grammarPool
     dvFactory.expandRegistryToFullSchemaSet();
     addS4SToXSModel
     (
-        getNamespaceItem(SchemaSymbols::fgURI_SCHEMAFORSCHEMA)
+        namespaceItem
         , dvFactory.getBuiltInRegistry()
     );
-
-    unsigned int numberOfNamespaces = fXSNamespaceItemList->size();
+    // don't include  S4S (thus the -1)
+    unsigned int numberOfNamespaces = fXSNamespaceItemList->size() -1;
     for (unsigned int j = 0; j < numberOfNamespaces; j++)
         addGrammarToXSModel(fXSNamespaceItemList->elementAt(j));
 }
@@ -416,7 +419,7 @@ XSModel::XSModel( XSModel *baseModel
         fDeleteNamespace->addElement(namespaceItem);
         addS4SToXSModel
         (
-            getNamespaceItem(SchemaSymbols::fgURI_SCHEMAFORSCHEMA)
+            namespaceItem
             , dvFactory.getBuiltInRegistry()
         );
     }
diff --git a/src/xercesc/internal/XSObjectFactory.cpp b/src/xercesc/internal/XSObjectFactory.cpp
index 0151e9ea6023b46f150570466e0bd88958162897..5a10f2e8558cbfc4a79ee481822832fc665cea98 100644
--- a/src/xercesc/internal/XSObjectFactory.cpp
+++ b/src/xercesc/internal/XSObjectFactory.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.20  2004/02/05 18:09:53  cargilld
+ * Fix a seg fault with PSVI and set basetype of anysimpletype to be anytype.
+ *
  * Revision 1.19  2004/01/07 02:33:56  knoaman
  * PSVI: inherit facets from base type
  *
@@ -396,7 +399,7 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator,
     XSSimpleTypeDefinition* xsObj = (XSSimpleTypeDefinition*) xsModel->getXSObject(validator);
     if (!xsObj)
     {
-        XSSimpleTypeDefinition* baseType = 0;
+        XSTypeDefinition* baseType = 0;
         XSSimpleTypeDefinitionList* memberTypes = 0;
         XSSimpleTypeDefinition* primitiveOrItemType = 0;
         XSSimpleTypeDefinition::VARIETY typeVariety = XSSimpleTypeDefinition::VARIETY_ATOMIC;
@@ -438,7 +441,7 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator,
             if (baseDV->getType() == DatatypeValidator::List)
             {
                 baseType = addOrFind(baseDV, xsModel);
-                primitiveOrItemType = baseType->getItemType();
+                primitiveOrItemType = ((XSSimpleTypeDefinition*) baseType)->getItemType();
             }
             else
             {
@@ -455,7 +458,7 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator,
             if (baseDV)
             {
                 baseType = addOrFind(baseDV, xsModel);
-                primitiveOrItemType = baseType->getPrimitiveType();
+                primitiveOrItemType = ((XSSimpleTypeDefinition*) baseType)->getPrimitiveType();
             }
             else // built-in
             {
@@ -467,6 +470,10 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator,
                 primitiveTypeSelf = true;
             }
         }
+        else
+        {
+            baseType = xsModel->getTypeDefinition(SchemaSymbols::fgATTVAL_ANYTYPE, SchemaSymbols::fgURI_SCHEMAFORSCHEMA);            
+        }
 
         xsObj = new (fMemoryManager) XSSimpleTypeDefinition
         (
@@ -1061,7 +1068,8 @@ void XSObjectFactory::processFacets(DatatypeValidator* const dv,
     }
 
     // inherit facets from base
-    if (xsST->getBaseType())
+
+    if (xsST->getBaseType() && xsST->getBaseType()->getTypeCategory() == XSTypeDefinition::SIMPLE_TYPE)
     {
         XSSimpleTypeDefinition* baseST = (XSSimpleTypeDefinition*) xsST->getBaseType();
         XSFacetList* baseFacets = baseST->getFacets();