diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java
index 6f59d31f0744f550685d7402e9b5f7b7d7ca0a3a..c6fd914d32ca4ed753e193296133d4f105877d69 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/AdaptationControl.java
@@ -8,6 +8,7 @@ import org.apache.log4j.BasicConfigurator;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.xmi.DanglingHREFException;
 
 import edu.kit.ipd.descartes.adaptation.evaluation.WeightingFunctionEvaluator;
 import edu.kit.ipd.descartes.adaptation.model.analysis.IModelAnalyzer;
@@ -116,8 +117,11 @@ public class AdaptationControl {
                 logger.debug("Saving tactics evaluation results...");
                 adaptationProcessModelLoader.saveAll();
             } catch (IOException e) {
-                logger.error("Error while persisting evaluation results.", e);
-            }
+                if (e.getCause() instanceof DanglingHREFException)
+                    logger.error("Error while persisting results because of dangling references. Probably not all changes have been saved");
+                else
+                    logger.error("Error while persisting evaluation results.", e);
+            } 
 
             iteration++;
         }
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/AdaptationProcessModelLoader.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/AdaptationProcessModelLoader.java
index 44b98432466d6ccb5d7ec4672578b98a5404bbc4..92a40c7c2380e68e0d9ba5c2326c07851185f192 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/AdaptationProcessModelLoader.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/AdaptationProcessModelLoader.java
@@ -47,9 +47,10 @@ public class AdaptationProcessModelLoader extends AbstractEcoreModelLoader {
     public void saveAll() throws IOException {
 
         EList<Resource> resources = getResourceSet().getResources();
-        Map<String, Boolean> options = new HashMap<String, Boolean>();
-        options.put(XMIResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
-        options.put(XMIResource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER, Boolean.TRUE);
+        Map<String, String> options = new HashMap<String, String>();
+        options.put(XMIResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE.toString());
+        options.put(XMIResource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER, Boolean.TRUE.toString());
+        options.put(XMIResource.OPTION_PROCESS_DANGLING_HREF, XMIResource.OPTION_PROCESS_DANGLING_HREF_THROW);
 
         for (Resource res : resources) {
             res.save(options);
@@ -68,7 +69,6 @@ public class AdaptationProcessModelLoader extends AbstractEcoreModelLoader {
         for (EPackage ePackage : DMM_EPACKAGES) {
             getResourceSet().getResourceFactoryRegistry().getExtensionToFactoryMap().put(ePackage.getNsURI(), ePackage);
         }
-
     }
 
     public static DistributedDataCenter getDistributedDataCenter() {
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/DmmModelActionHandler.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/DmmModelActionHandler.java
index f64acec4f948353b9b1d6810b4027a5fd5becc63..03f67e36a2cdeab600876269540b41a4b3c5471f 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/DmmModelActionHandler.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/DmmModelActionHandler.java
@@ -7,6 +7,7 @@ import org.apache.log4j.Logger;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xmi.DanglingHREFException;
 
 import edu.kit.ipd.descartes.adaptation.IActionHandler;
 import edu.kit.ipd.descartes.adaptation.exceptions.OperationNotPerformedException;
@@ -44,7 +45,10 @@ public class DmmModelActionHandler implements IActionHandler {
         try {
             adaptProcessModelMgr.saveAll();
         } catch (IOException e) {
-            logger.error("Error while saving models", e);
+            if (e.getCause() instanceof DanglingHREFException)
+                logger.error("Error while persisting results because of dangling references. Probably not all changes have been saved");
+            else
+                logger.error("Error while saving models", e);
         }
     }
 
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/WeightingFunctionHelper.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/WeightingFunctionHelper.java
index 4e92239ffacf2e685994414344f284b87323b3ce..c0770084bad4fa1b54d39752442c30fcc27afc5a 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/WeightingFunctionHelper.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/WeightingFunctionHelper.java
@@ -15,37 +15,43 @@ public class WeightingFunctionHelper {
      * 
      * @param function
      * @param metricType
-     * @return 
-     *  Returns the weight of the {@code meticType} of the given {@code function}.<br>
-     *  Returns {@code Double.NaN} if the {@code metricType} was not found.
+     * @return Returns the weight of the {@code meticType} of the given {@code function}.<br>
+     *         Returns {@code Double.NaN} if the {@code metricType} was not found.
      */
-	public static double getWeightForMetricType(WeightingFunction function, MetricType metricType) {
-		EList<WeightedMetric> weightedMetrics = function.getWeightedMetrics();
-
-		for (WeightedMetric weightedMetric : weightedMetrics) {
-			if (EcoreUtil.equals(weightedMetric.getMetricType(), metricType))
-				return weightedMetric.getWeight();
-		}
-
-		return Double.NaN;
-	}
-
-	/**
-	 * Searches the {@link MetricValue} of the given {@link MetricType} in the
-	 * {@link Result} <code>resultBefore</code>
-	 * 
-	 * @param metricType The type of the metric to find
-	 * @param resultBefore The result to search
-	 * @return
-	 */
-	public static double getValueForMetricType(MetricType metricType, Result resultBefore) {
-		EList<MetricValue> metricValues = resultBefore.getMetricValues();
-
-		for (MetricValue metricValue : metricValues) {
-			if (metricValue.getMetricType().equals(metricType))
-				return metricValue.getValue();
-		}
-		return Double.NaN;
-	}
+    public static double getWeightForMetricType(WeightingFunction function, MetricType metricType) {
+        EList<WeightedMetric> weightedMetrics = function.getWeightedMetrics();
 
+        for (WeightedMetric weightedMetric : weightedMetrics) {
+            if (EcoreUtil.equals(weightedMetric.getMetricType(), metricType))
+                return weightedMetric.getWeight();
+        }
+
+        return Double.NaN;
+    }
+
+    /**
+     * Searches the {@link MetricValue} of the given {@link MetricType} in the {@link Result}
+     * <code>resultBefore</code>
+     * 
+     * @param metricType
+     *            The type of the metric to find
+     * @param resultBefore
+     *            The result to search
+     * @return
+     */
+    public static double getValueForMetricType(MetricType metricType, Result resultBefore) {
+        EList<MetricValue> metricValues = resultBefore.getMetricValues();
+
+        for (MetricValue metricValue : metricValues) {
+            if (sameMetricType(metricValue, metricType))
+                return metricValue.getValue();
+        }
+        return Double.NaN;
+    }
+
+    public static boolean sameMetricType(MetricValue metricValue, MetricType metricType) {
+//        return metricValue.getMetricType().equals(metricType);
+        return (metricValue.getMetricType().getName().equals(metricType.getName()) 
+                && metricValue.getMetricType().getId().equals(metricType.getId()));
+    }
 }
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/ObservationRepositoryHandler.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/ObservationRepositoryHandler.java
index 49047fbe98701f8d707d21f9533c1a16845fbc22..c2022c9289a63a2ffa788890e3616cdc26fea909 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/ObservationRepositoryHandler.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/ObservationRepositoryHandler.java
@@ -1,5 +1,7 @@
 package edu.kit.ipd.descartes.adaptation.model.perfdatarepo;
 
+import static edu.kit.ipd.descartes.adaptation.model.perfdatarepo.PerfDataRepoConverter.convertObservableImpact;
+
 import org.apache.log4j.Logger;
 import org.eclipse.emf.common.util.URI;
 
@@ -15,19 +17,19 @@ public class ObservationRepositoryHandler implements IPerformanceDataRepositoryH
     
     public ObservationRepositoryHandler() {
         modelLoader = new ObservationRepositoryModelLoader();
-        logger.debug("ObservationRepositoryHandler instantiated.");
+        logger.debug("ObservationRepositoryHandler loaded.");
     }
     
     @Override
     public Impact getLatestImpact() {
-        // TODO Auto-generated method stub
-        return null;
+        return convertObservableImpact(repository.getLatestImpact());
     }
 
     @Override
     public Impact getImpactAt(int position) {
-        // TODO Auto-generated method stub
-        return null;
+        if (position > repository.getImpacts().size() - 1)
+            return null;
+        return convertObservableImpact(repository.getImpacts().get(position));
     }
 
     @Override
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/ObservationRepositoryModelLoader.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/ObservationRepositoryModelLoader.java
index e53ffb321056d3adddf0f38533c3aea9545111e0..8eeb911d2a023b07542a01c8666d1d96b3d3d209 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/ObservationRepositoryModelLoader.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/ObservationRepositoryModelLoader.java
@@ -1,15 +1,45 @@
 package edu.kit.ipd.descartes.adaptation.model.perfdatarepo;
 
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
 
 import edu.kit.ipd.descartes.adaptation.model.AbstractEcoreModelLoader;
+import edu.kit.ipd.descartes.ql.models.repository.RepositoryPackage;
 
 public class ObservationRepositoryModelLoader extends AbstractEcoreModelLoader {
 
+    public static final EPackage[] OBSERVATION_REPO_EPACKAGES = new EPackage[] { 
+        RepositoryPackage.eINSTANCE
+        };
+
+    private static ObservationRepositoryModelLoader instance = null;
+
+    public static ObservationRepositoryModelLoader getInstance() {
+        if (instance == null) {
+            instance = new ObservationRepositoryModelLoader();
+        }
+        return instance;
+    }
+    
+    public ObservationRepositoryModelLoader() {
+        initializeResourceSet(new ResourceSetImpl());
+    }
+    
     @Override
     public void initializeResourceSet(ResourceSet resourceSet) {
-        // TODO Auto-generated method stub
+        setResourceSet(resourceSet);
+        
+        /* Register the default resource factory -- only needed for stand-alone! */
+        getResourceSet().getResourceFactoryRegistry().getExtensionToFactoryMap()
+                .put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());
 
+        /* Register also the packages needed for the DMM meta model */
+        for (EPackage ePackage : OBSERVATION_REPO_EPACKAGES) {
+            getResourceSet().getResourceFactoryRegistry().getExtensionToFactoryMap().put(ePackage.getNsURI(), ePackage);
+        }
     }
 
 }
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/PerfDataRepoConverter.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/PerfDataRepoConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..4905024b2a505c838c3065b25983423f4e26792e
--- /dev/null
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/PerfDataRepoConverter.java
@@ -0,0 +1,77 @@
+package edu.kit.ipd.descartes.adaptation.model.perfdatarepo;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import edu.kit.ipd.descartes.perfdatarepo.Impact;
+import edu.kit.ipd.descartes.perfdatarepo.MeasuredEntity;
+import edu.kit.ipd.descartes.perfdatarepo.MetricType;
+import edu.kit.ipd.descartes.perfdatarepo.MetricValue;
+import edu.kit.ipd.descartes.perfdatarepo.PerfdatarepoFactory;
+import edu.kit.ipd.descartes.perfdatarepo.Result;
+import edu.kit.ipd.descartes.ql.models.mapping.domain.DecimalResult;
+import edu.kit.ipd.descartes.ql.models.mapping.domain.Entity;
+import edu.kit.ipd.descartes.ql.models.mapping.domain.Probe;
+import edu.kit.ipd.descartes.ql.models.mapping.domain.Resource;
+import edu.kit.ipd.descartes.ql.models.mapping.domain.Service;
+import edu.kit.ipd.descartes.ql.models.mapping.mapping.EntityMapping;
+import edu.kit.ipd.descartes.ql.models.repository.ObservableImpact;
+import edu.kit.ipd.descartes.ql.models.repository.Observation;
+
+public class PerfDataRepoConverter {
+    
+    public static Impact convertObservableImpact(ObservableImpact o) {
+        Impact impact = PerfdatarepoFactory.eINSTANCE.createImpact();
+        impact.setId(o.getIdentifier());
+        impact.setName("ObservableImpact (ID: " + o.getIdentifier() + ")");
+        impact.setBefore(convertResult(o.getBefore()));
+        impact.setAfter(convertResult(o.getAfter()));
+        return impact;
+    }
+
+    public static Result convertResult(Observation o) {
+        Result result = PerfdatarepoFactory.eINSTANCE.createResult();
+        result.setId(o.getIdentifier());
+        result.setName("Observation (ID: " + o.getIdentifier() + ")");
+        Collection<MetricValue> values = convertMapping(o.getObservation());
+        result.getMetricValues().addAll(values);
+        return result;
+    }
+
+    public static Collection<MetricValue> convertMapping(EntityMapping observation) {
+        Collection<MetricValue> values = new ArrayList<MetricValue>();
+        
+        for (Resource r : observation.getResources()) {
+            values.addAll(convertProbes(r));        
+        }
+        
+        for (Service s : observation.getServices()) {
+            values.addAll(convertProbes(s));   
+        }
+        
+        return values;
+    }
+
+    private static Collection<MetricValue> convertProbes(Entity e) {
+        Collection<MetricValue> values = new ArrayList<MetricValue>();
+        MetricType mType = PerfdatarepoFactory.eINSTANCE.createMetricType();
+        mType.setName(e.getProbes().get(0).getMetricName());
+        mType.setId(e.getProbes().get(0).getMetricName());
+        MeasuredEntity entity = PerfdatarepoFactory.eINSTANCE.createMeasuredEntity();
+        entity.setName(e.getAlias());
+        entity.setId(e.getIdentifier());
+
+        for (Probe p : e.getProbes()) {
+            DecimalResult r = (DecimalResult) p;
+            MetricValue value = PerfdatarepoFactory.eINSTANCE.createMetricValue();
+            value.setMeasuredEntity(entity);
+            value.setName(e.getAlias() + ": " + r.getMetricName());
+            value.setMetricType(mType);
+            value.setValue(r.getValue().doubleValue());
+            values.add(value);
+        }
+        
+        return values;
+    }
+
+}
diff --git a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/PerformanceDataRepositoryHandler.java b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/PerformanceDataRepositoryHandler.java
index ab913c1c186a072b617c2138bbd77c6937c394d8..72305a2d17c3972b1a4dd0266b7b287cec6d5643 100644
--- a/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/PerformanceDataRepositoryHandler.java
+++ b/edu.kit.ipd.descartes.adaptation/src/edu/kit/ipd/descartes/adaptation/model/perfdatarepo/PerformanceDataRepositoryHandler.java
@@ -24,14 +24,12 @@ public class PerformanceDataRepositoryHandler implements IPerformanceDataReposit
 
     @Override
     public Impact getLatestImpact() {
-        // TODO Auto-generated method stub
-        return null;
+        return PerfDataRepoHelper.getLatestImpact(repository);
     }
 
     @Override
     public Impact getImpactAt(int position) {
-        // TODO Auto-generated method stub
-        return null;
+        return PerfDataRepoHelper.getImpactAt(repository, position);
     }
 
 }