Index: trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLInteractionCreator.java
===================================================================
--- trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLInteractionCreator.java	(revision 2038)
+++ trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLInteractionCreator.java	(revision 2041)
@@ -231,4 +231,7 @@
                     asynch = true;
                 }
+                if (!hasOutParameters(operation)) {
+                    asynch = true;
+                }
 
                 if (SOAPUtils.isSOAPRequest(event)) {
@@ -266,44 +269,46 @@
                 }
                 if (!asynch && SOAPUtils.isSOAPResponse(event)) {
-                    // setup reply and behavior execution specifications
-                    MessageOccurrenceSpecification replySendFragment =
-                        (MessageOccurrenceSpecification) interaction
-                            .createFragment(prefix + "replySendFragment",
-                                            UMLPackage.Literals.MESSAGE_OCCURRENCE_SPECIFICATION);
-                    MessageOccurrenceSpecification replyRecvFragment =
-                        (MessageOccurrenceSpecification) interaction
-                            .createFragment(prefix + "replyRecvFragment",
-                                            UMLPackage.Literals.MESSAGE_OCCURRENCE_SPECIFICATION);
-
-                    replySendFragment.setCovered(msgTargetLifeline);
-                    replyRecvFragment.setCovered(msgSourceLifeline);
-
-                    /*
-                     * BehaviorExecutionSpecification sourceBehaviorExecutionSpecification =
-                     * (BehaviorExecutionSpecification) interaction .createFragment(":" + methodName
-                     * + "_sourceBhvExecSpec",
-                     * UMLPackage.Literals.BEHAVIOR_EXECUTION_SPECIFICATION);
-                     * BehaviorExecutionSpecification targetBehaviorExecutionSpecification =
-                     * (BehaviorExecutionSpecification) interaction .createFragment(":" + methodName
-                     * + "_targetBhvExecSpec",
-                     * UMLPackage.Literals.BEHAVIOR_EXECUTION_SPECIFICATION);
-                     * 
-                     * sourceBehaviorExecutionSpecification.setStart(callSendFragment);
-                     * sourceBehaviorExecutionSpecification.setFinish(replyRecvFragment);
-                     * targetBehaviorExecutionSpecification.setStart(callRecvFragment);
-                     * targetBehaviorExecutionSpecification.setFinish(replySendFragment);
-                     */
-
-                    // create reply
-                    Message replyMessage = interaction.createMessage(prefix + "_reply");
-                    replyMessage.setMessageSort(MessageSort.REPLY_LITERAL);
-                    replyMessage.setSignature(calledOperation);
-                    // setReplyMessageParameters(replyMessage, calledOperation);
-                    setMessageParameters(replyMessage, calledOperation, event, prefix);
-                    replyMessage.setConnector(connector);
-                    replyMessage.setSendEvent(replySendFragment);
-                    replyMessage.setReceiveEvent(replyRecvFragment);
-                    replySendFragment.setMessage(replyMessage);
-                    replyRecvFragment.setMessage(replyMessage);
+                    if (hasOutParameters(calledOperation)) {
+                        // setup reply and behavior execution specifications
+                        MessageOccurrenceSpecification replySendFragment =
+                            (MessageOccurrenceSpecification) interaction
+                                .createFragment(prefix + "replySendFragment",
+                                                UMLPackage.Literals.MESSAGE_OCCURRENCE_SPECIFICATION);
+                        MessageOccurrenceSpecification replyRecvFragment =
+                            (MessageOccurrenceSpecification) interaction
+                                .createFragment(prefix + "replyRecvFragment",
+                                                UMLPackage.Literals.MESSAGE_OCCURRENCE_SPECIFICATION);
+
+                        replySendFragment.setCovered(msgTargetLifeline);
+                        replyRecvFragment.setCovered(msgSourceLifeline);
+
+                        /*
+                         * BehaviorExecutionSpecification sourceBehaviorExecutionSpecification =
+                         * (BehaviorExecutionSpecification) interaction .createFragment(":" +
+                         * methodName + "_sourceBhvExecSpec",
+                         * UMLPackage.Literals.BEHAVIOR_EXECUTION_SPECIFICATION);
+                         * BehaviorExecutionSpecification targetBehaviorExecutionSpecification =
+                         * (BehaviorExecutionSpecification) interaction .createFragment(":" +
+                         * methodName + "_targetBhvExecSpec",
+                         * UMLPackage.Literals.BEHAVIOR_EXECUTION_SPECIFICATION);
+                         * 
+                         * sourceBehaviorExecutionSpecification.setStart(callSendFragment);
+                         * sourceBehaviorExecutionSpecification.setFinish(replyRecvFragment);
+                         * targetBehaviorExecutionSpecification.setStart(callRecvFragment);
+                         * targetBehaviorExecutionSpecification.setFinish(replySendFragment);
+                         */
+
+                        // create reply
+                        Message replyMessage = interaction.createMessage(prefix + "_reply");
+                        replyMessage.setMessageSort(MessageSort.REPLY_LITERAL);
+                        replyMessage.setSignature(calledOperation);
+                        // setReplyMessageParameters(replyMessage, calledOperation);
+                        setMessageParameters(replyMessage, calledOperation, event, prefix);
+                        replyMessage.setConnector(connector);
+                        replyMessage.setSendEvent(replySendFragment);
+                        replyMessage.setReceiveEvent(replyRecvFragment);
+                        replySendFragment.setMessage(replyMessage);
+                        replyRecvFragment.setMessage(replyMessage);
+                    }
                 }
 
