diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WebServiceGeneratorImpl.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WebServiceGeneratorImpl.java
index 155e432..3277fa7 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WebServiceGeneratorImpl.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WebServiceGeneratorImpl.java
@@ -15,10 +15,6 @@
  *   limitations under the License.
  */
 
-/**
- * @author Srinath Perera(hemapani
- */
-
 package org.apache.axis.wsdl.wsdl2ws;
 
 import org.apache.axis.wsdl.wsdl2ws.info.WebServiceContext;
@@ -42,6 +38,9 @@
 
         if (WrapperConstants.LANGUAGE_CPP.equalsIgnoreCase(language))
         {
+            // Generate objects common to Client and Server - MUST BE FIRST THING DONE!
+            (new Generator(WrapperConstants.GENERATOR_PARAM_CPP_ALL,wscontext)).generate();
+            
             if (WrapperConstants.SERVER.equals(wscontext.getWrapperInfo().getTargetEngine()))
             {
                 // Generate Server objects
@@ -60,12 +59,12 @@
                 (new Generator(WrapperConstants.GENERATOR_CLIENT_STUB_CPP,wscontext)).generate();
                 (new Generator(WrapperConstants.GENERATOR_CLIENT_STUB_HPP,wscontext)).generate();
             }
-            
-            // Generate objects common to Client and Server
-            (new Generator(WrapperConstants.GENERATOR_PARAM_CPP_ALL,wscontext)).generate();
         }
         else if (WrapperConstants.LANGUAGE_C.equalsIgnoreCase(language))
         {
+            // Generate objects common to Client and Server - MUST BE FIRST THING DONE!
+            (new Generator(WrapperConstants.GENERATOR_PARAM_C_ALL,wscontext)).generate();
+            
             if (WrapperConstants.SERVER.equals(wscontext.getWrapperInfo().getTargetEngine()))
             {
                 // Generate Server objects
@@ -83,8 +82,6 @@
                 (new Generator(WrapperConstants.GENERATOR_CLIENT_STUB_H,wscontext)).generate();
 
             }
-            // Generate objects common to Client and Server
-            (new Generator(WrapperConstants.GENERATOR_PARAM_C_ALL,wscontext)).generate();
         }
         else
         {
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java
index 92bbd16..ca065bb 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java
@@ -17,15 +17,19 @@
 
 package org.apache.axis.wsdl.wsdl2ws.c.literal;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Iterator;
 
+import javax.xml.namespace.QName;
+
 import org.apache.axis.wsdl.wsdl2ws.CUtils;
 import org.apache.axis.wsdl.wsdl2ws.WrapperFault;
 import org.apache.axis.wsdl.wsdl2ws.info.MethodInfo;
 import org.apache.axis.wsdl.wsdl2ws.info.ParameterInfo;
 import org.apache.axis.wsdl.wsdl2ws.info.Type;
+import org.apache.axis.wsdl.wsdl2ws.info.TypeMap;
 import org.apache.axis.wsdl.wsdl2ws.info.WebServiceContext;
 
 public class ClientStubHeaderWriter
@@ -207,9 +211,29 @@
                     continue;
 
                 if (atype.isArray())
+                {
+                    // TODO not sure about "string" check, whether it is needed....
                     if (atype.getElementType().equals("string"))
                         removeSet.add(atype.getLanguageSpecificName());
+
+                    // NOTE: There is similar check in AllParamWriter.java.
+                        
+                    String elementType = atype.getElementType();
+                    if (elementType != null)
+                    {
+                        if (TypeMap.isAnonymousType(elementType))
+                            elementType = CUtils.sanitizeString(elementType);
+                        
+                        QName elementQname = new QName(atype.getName().getNamespaceURI(), elementType);                       
+                        Type currentType = wscontext.getTypemap().getType(elementQname);
+                        
+                        if (currentType != null)
+                            if ( currentType.isSimpleType())
+                                continue;
+                    }
+                }
                 
+                // TODO not sure about "string" check, whether it is needed....
                 if (atype.getBaseType() != null)
                     if (atype.getBaseType().getLocalPart().equals("string"))
                         removeSet.add(CUtils.getArrayNameForType(atype.getLanguageSpecificName()));
@@ -225,9 +249,17 @@
                 typeSet.remove(ritr.next());
             
             Iterator itr = typeSet.iterator();
+            String targetLocation = wscontext.getWrapperInfo().getTargetOutputLocation();
+            if (!targetLocation.endsWith(File.separator))
+                targetLocation += File.separator;
+          
             while (itr.hasNext())
             {
-                c_writer.write("#include \"" + itr.next().toString() + CUtils.getHeaderFileExtension() + "\"\n");
+                String fn = itr.next().toString() + CUtils.getHeaderFileExtension();
+                
+                // Not pretty but it works...this ensures we include generated types.
+                if (new File(targetLocation  + fn).exists())
+                    c_writer.write("#include \"" + fn + "\"\n");
             }
             c_writer.write("\n");
         }
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java
index e76cebf..ed29cba 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java
@@ -17,15 +17,20 @@
 
 package org.apache.axis.wsdl.wsdl2ws.cpp.literal;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Iterator;
 
