Index: /trunk/autoquest-plugin-uml-test/src/test/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtilsTest.java
===================================================================
--- /trunk/autoquest-plugin-uml-test/src/test/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtilsTest.java	(revision 1897)
+++ /trunk/autoquest-plugin-uml-test/src/test/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtilsTest.java	(revision 1898)
@@ -21,4 +21,5 @@
 import java.util.List;
 import java.util.Random;
+import java.util.logging.Level;
 
 import org.apache.commons.lang.SerializationUtils;
@@ -29,4 +30,5 @@
 import org.eclipse.uml2.uml.UMLPackage;
 import org.junit.After;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -40,4 +42,6 @@
 import de.ugoe.cs.autoquest.usageprofiles.FirstOrderMarkovModel;
 import de.ugoe.cs.autoquest.usageprofiles.IStochasticProcess;
+import de.ugoe.cs.util.console.Console;
+import de.ugoe.cs.util.console.TextConsole;
 
 /**
@@ -52,7 +56,9 @@
     private final static String OUTPUT_DIR = "target/tmp/test-outputs/";
 
-    /**
-    *
-    */
+    @BeforeClass
+    public static void setUpBeforeClass() throws Exception {
+        Console.getInstance().registerTraceListener(new TextConsole(Level.INFO));
+    }
+    
     @After
     public void tearDown() throws Exception {
@@ -181,5 +187,4 @@
         Collection<List<Event>> httpSequences = parser.getSequences();
 
-        
         Model model =
             ModelUtils.loadModel(ClassLoader
@@ -197,6 +202,5 @@
         }
 
-        ModelUtils.writeModelToFile(model, OUTPUT_DIR + "testCreateInteractionFromEventSequence_2_result.uml");
-        
+        ModelUtils.writeModelToFile(model, OUTPUT_DIR + "testCreateInteractionFromEventSequence_1_result.uml");
     }
     
@@ -294,4 +298,64 @@
         ModelUtils.writeModelToFile(model, OUTPUT_DIR + "testCreateScheduling_1_result.uml");
     }
+    
+    @Test
+    public void testValidateModelWithLog_1() throws Exception {
+        HTTPLogParser parser =
+                new HTTPLogParser(new File(ClassLoader
+                    .getSystemResource("testCreateInteractionFromEventSequence_1_properties.txt")
+                    .getFile()));
+        parser
+            .parseFile(new File(ClassLoader
+                .getSystemResource("testCreateInteractionFromEventSequence_1_usagedata.log")
+                .getFile()));
+        Collection<List<Event>> httpSequences = parser.getSequences();
+
+        
+        Model model =
+            ModelUtils.loadModel(ClassLoader
+                .getSystemResourceAsStream("testCreateInteractionFromEventSequence_1_model.uml"));
+        
+        UMLUtils.validateModelWithLog(httpSequences, model, null);
+    }
+    
+    @Test
+    public void testValidateModelWithLog_2() throws Exception {
+        HTTPLogParser parser =
+                new HTTPLogParser(new File(ClassLoader
+                    .getSystemResource("testCreateInteractionFromEventSequence_2_properties.txt")
+                    .getFile()));
+        parser
+            .parseFile(new File(ClassLoader
+                .getSystemResource("testCreateInteractionFromEventSequence_2_usagedata.log")
+                .getFile()));
+        Collection<List<Event>> httpSequences = parser.getSequences();
+
+        
+        Model model =
+            ModelUtils.loadModel(ClassLoader
+                .getSystemResourceAsStream("testCreateInteractionFromEventSequence_2_model.uml"));
+        
+        UMLUtils.validateModelWithLog(httpSequences, model, null);
+    }
+    
+    @Test
+    public void testValidateModelWithLog_HL7_v2() throws Exception {
+        HTTPLogParser parser =
+                new HTTPLogParser(new File(ClassLoader
+                    .getSystemResource("hl7_servicenamemap.txt")
+                    .getFile()));
+        parser
+            .parseFile(new File(ClassLoader
+                .getSystemResource("testCreateInteractionFromEventSequence_1_usagedata.log")
+                .getFile()));
+        Collection<List<Event>> httpSequences = parser.getSequences();
+
+        
+        Model model =
+            ModelUtils.loadModel(ClassLoader
+                .getSystemResourceAsStream("hl7model_v2.uml"));
+        
+        UMLUtils.validateModelWithLog(httpSequences, model, "IXSTestSuite_1");
+    }
 
     private void deleteFiles(File file) {
Index: /trunk/autoquest-plugin-uml-test/src/test/resources/hl7_servicenamemap.txt
===================================================================
--- /trunk/autoquest-plugin-uml-test/src/test/resources/hl7_servicenamemap.txt	(revision 1897)
+++ /trunk/autoquest-plugin-uml-test/src/test/resources/hl7_servicenamemap.txt	(revision 1898)
@@ -2,4 +2,4 @@
 /midas/rlus/update/xdw = rlusService
 /midas/rlus/update/cda2report = rlusService
-/midas/ixsmq/update/pocdpatient = ixsmq_property
-/midas/ixsmq/query/pocdpatient = ixsmq_property
+/midas/ixsmq/update/pocdpatient = ixsService
+/midas/ixsmq/query/pocdpatient = ixsService
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 1897)
+++ /trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtils.java	(revision 1898)
@@ -19,4 +19,5 @@
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -25,4 +26,7 @@
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.logging.Level;
+import java.util.Set;
+import java.util.TreeSet;
 
 import org.eclipse.emf.common.util.EList;
