diff --git a/src/soap/SoapDeSerializer.cpp b/src/soap/SoapDeSerializer.cpp
index d0f724b..4b64c86 100644
--- a/src/soap/SoapDeSerializer.cpp
+++ b/src/soap/SoapDeSerializer.cpp
@@ -947,6 +947,17 @@
 
     if (!isFault)
     {
+    	if (AXIS_SUCCESS == m_nStatus && (RPC_ENCODED != m_nStyle) && (m_pNode == NULL))
+    	{
+    		const char*name = peekNextElementName();
+    		if (0 != strcmp (pName, name))
+    		{
+                logExitWithPointer(NULL)
+
+                return NULL; 
+    		}
+    	}
+    	
         if (AXIS_SUCCESS != m_nStatus || (AXIS_FAIL == getNextNode(RPC_ENCODED != m_nStyle)))
         {
             logExitWithPointer(NULL)
@@ -1475,6 +1486,17 @@
         return;
     }
         
+	if ((RPC_ENCODED != m_nStyle) && (m_pNode == NULL))
+	{
+		const char*name = peekNextElementName();
+		if (0 != strcmp (pName, name))
+		{
+            logExit()
+
+            return; 
+		}
+	}
+    
     if (AXIS_FAIL == getNextNode(RPC_ENCODED != m_nStyle))
     {
         logExit()
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 3ac0c4f..719a9db 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
@@ -640,16 +640,6 @@
             {                
                 String soapTagName = (attribs[i].isAttribute() ? attribs[i].getParamNameAsSOAPString() : attribs[i].getElementNameAsSOAPString());
                 
-                // We only peek for elements, not element attributes!
-                if (attribs[i].isOptional() && !attribs[i].isAttribute() && !handleAll && !handleChoice)
-                {
-                    c_writer.write(tab1 + "peekedElementName = axiscSoapDeSerializerPeekNextElementName(pDZ);\n");
-                    c_writer.write(tab1 + "if (strcmp(peekedElementName, \"" + soapTagName + "\") == 0)\n");
-                    c_writer.write(tab1 + "{\n");
-                    
-                    tab2 += "\t";
-                }
-                
                 Type type = attribs[i].getType();
                 boolean isPointerType = false;
                 if (type.isSimpleType())
@@ -701,39 +691,18 @@
                     
                     c_writer.write(tab2 + "}\n");  // end local scope                
                 }
-                
-                if (attribs[i].isOptional() && !attribs[i].isAttribute() && !handleAll && !handleChoice)
-                {
-                    c_writer.write("\t\t\t}\n");
-                    c_writer.write("\t\telse\n");
-                    c_writer.write("\t\t\tparam->" + attribs[i].getParamNameAsMember() + " = NULL;\n");
-                }
             }
             else
             {
                 //if complex type
                 String soapTagName = attribs[i].getParamNameAsSOAPString();
-                
-                if (attribs[i].isOptional() && !handleAll && !handleChoice)
-                {
-                    c_writer.write(tab1 + "peekedElementName = axiscSoapDeSerializerPeekNextElementName(pDZ);\n");
-                    c_writer.write(tab1 + "if (strcmp(peekedElementName, \"" + soapTagName + "\") == 0)\n");
-                    
-                    tab2 += "\t";
-                }
 
                 c_writer.write(tab2 + "param->" + attribs[i].getParamNameAsMember() 
                         + " = ("  + attribs[i].getTypeName()
                         + "*)axiscSoapDeSerializerGetCmplxObject(pDZ,(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");
-                
-                if (attribs[i].isOptional()  && !handleAll && !handleChoice)
-                {
-                    c_writer.write(tab1 + "else\n");
-                    c_writer.write(tab1 + "\tparam->" + attribs[i].getParamNameAsMember() + " = NULL;\n");
-                }      
+                        + ", \"" + soapTagName + "\", Axis_URI_" + attribs[i].getTypeName() + ");\n");   
             }
 
             if (attribs[i].getChoiceElement() || attribs[i].getAllElement())
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 f66ab2d..65726c6 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
@@ -864,16 +864,6 @@
             {
                 String soapTagName = (attribs[i].isAttribute() ? attribs[i].getParamNameAsSOAPString() : attribs[i].getElementNameAsSOAPString());
                 
-                // We only peek for elements, not element attributes!
-                if (attribs[i].isOptional() && !attribs[i].isAttribute() && !handleAll && !handleChoice)
-                {
-                    c_writer.write(tab1 + "peekedElementName = pIWSDZ->peekNextElementName();\n");
-                    c_writer.write(tab1 + "if (strcmp(peekedElementName, \"" + soapTagName + "\") == 0)\n");
-                    c_writer.write(tab1 + "{\n");
-                    
-                    tab2 += "\t";
-                }
-                
                 Type type = attribs[i].getType();
                 boolean isPointerType = false;
                 if (type.isSimpleType())
@@ -923,27 +913,11 @@
                             + ", " + CUtils.getXSDEnumeratorForType( attribs[i].getTypeName()) + ");\n");
                     c_writer.write(tab2 + "}\n");                        
                 }
-                
-                // TODO - remove this chunk of code...?
-                if (attribs[i].isOptional() && !attribs[i].isAttribute() && !handleAll && !handleChoice)
-                {
-                    c_writer.write(tab1 + "}\n");
-                    c_writer.write(tab1 + "else\n");
-                    c_writer.write(tab1 + "\tparam->" + attribs[i].getParamNameAsMember() + " = NULL;\n");
-                }
             }
             else
             {
                 //if complex type
                 String soapTagName = attribs[i].getParamNameAsSOAPString();
-                
-                if (attribs[i].isOptional() && !handleAll && !handleChoice)
-                {
-                    c_writer.write(tab1 + "peekedElementName = pIWSDZ->peekNextElementName();\n");
-                    c_writer.write(tab1 + "if (strcmp(peekedElementName, \"" + soapTagName + "\") == 0)\n");
-                    
-                    tab2 += "\t";
-                }
 
                 c_writer.write(tab2 + "param->" + attribs[i].getParamNameAsMember()
                         + " = (" + attribs[i].getTypeName()
@@ -951,13 +925,6 @@
                         + ", (void*)Axis_Create_" + attribs[i].getTypeName() 
                         + ", (void*)Axis_Delete_" + attribs[i].getTypeName() 
                         + ", \"" + soapTagName + "\", Axis_URI_" + attribs[i].getTypeName() + ");\n");
-                
-                // TODO remove following chunk of code...?
-                if (attribs[i].isOptional() && !handleAll && !handleChoice)
-                {
-                    c_writer.write(tab1 + "else\n");
-                    c_writer.write(tab1 + "\tparam->" + attribs[i].getParamNameAsMember() + " = NULL;\n");
-                }
             }
 
             if (attribs[i].getChoiceElement() || attribs[i].getAllElement())
