diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java
index 7a589ed..74af83b 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java
@@ -1122,6 +1122,32 @@
     }
     
     /**
+     * Sanitizes a string so that it can be used in generated code. 
+     * The '*' character is not touched.
+     * 
+     */
+    public static String sanitizeStringWithSplats( String name)
+    {
+        if (name == null)
+            return name;
+        
+        String sanitisedName=name.trim();
+        int i = -1;
+        if (sanitisedName.endsWith("*"))
+            i = sanitisedName.lastIndexOf('*');
+        String suffix = "";
+        String prefix = sanitisedName;
+        
+        if (i != -1)
+        {
+            suffix = sanitisedName.substring(i);
+            prefix = sanitisedName.substring(0, i).trim();
+        }
+        
+        sanitisedName = sanitizeString(prefix) + suffix;
+        return sanitisedName;
+    }
+    /**
      * NOT CURRENTLY USED.
      * This routine is used to basically handle anonymous type naming.  Anonymous types
      * have names such as '>type' and '>>type>type2', the latter being a nested type. 
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
index 4caa876..d6424b7 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
@@ -645,14 +645,14 @@
                     c_writer.write("\n");
                  
                     c_writer.write(tab2 + "param->" + attribs[i].getParamNameAsMember() 
-                            + " = (" + containedTypeArrayName + " *)" 
+                            + " = (" + CUtils.sanitizeString(containedTypeArrayName) + " *)" 
                             + "axiscSoapDeSerializerGetBasicArray(pDZ, " 
                             + CUtils.getXSDEnumeratorForType(baseTypeName) + ", \"" 
                             + attribs[i].getParamNameAsSOAPString() + "\",0);\n");
                 }
                 else
                 {
-                    arrayType = attribs[i].getTypeName();
+                    arrayType = CUtils.sanitizeString(attribs[i].getTypeName());
                     c_writer.write(tab1 + "axiscSoapDeSerializerGetCmplxArray(pDZ, (Axisc_Array *)param->" + attribs[i].getParamNameAsMember() 
                             + ", (void*)Axis_DeSerialize_"  + arrayType 
                             + ", (void*)Axis_Create_" + arrayType 
@@ -692,7 +692,7 @@
                     
                     c_writer.write(tab2 + "{\n"); // start local scope
                     
-                    c_writer.write(tab2 + "\t" + CUtils.resolveWSDL2LanguageNameClashes(attribs[i].getTypeName()) + " * "
+                    c_writer.write(tab2 + "\t" + CUtils.sanitizeString((attribs[i].getTypeName())) + " * "
                         + attribs[i].getParamNameAsMember() + " = " 
                         + "axiscSoapDeSerializer"
                         + CUtils.getDeserializerMethodName(attribs[i].getTypeName(), attribs[i].isAttribute()) 
@@ -851,7 +851,7 @@
                     containedTypeArrayName = CUtils.getArrayNameForType(baseTypeName);
                     
                     c_writer.write("\t\tpTemp->" + attribs[i].getParamNameAsMember() 
-                            + " = (" + containedTypeArrayName + " *)axiscAxisNew(XSDC_ARRAY, 0);\n");
+                            + " = (" + CUtils.sanitizeString(containedTypeArrayName) + " *)axiscAxisNew(XSDC_ARRAY, 0);\n");
                     
                     c_writer.write("\t\tpTemp->" + attribs[i].getParamNameAsMember() + "->m_Type = " 
                             + CUtils.getXSDEnumeratorForType(baseTypeName) + ";\n");
@@ -861,7 +861,7 @@
                     containedTypeArrayName = CUtils.getArrayNameForType(attribs[i].getTypeName());
 
                     c_writer.write("\t\tpTemp->" + attribs[i].getParamNameAsMember() + " = "
-                            + "Axis_Create_" + containedTypeArrayName + "(0);\n");
+                            + "Axis_Create_" + CUtils.sanitizeString(containedTypeArrayName) + "(0);\n");
                 }     
             }
         }
@@ -961,10 +961,10 @@
                 
                 if (attribs[i].isArray())
                     c_writer.write("\t\t\tAxis_Delete_" 
-                            + CUtils.getArrayNameForType(attribs[i].getTypeName())  
+                            + CUtils.sanitizeString(CUtils.getArrayNameForType(attribs[i].getTypeName()))  
                             + "(param->" + attribs[i].getParamNameAsMember() + ", 0);\n");  
                 else
-                    c_writer.write("\t\t\tAxis_Delete_" + attribs[i].getTypeName() 
+                    c_writer.write("\t\t\tAxis_Delete_" + CUtils.sanitizeString(attribs[i].getTypeName()) 
                             + "(param->" + attribs[i].getParamNameAsMember() + ", 0);\n");     
             }
         }
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
index 0c67352..94967ac 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
@@ -289,14 +289,14 @@
                 }
 
                 // Print out field.
-                c_writer.write("\t" + CUtils.resolveWSDL2LanguageNameClashes(paramType) + " " + paramName + ";\n");
+                c_writer.write("\t" + CUtils.sanitizeStringWithSplats(paramType) + " " + paramName + ";\n");
             }
             
             if (extensionBaseAttrib != null &&
                 getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib) != null)
             {
                 c_writer.write("\t"
-                             + CUtils.sanitizeString(getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib))
+                             + CUtils.sanitizeStringWithSplats(getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib))
                              + "  "
                              + extensionBaseAttrib.getParamNameAsMember() + ";\n");
             }            
@@ -405,13 +405,13 @@
                 Type theType = attribs[i].getType();
 
                 if (theType.isRestriction() && !CUtils.isPrimitiveType(basicType))
-                    typeSet.add(basicType);
+                    typeSet.add(CUtils.sanitizeString(basicType));
                 else if (!attribs[i].isSimpleType() && !attribs[i].isAnyElement())
                 {
                     if ((attribs[i].isArray()) && !theType.isSimpleType())
-                        typeSet.add(CUtils.getArrayNameForType(basicType));
+                        typeSet.add(CUtils.sanitizeString(CUtils.getArrayNameForType(basicType)));
     
-                    typeSet.add(basicType);
+                    typeSet.add(CUtils.sanitizeString(basicType));
                 }
             }
             
@@ -438,7 +438,7 @@
                 // Do not want to include the header file we are generating!
                 String includeFile = itr.next().toString();
                 if (!includeFile.equals(c_classname))
-                   c_writer.write("#include \"" + CUtils.resolveWSDL2LanguageNameClashes(includeFile) + CUtils.getHeaderFileExtension() + "\"\n");
+                   c_writer.write("#include \"" + includeFile + CUtils.getHeaderFileExtension() + "\"\n");
             }
 
             c_writer.write("\n");
@@ -458,7 +458,7 @@
                         !(attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
                         && !attribs[i].isAnyElement())
                 {
-                    typeSet.add(attribs[i].getTypeName());
+                    typeSet.add(CUtils.sanitizeString(attribs[i].getTypeName()));
                 } 
             }
             
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
index 0a5ece8..e943b5a 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
@@ -124,6 +124,9 @@
                     methodName = methodName + Integer.toString(anyCounter);
                 }
                 
+                properParamType = CUtils.sanitizeStringWithSplats(properParamType);
+                type            = CUtils.sanitizeString(type);
+                
                 //=============================================================================
                 // Write getter method
                 //=============================================================================      
@@ -131,8 +134,7 @@
                 CUtils.printMethodComment(c_writer, "Getter method for class member field " 
                         + parameterName + ".");
                 
-                c_writer.write(CUtils.resolveWSDL2LanguageNameClashes(properParamType) + asterisk + c_classname
-                        + "::\nget" + methodName + "()\n{\n");
+                c_writer.write(properParamType + asterisk + c_classname + "::\nget" + methodName + "()\n{\n");
 
                 c_writer.write("\t" + "return " + parameterName + "; \n}\n");
 
@@ -165,7 +167,7 @@
                 {
                     // Setter method
                     c_writer.write("void " + c_classname + "::\nset"
-                            + methodName + "(" + CUtils.resolveWSDL2LanguageNameClashes(properParamType)  
+                            + methodName + "(" + properParamType  
                             + " pInValue, bool deep, bool makeCopy)\n{\n");
                     
                     if (attribs[i].getChoiceElement())
@@ -183,7 +185,7 @@
                     c_writer.write("\t\tif (deep && makeCopy)\n");
                     c_writer.write("\t\t{\n");
                     
-                    c_writer.write("\t\t\t" + parameterName + " = new " + CUtils.resolveWSDL2LanguageNameClashes(type) + "();\n");
+                    c_writer.write("\t\t\t" + parameterName + " = new " + type + "();\n");
 
                     c_writer.write("\t\t\t*" + parameterName + " = *pInValue;\n");
                     c_writer.write("\t\t}\n");
@@ -198,7 +200,7 @@
                 else
                 {
                     c_writer.write("void " + c_classname + "::\nset"
-                            + methodName + "(" + CUtils.resolveWSDL2LanguageNameClashes(properParamType) + " InValue");
+                            + methodName + "(" + properParamType + " InValue");
                                         
                     Type attributeType = attribs[i].getType();
                     
@@ -250,7 +252,7 @@
                         c_writer.write("\t{\n");
                         c_writer.write("\t\tif (deep && makeCopy)\n");
                         c_writer.write("\t\t{\n");
-                        c_writer.write("\t\t\t" + parameterName + " = new " + CUtils.resolveWSDL2LanguageNameClashes(type) + "();\n");
+                        c_writer.write("\t\t\t" + parameterName + " = new " + type + "();\n");
                         c_writer.write("\t\t\t*" + parameterName + " = *InValue;\n");
                         c_writer.write("\t\t}\n");
                         c_writer.write("\t\telse\n");
@@ -869,17 +871,17 @@
                             + attribs[i].getParamNameAsSOAPString()
                             + "\",0);\n");
                     c_writer.write(tab2 + "if(param->" + attribs[i].getParamNameAsMember() + " == NULL)\n");
-                    c_writer.write(tab2 + "\tparam->" + attribs[i].getParamNameAsMember() + " = new " + containedTypeArrayName + "();\n");
+                    c_writer.write(tab2 + "\tparam->" + attribs[i].getParamNameAsMember() + " = new " + CUtils.sanitizeString(containedTypeArrayName) + "();\n");
                     c_writer.write(tab2 + "param->" + attribs[i].getParamNameAsMember() + "->clone( *array" + arrayCount + ");\n");
                     c_writer.write(tab2 + "Axis::AxisDelete((void*) array" + arrayCount + ", XSD_ARRAY);\n\n");
                 }
                 else
                 {
-                    arrayType = attribs[i].getTypeName();
+                    arrayType = CUtils.sanitizeString(attribs[i].getTypeName());
                     containedTypeArrayName = CUtils.getArrayNameForType(arrayType);
                     
                     c_writer.write(tab2 + "if(param->" + attribs[i].getParamNameAsMember() + " == NULL)\n");
-                    c_writer.write(tab2 + "\tparam->" + attribs[i].getParamNameAsMember() + " = new " + containedTypeArrayName + "();\n");
+                    c_writer.write(tab2 + "\tparam->" + attribs[i].getParamNameAsMember() + " = new " + CUtils.sanitizeString(containedTypeArrayName) + "();\n");
                     c_writer.write(tab2 + "pIWSDZ->getCmplxArray(param->" + attribs[i].getParamNameAsMember() 
                             + ", (void*)Axis_DeSerialize_" + arrayType
                             + ", (void*)Axis_Create_" + arrayType 
@@ -907,13 +909,13 @@
                 
                 if( isPointerType)
                 {
-                    c_writer.write(tab2 + CUtils.resolveWSDL2LanguageNameClashes(typeName) + " pValue" + i + " = pIWSDZ->" +
+                    c_writer.write(tab2 + CUtils.sanitizeString(typeName) + " pValue" + i + " = pIWSDZ->" +
                             CUtils.getDeserializerMethodName(baseTypeName, attribs[i].isAttribute()) +
                             "(\"" + soapTagName + "\", 0);\n");
                 }
                 else
                 {
-                    c_writer.write(tab2 + CUtils.resolveWSDL2LanguageNameClashes(typeName) + " * pValue" + i + " = pIWSDZ->" +
+                    c_writer.write(tab2 + CUtils.sanitizeString(typeName) + " * pValue" + i + " = pIWSDZ->" +
                             CUtils.getDeserializerMethodName(baseTypeName, attribs[i].isAttribute()) +
                             "(\"" + soapTagName + "\", 0);\n");
                 }
@@ -947,11 +949,11 @@
                 String soapTagName = attribs[i].getParamNameAsSOAPString();
 
                 c_writer.write(tab2 + "param->" + attribs[i].getParamNameAsMember()
-                        + " = (" + attribs[i].getTypeName()
-                        + "*)pIWSDZ->getCmplxObject((void*)Axis_DeSerialize_" + attribs[i].getTypeName()
-                        + ", (void*)Axis_Create_" + attribs[i].getTypeName() 
-                        + ", (void*)Axis_Delete_" + attribs[i].getTypeName() 
-                        + ", \"" + soapTagName + "\", Axis_URI_" + attribs[i].getTypeName() + ");\n");
+                        + " = (" + CUtils.sanitizeString(attribs[i].getTypeName())
+                        + "*)pIWSDZ->getCmplxObject((void*)Axis_DeSerialize_" + CUtils.sanitizeString(attribs[i].getTypeName())
+                        + ", (void*)Axis_Create_" + CUtils.sanitizeString(attribs[i].getTypeName())
+                        + ", (void*)Axis_Delete_" + CUtils.sanitizeString(attribs[i].getTypeName())
+                        + ", \"" + soapTagName + "\", Axis_URI_" + CUtils.sanitizeString(attribs[i].getTypeName()) + ");\n");
             }
 
             if (attribs[i].getChoiceElement() || attribs[i].getAllElement())
@@ -1145,13 +1147,13 @@
                     String fieldName  = "any" + Integer.toString(anyCounter);
                     
                     c_writer.write("\tif (original." + fieldName + " != NULL)\n");
-                    c_writer.write("\t\t" + fieldName + " = new " + attribs[i].getTypeName() + "(*(original." + fieldName + "));\n");
+                    c_writer.write("\t\t" + fieldName + " = new " + CUtils.sanitizeString(attribs[i].getTypeName()) + "(*(original." + fieldName + "));\n");
                 }
                 else if (attribs[i].isArray())
                 {    
                     c_writer.write("\tif (original." + attribs[i].getParamNameAsMember() + " != NULL)\n");
                     c_writer.write("\t\t" + attribs[i].getParamNameAsMember() + " = new " 
-                            + CUtils.getArrayNameForType(attribs[i].getTypeName()) + "(*original." 
+                            + CUtils.sanitizeString(CUtils.getArrayNameForType(attribs[i].getTypeName())) + "(*original." 
                             + attribs[i].getParamNameAsMember() + ");\n");
                 }
                 else
@@ -1174,7 +1176,7 @@
                     {
                         c_writer.write("\tif (original." + attribs[i].getParamNameAsMember() + " != NULL)\n");
                         c_writer.write("\t\t" + attribs[i].getParamNameAsMember() + " = new " 
-                                + attribs[i].getTypeName() + "(*(original." 
+                                + CUtils.sanitizeString(attribs[i].getTypeName()) + "(*(original." 
                                 + attribs[i].getParamNameAsMember() + "));\n");
                     }
                 }
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java
index 8edcf89..602408c 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java
@@ -338,7 +338,7 @@
                     c_writer.write("\t");
 
                 // Print out field.
-                c_writer.write(CUtils.resolveWSDL2LanguageNameClashes(paramType) + " " + paramName + ";\n");
+                c_writer.write(CUtils.sanitizeStringWithSplats(paramType) + " " + paramName + ";\n");
             }
             
             // Handle extension 
@@ -346,7 +346,7 @@
                 getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib) != null)
             {
                 c_writer.write("\t"
-                             + CUtils.sanitizeString(getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib))
+                             + CUtils.sanitizeStringWithSplats(getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib))
                              + " "
                              + extensionBaseAttrib.getParamNameAsMember() + ";\n");
             }
@@ -391,10 +391,10 @@
                 c_writer.write("\n");
                 
                 // Generate getter prototype
-                c_writer.write("\t" + CUtils.resolveWSDL2LanguageNameClashes(paramType) + " get" + methodName + "();\n");
+                c_writer.write("\t" + CUtils.sanitizeStringWithSplats(paramType) + " get" + methodName + "();\n");
                 
                 // Generate setter prototype - need to consider deep copies
-                c_writer.write("\t" + "void set" + methodName + "(" + CUtils.resolveWSDL2LanguageNameClashes(paramType) + " InValue");
+                c_writer.write("\t" + "void set" + methodName + "(" + CUtils.sanitizeStringWithSplats(paramType) + " InValue");
                 
                 Type type = attribs[i].getType();
                 boolean isPointerType;                
@@ -526,13 +526,13 @@
                 Type theType = attribs[i].getType();
                 
                 if (theType.isRestriction() && !CUtils.isPrimitiveType(basicType))
-                    typeSet.add(basicType);
+                    typeSet.add(CUtils.sanitizeString(basicType));
                 else if (!attribs[i].isSimpleType() && !attribs[i].isAnyElement())
                 {
                     if ((attribs[i].isArray()) && !theType.isSimpleType())
-                        typeSet.add(CUtils.getArrayNameForType(basicType));
+                        typeSet.add(CUtils.sanitizeString(CUtils.getArrayNameForType(basicType)));
     
-                    typeSet.add(basicType);
+                    typeSet.add(CUtils.sanitizeString(basicType));
                 }
             }
             
@@ -559,7 +559,7 @@
                 // Do not want to include the header file we are generating!
                 String includeFile = itr.next().toString();
                 if (!includeFile.equals(c_classname))                
-                    c_writer.write("#include \"" + CUtils.resolveWSDL2LanguageNameClashes(includeFile) + CUtils.getHeaderFileExtension() + "\"\n");
+                    c_writer.write("#include \"" + includeFile + CUtils.getHeaderFileExtension() + "\"\n");
             }
 
             c_writer.write("\n");
@@ -579,7 +579,7 @@
                         !(attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
                         && !attribs[i].isAnyElement())
 				{
-                    typeSet.add(attribs[i].getTypeName());
+                    typeSet.add(CUtils.sanitizeString(attribs[i].getTypeName()));
                 } 
             }
             
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/WSDLInfo.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/WSDLInfo.java
index b5768be..2240673 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/WSDLInfo.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/WSDLInfo.java
@@ -647,10 +647,10 @@
             {
                 newqn = CUtils.getArrayQNameForType(qn);
                 if (newqn == null)
-                    newqn = new QName(type.getQName().getNamespaceURI(), CUtils.resolveWSDL2LanguageNameClashes(qn.getLocalPart()) + "_Array" + typeCounter++);      
+                    newqn = new QName(type.getQName().getNamespaceURI(), CUtils.sanitizeString(qn.getLocalPart()) + "_Array" + typeCounter++);      
             }
             else
-                newqn = new QName(type.getQName().getNamespaceURI(), CUtils.resolveWSDL2LanguageNameClashes(qn.getLocalPart()) + "_Array");
+                newqn = new QName(type.getQName().getNamespaceURI(), CUtils.sanitizeString(qn.getLocalPart()) + "_Array");
             
             // type is a inbuilt type or an already created type?
             typedata = c_typeMap.getType(newqn);
@@ -672,7 +672,7 @@
                     {
                         do 
                         {
-                            newqn = new QName(type.getQName().getNamespaceURI(), CUtils.resolveWSDL2LanguageNameClashes(qn.getLocalPart())  + "_Array" + typeCounter++);
+                            newqn = new QName(type.getQName().getNamespaceURI(), CUtils.sanitizeString(qn.getLocalPart())  + "_Array" + typeCounter++);
                             typedata = c_typeMap.getType(newqn);
                         }
                         while (typedata != null && !typedata.isArray());