@@ -395,5 +400,28 @@
                             multiplicityChosen = internalParameter.getLower();
                         }
-                        if (multiplicityChosen > 0) {
+                        if (multiplicityChosen == 0 && requestBody == null) {
+                            // create parameters node with empty instance specification as value
+                            Slot slot = instSpecParameters.createSlot();
+                            slot.setDefiningFeature(internalParameter);
+
+                            InstanceValue value =
+                                (InstanceValue) slot
+                                    .createValue(internalParameter.getName() + "_" + 0,
+                                                 internalParameter.getType(),
+                                                 UMLPackage.Literals.INSTANCE_VALUE);
+                            InstanceSpecification instSpec =
+                                (InstanceSpecification) instSpecPkg
+                                    .createPackagedElement(prefix +
+                                                               "instspec" +
+                                                               instSpecNumber.intValue() +
+                                                               "_" +
+                                                               internalParameter.getType()
+                                                                   .getName(),
+                                                           UMLPackage.Literals.INSTANCE_SPECIFICATION);
+                            instSpec.getClassifiers().add((DataType) internalParameter.getType());
+                            instSpecNumber.setValue(instSpecNumber.intValue() + 1);
+                            value.setInstance(instSpec);
+                        }
+                        else if (multiplicityChosen > 0) {
                             Slot slot = instSpecParameters.createSlot();
                             slot.setDefiningFeature(internalParameter);
@@ -677,5 +705,4 @@
                         slot.setDefiningFeature(prop);
                         for (int i = 0; i < multiplicityChosen; i++) {
-                            // TODO maybe not yet correct
                             org.w3c.dom.Element attributeNode = null;
                             if (attributeNodes != null && !attributeNodes.isEmpty()) {
@@ -797,7 +824,4 @@
                     prop.getType().getName());
                 Console.traceln(Level.SEVERE, "attribute is ignored!");
-                // TODO
-                // throw new RuntimeException("unknown primitive type: " +
-                // prop.getType().getName());
             }
         }
@@ -973,4 +997,25 @@
     }
 
+    /**
+     * <p>
+     * Checks if a operation has an output parameter.
+     * </p>
+     * 
+     * @param operation
+     *            operation that is checked
+     * @return true if pilot has an operation
+     */
+    private boolean hasOutParameters(Operation operation) {
+        if (operation == null) {
+            throw new RuntimeException("operation must not be null");
+        }
+        for (Parameter param : operation.getOwnedParameters()) {
+            if (UMLUtils.isOutParameter(param)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     // /////////////////////
     // DEBUGGING METHODS //
