diff --git a/jastadd-mquat-base/src/main/jastadd/mquat.parser b/jastadd-mquat-base/src/main/jastadd/mquat.parser
index 497525d5b99fbb1e52c8d6b06ce5a6a08655f27a..7c882be6467a830e6c07e96722c898b46727564c 100644
--- a/jastadd-mquat-base/src/main/jastadd/mquat.parser
+++ b/jastadd-mquat-base/src/main/jastadd/mquat.parser
@@ -330,7 +330,7 @@ ResourceMapping resource_mapping =
     :}
   | NAME.i RIGHT_ARROW NAME.res LB_CURLY resource_mapping.rml* RB_CURLY
     {:
-      ResourceMapping result = new ResourceResourceMapping(null, rml, null);
+      ResourceMapping result = new ResourceResourceMapping(null, null, rml);
       mph.resourceMappingTerminals.put(result, new Tuple<>(i, res));
       return result;
     :}
diff --git a/jastadd-mquat-base/src/main/jastadd/solution/Helpers.jadd b/jastadd-mquat-base/src/main/jastadd/solution/Helpers.jadd
index b0b8fa7389af4c5d64186c142acb33805788f752..37113b5231d025e5d5d1ffab39c214408a671060 100644
--- a/jastadd-mquat-base/src/main/jastadd/solution/Helpers.jadd
+++ b/jastadd-mquat-base/src/main/jastadd/solution/Helpers.jadd
@@ -38,9 +38,6 @@ aspect Helpers {
     ResourceClassMapping copy = new ResourceClassMapping();
     copy.setInstance(this.getInstance());
     copy.setResourceClass(this.getResourceClass());
-    for (ResourceMapping subMapping : getResourceMappingList()) {
-      copy.addResourceMapping(subMapping.deepCopy());
-    }
     return copy;
   }
 
diff --git a/jastadd-mquat-base/src/main/jastadd/solution/Printing.jrag b/jastadd-mquat-base/src/main/jastadd/solution/Printing.jrag
index f9eca61f9b2aa2d621d95dfa08790ad1515158fe..01d8cecd64ca047d7e70b39dc0e9760601654268 100644
--- a/jastadd-mquat-base/src/main/jastadd/solution/Printing.jrag
+++ b/jastadd-mquat-base/src/main/jastadd/solution/Printing.jrag
@@ -46,15 +46,7 @@ aspect Printing {
     MquatString result = new MquatString(settings, indentationLevel);
     result.append(getInstance() == null ? "<no instance>" : getInstance().name())
         .append(" -> ").append((getResourceClass() == null) ? "<no resource class>" : "{" + getResourceClass().name() + "}");
-    if (getNumResourceMapping() > 0) {
-      result.append(" {").lb().ind();
-      for (ResourceMapping subMapping : getResourceMappingList()) {
-        result.append(subMapping.print(settings, indentationLevel));
-      }
-      result.und().append("}").lb();
-    } else {
-      result.lb();
-    }
+    result.lb();
     return result;
   }
 
diff --git a/jastadd-mquat-base/src/main/jastadd/solution/Solution.ast b/jastadd-mquat-base/src/main/jastadd/solution/Solution.ast
index c073ee95ce27c018c8318f40fdc193e9cc5ad58f..e2e84a7718bb310870cf9480f4f705e71f2f5261 100644
--- a/jastadd-mquat-base/src/main/jastadd/solution/Solution.ast
+++ b/jastadd-mquat-base/src/main/jastadd/solution/Solution.ast
@@ -1,6 +1,6 @@
 Solution ::= <Model:Root> Assignment* ;
 Assignment ::= <TopLevel:boolean> <Request:Request> <Implementation:Implementation> ResourceMapping ComponentMapping* ;
-abstract ResourceMapping ::= <Instance:Instance> ResourceMapping* ;
-ResourceResourceMapping:ResourceMapping ::= <Resource:Resource> ;
+abstract ResourceMapping ::= <Instance:Instance> ;
+ResourceResourceMapping:ResourceMapping ::= <Resource:Resource> ResourceMapping* ;
 ResourceClassMapping:ResourceMapping ::= <ResourceClass:ResourceClass> ;
 ComponentMapping ::= <Instance:Instance> Assignment ;