+import javax.xml.namespace.QName;
+
 import org.apache.axis.wsdl.wsdl2ws.CUtils;
+import org.apache.axis.wsdl.wsdl2ws.WSDL2Ws;
 import org.apache.axis.wsdl.wsdl2ws.WrapperFault;
 import org.apache.axis.wsdl.wsdl2ws.info.MethodInfo;
 import org.apache.axis.wsdl.wsdl2ws.info.ParameterInfo;
 import org.apache.axis.wsdl.wsdl2ws.info.Type;
+import org.apache.axis.wsdl.wsdl2ws.info.TypeMap;
 import org.apache.axis.wsdl.wsdl2ws.info.WebServiceContext;
 
 public class ClientStubHeaderWriter
@@ -173,6 +178,7 @@
             c_writer.write("AXIS_CPP_NAMESPACE_USE\n");
             c_writer.write("\n");
             
+            // TODO - There should be a better way to determine what types are being generated!
             Type atype;
             Iterator types = this.wscontext.getTypemap().getTypes().iterator();
             HashSet typeSet = new HashSet();
@@ -185,13 +191,33 @@
                     continue;
 
                 if (atype.isArray())
+                {
+                    // TODO not sure about "string" check, whether it is needed....
                     if (atype.getElementType().equals("string"))
                         removeSet.add(atype.getLanguageSpecificName());
+
+                    // NOTE: There is similar check in AllParamWriter.java.  
+                    String elementType = atype.getElementType();
+                    if (elementType != null)
+                    {
+                        if (TypeMap.isAnonymousType(elementType))
+                            elementType = CUtils.sanitizeString(elementType);
+                        
+                        QName elementQname = new QName(atype.getName().getNamespaceURI(), elementType);                       
+                        Type currentType = wscontext.getTypemap().getType(elementQname);
+                        
+                        if (currentType != null)
+                            if ( currentType.isSimpleType())
+                                continue;
+                    }
+                }
                 
+                // TODO not sure about "string" check, whther it is needed...
                 if (atype.getBaseType() != null)
                     if (atype.getBaseType().getLocalPart().equals("string"))
                         removeSet.add(CUtils.getArrayNameForType(atype.getLanguageSpecificName()));
                 
+                   
                 if (atype.isRestriction())
                     removeSet.add(CUtils.getArrayNameForType(atype.getLanguageSpecificName()));
 
@@ -203,9 +229,17 @@
                 typeSet.remove(ritr.next());
 
             Iterator itr = typeSet.iterator();
+            String targetLocation = wscontext.getWrapperInfo().getTargetOutputLocation();
+            if (!targetLocation.endsWith(File.separator))
+                targetLocation += File.separator;
+          
             while (itr.hasNext())
             {
-                c_writer.write("#include \"" + itr.next().toString() + CUtils.getHeaderFileExtension() + "\"\n");
+                String fn = itr.next().toString() + CUtils.getHeaderFileExtension();
+                        
+                // Not pretty but it works...this ensures we include generated types.
+                if (new File(targetLocation  + fn).exists())
+                    c_writer.write("#include \"" + fn + "\"\n");
             }
             
             //    Method to print the Fault Exception headers
