Index: trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtils.java
===================================================================
--- trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtils.java	(revision 1932)
+++ trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtils.java	(revision 1977)
@@ -454,8 +454,8 @@
         for (Property property : fetchAllTestComponentProperties(testContext)) {
             // TODO check if this is still required
-            if (userLifeline != null) {
+            /*if (userLifeline != null) {
                 throw new RuntimeException(
                                            "TestContext must only have one TestComponent for the application of usage-based testing.");
-            }
+            }*/
             userLifeline = interaction.createLifeline(property.getName());
             userLifeline.setRepresents(property);
@@ -475,5 +475,5 @@
                 String methodName = SOAPUtils.getCalledMethodFromEvent(event);
                 String clientName = SOAPUtils.getClientNameFromEvent(event);
-                String prefix = interactionName + ":" + i + ":" + methodName + "_";
+                String prefix = interactionName + "_" + i + "_" + methodName + "_";
                 // determine lifelines
                 Lifeline msgTargetLifeline;
@@ -1036,11 +1036,40 @@
         Package instSpecPkg = null;
 
+        // FOR DEBUGGING
+//        Console.traceln(Level.FINE, "XML structure of path:" + StringTools.ENDLINE +
+//                        SOAPUtils.getSerialization(requestBody));
+//        for( Parameter param : calledOperation.getOwnedParameters() ) {
+//            System.out.println(param.getName());
+//            if( param.getType() instanceof DataType ) {
+//                for( Property prop1 : ((DataType) param.getType()).getAllAttributes() ) {
+//                    System.out.println("  " + prop1.getName());
+//                    if( prop1.getType() instanceof DataType ) {
+//                        for( Property prop2 : ((DataType) prop1.getType()).getAllAttributes() ) {
+//                            System.out.println("    " + prop2.getName());
+//                            if( prop2.getType() instanceof DataType ) {
+//                                for( Property prop3 : ((DataType) prop2.getType()).getAllAttributes() ) {
+//                                    System.out.println("      " + prop3.getName());
+//                                    if( prop3.getType() instanceof DataType ) {
+//                                        for( Property prop4 : ((DataType) prop3.getType()).getAllAttributes() ) {
+//                                            System.out.println("        " + prop4.getName());
+//                                        }
+//                                    }
+//                                }
+//                            }
+//                        }
+//                    }
+//                }
+//            }
+//        }
+        
         // Set parameters of operation
         for (Parameter param : calledOperation.getOwnedParameters()) {
             if (instSpecPkg == null) {
-                instSpecPkg = getOrCreateInstanceSpecificationPackage(param.getModel(), event);
-            }
-
-            String path = calledOperation.getName() + ":" + param.getName();
+                instSpecPkg = getOrCreateInstanceSpecificationPackage(callMessage.getModel(), event);
+            }
+
+            // TODO String path = calledOperation.getName() + ":" + param.getName();
+            String path = calledOperation.getName() + ":" + param.getType().getName();
+            // create param node
             Expression argument =
                 (Expression) callMessage.createArgument(param.getName(), param.getType(),
@@ -1048,37 +1077,64 @@
 
             if (isInParameter(param)) {
-                if (param.getType() instanceof DataType) {
-                    List<org.w3c.dom.Element> paramNodes =
-                        SOAPUtils.getMatchingChildNode(param.getType().getName(), requestBody);
-                    int multiplicityChosen = paramNodes.size();
-
-                    if (multiplicityChosen == 0 && param.getLower() > 0) {
-                        Console.traceln(Level.WARNING,
-                                        "required attribute not found in SOAP message: " + path);
-                        Console
-                            .traceln(Level.WARNING,
-                                     "setting default values for this attribute and all its children");
-                        Console.traceln(Level.FINE, "XML structure of path:" + StringTools.ENDLINE +
-                            SOAPUtils.getSerialization(requestBody));
-                        multiplicityChosen = param.getLower();
+                
+                // create parameters node
+                if (!(param.getType() instanceof DataType) ) {
+                    throw new RuntimeException("TODO error handling; parameters missing");
+                }
+                DataType parametersNode = (DataType) param.getType();
+                InstanceSpecification instSpecParameters = (InstanceSpecification) 
+                        instSpecPkg.createPackagedElement(prefix + "instspec_" + param.getType().getName(),
+                                                          UMLPackage.Literals.INSTANCE_SPECIFICATION);
+                instSpecParameters.getClassifiers().add((DataType) param.getType());
+                InstanceValue parametersValue =
+                        (InstanceValue) argument
+                            .createOperand(param.getType().getName(), param.getType(),
+                                           UMLPackage.Literals.INSTANCE_VALUE);
+                parametersValue.setInstance(instSpecParameters);
+                
+                for( Property internalParameter : parametersNode.getAllAttributes() ) {
+                    if (internalParameter.getType() instanceof DataType) {
+                        List<org.w3c.dom.Element> paramNodes =
+                            SOAPUtils.getMatchingChildNode(internalParameter.getType().getName(), requestBody);
+                        // TODO the mistake is somewhere around here ... probably
+                        //List<org.w3c.dom.Element> paramNodes =
+                        //    SOAPUtils.getMatchingChildNode(param.getName(), requestBody);
+                        int multiplicityChosen = paramNodes.size();
+    
+                        if (multiplicityChosen == 0 && internalParameter.getLower() > 0) {
+                            Console.traceln(Level.WARNING,
+                                            "required attribute not found in SOAP message: " + path);
+                            Console
+                                .traceln(Level.WARNING,
+                                         "setting default values for this attribute and all its children");
+                            Console.traceln(Level.FINE, "XML structure of path:" + StringTools.ENDLINE +
+                                SOAPUtils.getSerialization(requestBody));
+                            multiplicityChosen = internalParameter.getLower();
+                        }
+                        for (int i = 0; i < multiplicityChosen; i++) {
+                            org.w3c.dom.Element paramNode = null;
+                            if (!paramNodes.isEmpty()) {
+                                paramNode = paramNodes.get(i);
+                            }
+                            
+                            Slot slot = instSpecParameters.createSlot();
+                            slot.setDefiningFeature(internalParameter);
+
+                            InstanceValue value =
+                                (InstanceValue) slot.createValue(internalParameter.getName() + "_" + i, internalParameter.getType(),
+                                                                 UMLPackage.Literals.INSTANCE_VALUE);
+                            value.setInstance(createInstanceSpecification((DataType) internalParameter.getType(), instSpecPkg,
+                                                                          prefix, paramNode, path));
+                            /*
+                            InstanceValue value =
+                                (InstanceValue) argument
+                                    .createOperand(null, internalParameter.getType(),
+                                                   UMLPackage.Literals.INSTANCE_VALUE);
+                            value.setInstance(instSpec);*/
+                        }
                     }
-                    for (int i = 0; i < multiplicityChosen; i++) {
-                        org.w3c.dom.Element paramNode = null;
-                        if (!paramNodes.isEmpty()) {
-                            paramNode = paramNodes.get(i);
-                        }
-                        InstanceSpecification instSpec =
-                            createInstanceSpecification((DataType) param.getType(), instSpecPkg,
-                                                        prefix, paramNode, path);
-
-                        InstanceValue value =
-                            (InstanceValue) argument
-                                .createOperand(null, param.getType(),
-                                               UMLPackage.Literals.INSTANCE_VALUE);
-                        value.setInstance(instSpec);
+                    else if (internalParameter.getType() instanceof PrimitiveType) {
+                        createSlotPrimitiveType(instSpecParameters, internalParameter, requestBody, path);
                     }
-                }
-                else if (param.getType() instanceof PrimitiveType) {
-                    createOperandPrimitiveType(param, argument, requestBody, path);
                 }
             }
@@ -1133,4 +1189,5 @@
                 int multiplicityChosen = 0;
                 if (currentNode != null) {
+                    // TODO attributeNodes = SOAPUtils.getMatchingChildNode(prop.getName(), currentNode);
                     attributeNodes = SOAPUtils.getMatchingChildNode(prop.getName(), currentNode);
                     multiplicityChosen = attributeNodes.size();
@@ -1408,5 +1465,5 @@
                     argument.createOperand(null, param.getType(), UMLPackage.Literals.LITERAL_NULL);
             if (isOutParameter(param)) {
-                operand.applyStereotype(UTPUtils.getLiteralAnyStereotype(param.getModel()));
+                operand.applyStereotype(UTPUtils.getLiteralAnyStereotype(replyMessage.getModel()));
             }
         }