diff --git a/jastadd-mquat-base/src/main/jastadd/solution/Traversal.jrag b/jastadd-mquat-base/src/main/jastadd/solution/Traversal.jrag
index bad9ede5296ae1c2fcdd9d7614aca1591f2dbc9f..4d409a3196b217ad66effecf55dd2407c249ec62 100644
--- a/jastadd-mquat-base/src/main/jastadd/solution/Traversal.jrag
+++ b/jastadd-mquat-base/src/main/jastadd/solution/Traversal.jrag
@@ -30,13 +30,8 @@ aspect Traversal {
     }
   }
   eq ResourceClassMapping.mappedResource(Instance instance) {
-    for (ResourceMapping subMapping : this.getResourceMappingList()) {
-      Resource result = subMapping.mappedResource(instance);
-      if (result != null) {
-        return result;
-      }
-    }
-    return null;
+    // TODO this method does not make sense.
+    throw new RuntimeException("A ResourceClassMapping does not have a mapped resource!");
   }
 
   syn java.util.List<Assignment> Assignment.allAssignments() {
diff --git a/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd b/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd
index c5653a728f575d08c87b1f26f4807d96dde43695..2dd9c87b2e62a0fde75a683d4ca6e6c51ada2b9e 100644
--- a/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd
+++ b/jastadd-mquat-base/src/main/jastadd/solvers/Helpers.jadd
@@ -8,7 +8,7 @@ aspect Helpers {
     if (impl != null) {
       assignment.setImplementation(impl);
 
-      ResourceResourceMapping mapping = new ResourceResourceMapping(impl.getResourceRequirement().getInstance(0),new List<>(),resource);
+      ResourceResourceMapping mapping = new ResourceResourceMapping(impl.getResourceRequirement().getInstance(0),resource,new List<>());
       Resource.populateResourceMapping(mapping,impl.getResourceRequirement(),resource);
       assignment.setResourceMapping(mapping);
     }
@@ -23,7 +23,7 @@ aspect Helpers {
     if (impl != null) {
       assignment.setImplementation(impl);
 
-      ResourceClassMapping mapping = new ResourceClassMapping(impl.getResourceRequirement().getInstance(0),new List<>(),resourceClass);
+      ResourceClassMapping mapping = new ResourceClassMapping(impl.getResourceRequirement().getInstance(0), resourceClass);
       // Resource.populateResourceMapping(mapping,impl.getResourceRequirement(),resource);
       assignment.setResourceMapping(mapping);
     }
diff --git a/jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd b/jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd
index 9288e26634921f97b564c460c850479b9c66e32f..7e27e3056ab2215d7cba155eb004bddbbd977c80 100644
--- a/jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd
+++ b/jastadd-mquat-base/src/main/jastadd/solvers/SolverUtils.jadd
@@ -10,7 +10,7 @@ aspect SolverUtils {
           Resource subResource = resource.getSubResource(currentResource);
           if (subResource.getType().getRef() == subRequirement.getResourceTypeRef().getRef()) {
             if (currentInstance == fittingResourceCount) {
-              ResourceResourceMapping newMapping = new ResourceResourceMapping(instance, new List<>(), subResource);
+              ResourceResourceMapping newMapping = new ResourceResourceMapping(instance, subResource, new List<>());
               mapping.addResourceMapping(newMapping);
               populateResourceMapping(newMapping, subRequirement, subResource);
               fittingResourceCount++;
diff --git a/jastadd-mquat-base/src/main/jastadd/solvers/simple/Construction.jadd b/jastadd-mquat-base/src/main/jastadd/solvers/simple/Construction.jadd
index 4ab59ad36e4a9efddfc2956176d9686ee2764b44..90e3e8a608d49fd9b979372f52cd61997820a1c9 100644
--- a/jastadd-mquat-base/src/main/jastadd/solvers/simple/Construction.jadd
+++ b/jastadd-mquat-base/src/main/jastadd/solvers/simple/Construction.jadd
@@ -35,7 +35,7 @@ aspect Construction {
     }
 
     for (Instance instance : implementation.getResourceRequirement().getInstanceList()) {
-      assignment.setResourceMapping(new ResourceResourceMapping(instance, new List<>(), null));
+      assignment.setResourceMapping(new ResourceResourceMapping(instance, null, new List<>()));
     }
 
     return assignment;
diff --git a/jastadd-mquat-base/src/main/jastadd/solvers/simple/Iterator.jadd b/jastadd-mquat-base/src/main/jastadd/solvers/simple/Iterator.jadd
index c70001e6a4275d481bf0510865e05778d6c249f9..dc243dc3f3f118f9091ed69a0c4c1966563c42ad 100644
--- a/jastadd-mquat-base/src/main/jastadd/solvers/simple/Iterator.jadd
+++ b/jastadd-mquat-base/src/main/jastadd/solvers/simple/Iterator.jadd
@@ -110,7 +110,7 @@ aspect Iterator {
       assignment.setImplementation(newImplementation);
 
       // the resourceRequirementAssignments change (even though just the keys are set.)
-      assignment.setResourceMapping(new ResourceResourceMapping(newImplementation.getResourceRequirement().getInstance(0), new List<>(), null));
+      assignment.setResourceMapping(new ResourceResourceMapping(newImplementation.getResourceRequirement().getInstance(0), null, new List<>()));
 
       // the componentRequirementAssignments change!
       assignment.setComponentMappingList(new List<>());
diff --git a/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/generator/ScenarioGenerator.java b/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/generator/ScenarioGenerator.java
index 85002991d7199563e1f46151da2934c6f9276b02..45d9ecd0734a3cb4061bf4a42d08244376aaf0f0 100644
--- a/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/generator/ScenarioGenerator.java
+++ b/jastadd-mquat-base/src/main/java/de/tudresden/inf/st/mquat/generator/ScenarioGenerator.java
@@ -568,7 +568,7 @@ public class ScenarioGenerator {
     // add a new resource to allocate the current component to
     Resource resource = createResource(model);
     model.getHardwareModel().addResource(resource);
-    currentAssignment.setResourceMapping(new ResourceResourceMapping(currentAssignment.getImplementation().getResourceRequirement().getInstance(0), new List<>(), resource));
+    currentAssignment.setResourceMapping(new ResourceResourceMapping(currentAssignment.getImplementation().getResourceRequirement().getInstance(0), resource, new List<>()));
 
     // do the recursive assignment of dependent components
     for (ComponentRequirement componentRequirement : implementation.getComponentRequirementList()) {
@@ -635,7 +635,7 @@ public class ScenarioGenerator {
       if (sub.getType().getRef().equals(cpuType)) {
         for (CurrentResourceValue value : sub.getCurrentResourceValueList()) {
           if (value.getPropertyRef().getRef().getName().getName().equals("frequency")) {
-            computeResourceMapping.addResourceMapping(new ResourceResourceMapping(cpuInstance[currentCpu], new List<>(), sub));
+            computeResourceMapping.addResourceMapping(new ResourceResourceMapping(cpuInstance[currentCpu], sub, new List<>()));
             if (logger.isTraceEnabled()) {
               logger.trace("set frequency value from {} to {}", value.getValue().evalAsDouble(), frequencyValue[currentCpu]);
             }
@@ -645,14 +645,14 @@ public class ScenarioGenerator {
         }
       } else if (sub.getType().getRef().equals(ramType)) {
         setTotalStorageValue(computeResourceMapping, totalRamValue, ramInstance, sub);
-        computeResourceMapping.addResourceMapping(new ResourceResourceMapping(ramInstance, new List<>(), sub));
+        computeResourceMapping.addResourceMapping(new ResourceResourceMapping(ramInstance, sub, new List<>()));
       } else if (sub.getType().getRef().equals(diskType)) {
         setTotalStorageValue(computeResourceMapping, totalDiskValue, diskInstance, sub);
-        computeResourceMapping.addResourceMapping(new ResourceResourceMapping(diskInstance, new List<>(), sub));
+        computeResourceMapping.addResourceMapping(new ResourceResourceMapping(diskInstance, sub, new List<>()));
       } else if (sub.getType().getRef().equals(networkType)) {
         for (CurrentResourceValue value : sub.getCurrentResourceValueList()) {
           if (value.getPropertyRef().getRef().getName().getName().equals("throughput")) {
-            computeResourceMapping.addResourceMapping(new ResourceResourceMapping(networkInstance, new List<>(), sub));
+            computeResourceMapping.addResourceMapping(new ResourceResourceMapping(networkInstance, sub, new List<>()));
             if (logger.isTraceEnabled()) {
               logger.trace("set throughput value from {} to {}", value.getValue().evalAsDouble(), networkThroughputValue);
             }
diff --git a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/AbstractILPSolver.java b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/AbstractILPSolver.java
index b7d0e40b132c627aae0d3686573b74855dcb0741..327cdb80bd1ee30e67d6dbf5c6d34db13ea89095 100644
--- a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/AbstractILPSolver.java
+++ b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/AbstractILPSolver.java
@@ -117,7 +117,7 @@ public abstract class AbstractILPSolver implements BenchmarkableSolver {
         Assignment assignment = new Assignment();
         assignment.setRequest(mappingVar.getRequest());
         assignment.setImplementation(mappingVar.getImpl());
-        assignment.setResourceMapping(new ResourceResourceMapping(assignment.getImplementation().getResourceRequirement().getInstance(0), new de.tudresden.inf.st.mquat.jastadd.model.List<>(), mappingVar.getResource()));
+        assignment.setResourceMapping(new ResourceResourceMapping(assignment.getImplementation().getResourceRequirement().getInstance(0), mappingVar.getResource(), new de.tudresden.inf.st.mquat.jastadd.model.List<>()));
         listOfAssignments.add(assignment);
       }
     }
diff --git a/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java b/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java
index 8e7d4eefa0d2146d676141dfefbeff7fa2e74134..c34cace34e2b8e9f8e0c371995d3b2855f91c796 100644
--- a/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java
+++ b/jastadd-mquat-solver/src/main/java/de/tudresden/inf/st/mquat/solving/SolverUtils.java
@@ -21,7 +21,7 @@ public class SolverUtils {
       Implementation impl = assignment.getImplementation();
       Resource resource = assignment.getResource();
 
-      ResourceResourceMapping mapping = new ResourceResourceMapping(impl.getResourceRequirement().getInstance(0), new de.tudresden.inf.st.mquat.jastadd.model.List<>(), resource);
+      ResourceResourceMapping mapping = new ResourceResourceMapping(impl.getResourceRequirement().getInstance(0), resource, new de.tudresden.inf.st.mquat.jastadd.model.List<>());
       Resource.populateResourceMapping(mapping, impl.getResourceRequirement(), resource);
       assignment.setResourceMapping(mapping);
 
diff --git a/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java b/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java
index 67a2a444b038aebb7d15aa81ec68c91c9d697662..b1e47887a115c5127f26013cc00b602e8edfcb8a 100644
--- a/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java
+++ b/jastadd-mquat-solver/src/test/java/de/tudresden/inf/st/mquat/solving/HandwrittenTestSuite.java
@@ -55,7 +55,7 @@ public abstract class HandwrittenTestSuite {
     Assignment expectedAssignment = new Assignment();
     expectedAssignment.setRequest(model.getRequest(request));
     expectedAssignment.setImplementation(model.resolveImplementation(impl).get());
-    expectedAssignment.setResourceMapping(new ResourceResourceMapping(expectedAssignment.getImplementation().getResourceRequirement().getInstance(0), new List<>(), model.resolveResource(resource).get()));
+    expectedAssignment.setResourceMapping(new ResourceResourceMapping(expectedAssignment.getImplementation().getResourceRequirement().getInstance(0), model.resolveResource(resource).get(), new List<>()));
     // check if assignment matches (partly) one listed in the solution
     Iterator<Assignment> assignmentIterator = modelAndSolution.getSecondElement().assignmentIterator();
     while (assignmentIterator.hasNext()) {