@@ -30,5 +34,5 @@
 import org.eclipse.uml2.uml.ActivityEdge;
 import org.eclipse.uml2.uml.ActivityNode;
-import org.eclipse.uml2.uml.BehaviorExecutionSpecification;
+import org.eclipse.uml2.uml.CallConcurrencyKind;
 import org.eclipse.uml2.uml.CallOperationAction;
 import org.eclipse.uml2.uml.Comment;
@@ -62,4 +66,5 @@
 import de.ugoe.cs.autoquest.plugin.uml.eventcore.UMLTransitionType;
 import de.ugoe.cs.autoquest.usageprofiles.IStochasticProcess;
+import de.ugoe.cs.util.console.Console;
 
 /**
@@ -72,4 +77,112 @@
 public class UMLUtils {
 
+    public static void validateModelWithLog(Collection<List<Event>> sequences, Model model, String testContextName) {
+        final Profile utpProfile = model.getAppliedProfile("utp");
+        final Stereotype utpTestComponent = (Stereotype) utpProfile.getOwnedMember("TestComponent");
+        final Stereotype utpSUT = (Stereotype) utpProfile.getOwnedMember("SUT");
+        final Stereotype utpTestContext = (Stereotype) utpProfile.getOwnedMember("TestContext");
+
+        Component testContext = fetchTestContext(model, utpTestContext, testContextName);
+        if (testContext == null) {
+            if( testContextName==null ) {
+                Console.traceln(Level.SEVERE, "Could not find any TestContext in the model.");
+                
+            } else {
+                Console.traceln(Level.SEVERE, "Could not find TestContext in the model: " + testContextName);
+            }
+            Console.traceln(Level.SEVERE, "Hint: Check if you have applied the TestContext stereotype correctly in the model.");
+        }
+        
+        // Create list of unique methods calls
+        HashMap<String, Set<String>> calledMethods = new HashMap<>();
+        for( List<Event> sequence : sequences ) {
+            for( Event event : sequence ) {
+                if( event.getType() instanceof SOAPEventType ) {
+                    SOAPEventType eventType = (SOAPEventType) event.getType();
+                    Set<String> curCalledMethods = calledMethods.get(eventType.getServiceName());
+                    if( curCalledMethods==null ) {
+                        curCalledMethods = new TreeSet<>();
+                        calledMethods.put(eventType.getServiceName(), curCalledMethods);
+                    }
+                    curCalledMethods.add(eventType.getCalledMethod());
+                }
+            }
+        }
+        
+        Console.traceln(Level.INFO, "Found the following services and operations in the usage data: ");
+        for( Entry<String, Set<String>> entry : calledMethods.entrySet() ) {
+            Console.traceln(Level.INFO, "\tService \"" + entry.getKey() + "\": ");
+            Iterator<String> iter = entry.getValue().iterator();
+            StringBuilder strBld = new StringBuilder();
+            while (iter.hasNext()) {
+                strBld.append(iter.next());
+                if (iter.hasNext()) {
+                    strBld.append(", ");
+                }
+            }
+            Console.traceln(Level.INFO, strBld.toString());
+        }
+        
+        // fetch all SUTs and TestComponents
+        HashMap<String, Property> properties = new HashMap<>();
+        for (Property property : testContext.getAllAttributes()) {
+            if (property.getAppliedStereotypes().contains(utpSUT)) {
+                properties.put(property.getName(),property);
+            }
+            else if (property.getType().getAppliedStereotypes().contains(utpTestComponent)) {
+                properties.put(property.getName(),property);
+            }
+        }
+        Console.traceln(Level.INFO, "Found the following services in the TestConfiguration:");
+        for( Entry<String, Property> entry : properties.entrySet() ) {
+            Console.traceln(Level.INFO, "\t" + entry.getKey());
+        }
+        
+        for( Entry<String, Set<String>> entry : calledMethods.entrySet() ) {
+            String serviceName = entry.getKey();
+            Console.traceln(Level.INFO, "Checking service: " + serviceName);
+            Set<String> methodNames = entry.getValue();
+            Property property = properties.get(serviceName);
+            if( property==null ) {
+                Console.traceln(Level.SEVERE, "\tCould not find property for service: " + serviceName);
+                Console.traceln(Level.SEVERE, "\tHint: Check service name map and/or model if the service is present and spelled correctly.");
+                Console.traceln(Level.SEVERE, "\tHint: Check if the SUT/TestComponent stereotype has been applied correctly in this TestContext.");
+            } else {
+                Set<Interface> interfaces = getRealizedInterfacesFromProperty(property);
+                if( interfaces.isEmpty() ) {
+                    Console.traceln(Level.SEVERE, "\tCould not find any interfaces implementing the property for service: " + serviceName);
+                    Console.traceln(Level.SEVERE, "\tHint: Check if the property correctly realizes the interfaces in the model.");
+                } else {
+                    Console.traceln(Level.INFO, "\tFound the following realized interfaces for the service \"" + serviceName + "\": ");
+                    Iterator<Interface> iter = interfaces.iterator();   
+                    while (iter.hasNext()) {
+                        String interfaceName = iter.next().getName();
+                        StringBuilder strBld = new StringBuilder();
+                        strBld.append(interfaceName);
+                        if (iter.hasNext()) {
+                            strBld.append(", ");
+                        }
+                        Console.traceln(Level.INFO, strBld.toString());
+                    }
+                    for( String methodName : methodNames ) {
+                        boolean methodFound = true;
+                        for( Interface intface : interfaces ) {
+                            if (getOperationFromName(intface.getOperations(), methodName) != null) {
+                                // interface found
+                                Console.traceln(Level.INFO, "\tMethod " + methodName + " found in interface " + intface.getName() );
+                                methodFound = true;
+                            }
+                        }
+                        if( !methodFound ) {
+                            Console.traceln(Level.SEVERE, "\tCould not find operation: " + methodName);
+                            Console.traceln(Level.SEVERE, "\tHint: check if operation is present and spelled correctly");
+                        }
+                    }
+                }
+            }
+        }
+        
+    }
+    
     /**
      * <p>
@@ -355,5 +468,5 @@
                 }
                 // determine correct target interface
-                List<Interface> targetInterfaces =
+                Set<Interface> targetInterfaces =
                     getRealizedInterfacesFromProperty((Property) msgTargetLifeline.getRepresents());
                 if (targetInterfaces.isEmpty()) {
@@ -363,5 +476,4 @@
                 Interface targetInterface = null;
                 for (Interface intface : targetInterfaces) {
-                    System.out.println(intface.getOperations());
                     if (getOperationFromName(intface.getOperations(), methodName) != null) {
                         // interface found
@@ -412,7 +524,8 @@
                 callRecvFragment.setMessage(callMessage);
 
-                // TODO somehow infer if called operation is SYNCH or ASYNCH
-                // possibly requires additional stereotype
                 boolean asynch = false;
+                if( calledOperation.getConcurrency()==CallConcurrencyKind.CONCURRENT_LITERAL ) {
+                    asynch = true;
+                }
                 if (asynch) {
                     // Create ASYNCH call
@@ -700,10 +813,10 @@
     }
 
-    private static List<Interface> getRealizedInterfacesFromProperty(Property property) {
+    private static Set<Interface> getRealizedInterfacesFromProperty(Property property) {
         return getRealizedInterfaceFromComponent((Component) property.getType());
     }
 
-    private static List<Interface> getRealizedInterfaceFromComponent(Component comp) {
-        List<Interface> interfaces = new LinkedList<>();
+    private static Set<Interface> getRealizedInterfaceFromComponent(Component comp) {
+        Set<Interface> interfaces = new HashSet<>();
         // Interface myInterface = null;
         for (Property property : comp.getAttributes()) {
