diff --git a/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/DmmModelChangerTest.java b/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/DmmModelChangerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b9534e21505af990449502ffefbd2e37d792b9a
--- /dev/null
+++ b/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/DmmModelChangerTest.java
@@ -0,0 +1,194 @@
+package edu.kit.ipd.descartes.adaptation.model.dmm.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.junit.Before;
+import org.junit.Test;
+
+import edu.kit.ipd.descartes.adaptation.AbstractTest;
+import edu.kit.ipd.descartes.adaptation.exceptions.OperationNotPerformedException;
+import edu.kit.ipd.descartes.adaptation.model.dmm.util.DmmModelChanger;
+import edu.kit.ipd.descartes.mm.adaptation.AdaptationDirection;
+import edu.kit.ipd.descartes.mm.adaptationpoints.AdaptationpointsFactory;
+import edu.kit.ipd.descartes.mm.adaptationpoints.ModelVariableConfigurationRange;
+import edu.kit.ipd.descartes.mm.containerrepository.ContainerTemplate;
+import edu.kit.ipd.descartes.mm.containerrepository.ContainerrepositoryFactory;
+import edu.kit.ipd.descartes.mm.resourceconfiguration.ActiveResourceSpecification;
+import edu.kit.ipd.descartes.mm.resourceconfiguration.ConfigurationSpecification;
+import edu.kit.ipd.descartes.mm.resourceconfiguration.NumberOfParallelProcessingUnits;
+import edu.kit.ipd.descartes.mm.resourceconfiguration.ProcessingResourceSpecification;
+import edu.kit.ipd.descartes.mm.resourceconfiguration.ResourceconfigurationFactory;
+import edu.kit.ipd.descartes.mm.resourcelandscape.Container;
+import edu.kit.ipd.descartes.mm.resourcelandscape.ResourcelandscapeFactory;
+import edu.kit.ipd.descartes.mm.resourcelandscape.RuntimeEnvironment;
+
+public class DmmModelChangerTest extends AbstractTest {
+
+    private static final String PARENT_CONTAINER = "PARENT_CONTAINER";
+    private static final String TEST_RUNTIME_ENV = "TEST_RUNTIME_ENV";
+    private static final String NOC_NAME = "NumberOfCores_TestName";
+    private static final String NOC_ID = "NumberOfCores_TestId";
+    private static final String EMPTY = "Empty";
+    private static final int MIN = 1;
+    private static final int MAX = 4;
+    private static final int DEFAULT = 2;
+    
+    RuntimeEnvironment original = null;
+    NumberOfParallelProcessingUnits adaptableNumberOfCores = null;
+    ModelVariableConfigurationRange point = null;
+    ActiveResourceSpecification spec = null;
+    Container container = null;
+    ContainerTemplate template = null;
+    Container parent = null;
+
+    @Before
+    public void setUp() throws Exception {
+        super.setUp();
+        parent = ResourcelandscapeFactory.eINSTANCE.createComputingInfrastructure();
+                container = ResourcelandscapeFactory.eINSTANCE.createRuntimeEnvironment();
+        template = ContainerrepositoryFactory.eINSTANCE.createContainerTemplate();
+        original = ResourcelandscapeFactory.eINSTANCE.createRuntimeEnvironment();
+        adaptableNumberOfCores = ResourceconfigurationFactory.eINSTANCE.createNumberOfParallelProcessingUnits();
+        point = AdaptationpointsFactory.eINSTANCE.createModelVariableConfigurationRange();
+        spec = ResourceconfigurationFactory.eINSTANCE.createActiveResourceSpecification();
+        ProcessingResourceSpecification procSpec = ResourceconfigurationFactory.eINSTANCE.createProcessingResourceSpecification();
+
+        adaptableNumberOfCores.setName(NOC_NAME);
+        adaptableNumberOfCores.setId(NOC_ID);
+        adaptableNumberOfCores.setNumber(DEFAULT);
+
+        procSpec.setNrOfParProcUnits(adaptableNumberOfCores);
+        procSpec.setName(EMPTY);
+        
+        spec.setName(EMPTY);
+        spec.getProcessingResourceSpecifications().add(procSpec);
+        
+        original.getConfigSpec().add(spec);
+        original.setName(TEST_RUNTIME_ENV);
+        original.setTemplate(ContainerrepositoryFactory.eINSTANCE.createContainerTemplate());
+
+        point.setMinValue(MIN);
+        point.setMaxValue(MAX);
+        point.setAdaptableEntity(adaptableNumberOfCores);
+        point.setName(EMPTY);
+        
+        parent.setName(PARENT_CONTAINER);
+        parent.getContains().add(original);
+        
+        template.getTemplateConfig().add(spec);
+        template.setName(EMPTY);
+        container.setTemplate(template);
+        container.setName(EMPTY);
+    }
+
+    @Test(expected=OperationNotPerformedException.class)
+    public void testScaleModelVariableException() throws OperationNotPerformedException {
+        assertTrue(adaptableNumberOfCores.getNumber() == DEFAULT);
+        DmmModelChanger.scaleModelVariable(point, AdaptationDirection.INCREASE);
+        DmmModelChanger.scaleModelVariable(point, AdaptationDirection.INCREASE);
+        DmmModelChanger.scaleModelVariable(point, AdaptationDirection.INCREASE);
+        assertEquals(DEFAULT + 2, adaptableNumberOfCores.getNumber());
+    }
+    
+    @Test
+    public void testScaleModelVariable() throws OperationNotPerformedException {
+        
+        DmmModelChanger.scaleModelVariable(point, AdaptationDirection.NOT_SET);
+        assertTrue(adaptableNumberOfCores.getNumber() == DEFAULT);
+        
+        DmmModelChanger.scaleModelVariable(point, AdaptationDirection.INCREASE);
+        assertTrue(adaptableNumberOfCores.getNumber() == DEFAULT + 1);
+        
+        DmmModelChanger.scaleModelVariable(point, AdaptationDirection.INCREASE);
+        assertTrue(adaptableNumberOfCores.getNumber() == DEFAULT + 2);
+
+        DmmModelChanger.scaleModelVariable(point, AdaptationDirection.DECREASE);
+        DmmModelChanger.scaleModelVariable(point, AdaptationDirection.DECREASE);
+        DmmModelChanger.scaleModelVariable(point, AdaptationDirection.DECREASE);
+        assertTrue(adaptableNumberOfCores.getNumber() == DEFAULT - 1);
+        
+
+    }
+
+    @Test
+    public void testScaleInRuntimeEnvironmentInstance() {
+        RuntimeEnvironment copy = DmmModelChanger.createNewRuntimeEnvironmentInstance(original);
+        
+        assertFalse(original.getId().equals(copy.getId()));
+        assertFalse(original.getName().equals(copy.getName()));
+        assertEquals(original.getName() + DmmModelChanger.COPY_MARK, copy.getName());
+        assertEquals(original.getTemplate(), copy.getTemplate());
+        assertTrue(parent.getContains().size() == 2);
+        assertEquals(original, parent.getContains().get(0));
+        assertEquals(copy, parent.getContains().get(1));
+
+        RuntimeEnvironment removedElement = DmmModelChanger.scaleInRuntimeEnvironmentInstance(original);
+        assertEquals(copy, removedElement);
+        assertTrue(parent.getContains().size() == 1);
+        assertTrue(removedElement.getName().contains(DmmModelChanger.COPY_MARK));
+        assertTrue(!original.getTemplate().getReferringContainers().contains(removedElement));
+    }
+
+    @Test
+    public void testScaleOutRuntimeEnvironmentInstance() {
+        original.setTemplate(template);
+        RuntimeEnvironment copy = DmmModelChanger.createNewRuntimeEnvironmentInstance(original);
+        
+        assertFalse(original.getId().equals(copy.getId()));
+        assertFalse(original.getName().equals(copy.getName()));
+        assertEquals(original.getName() + DmmModelChanger.COPY_MARK, copy.getName());
+        assertEquals(original.getTemplate(), copy.getTemplate());
+        
+        assertTrue(EcoreUtil.equals(original.getTemplate().getTemplateConfig(), copy.getConfigSpec()));
+        
+        assertTrue(original.getTemplate().getReferringContainers().contains(copy));
+        
+        assertTrue(parent.getContains().size() == 2);
+        
+        assertEquals(original, parent.getContains().get(0));
+        assertEquals(copy, parent.getContains().get(1));
+
+    }
+    
+    @Test(expected=OperationNotPerformedException.class)
+    public void testScaleContainerIncrease() throws OperationNotPerformedException {
+        assertTrue(container.getConfigSpec().size() == 0);
+        DmmModelChanger.scaleResourceProvidedByContainer(container, point, AdaptationDirection.INCREASE);
+        assertEquals(template.getTemplateConfig().size(), container.getConfigSpec().size());
+        assertEquals(DEFAULT + 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0)));
+        DmmModelChanger.scaleResourceProvidedByContainer(container, point, AdaptationDirection.INCREASE);
+        assertEquals(DEFAULT + 2, getNrOfProcUnitsValue(container.getConfigSpec().get(0)));
+        DmmModelChanger.scaleResourceProvidedByContainer(container, point, AdaptationDirection.INCREASE);
+        assertEquals(DEFAULT + 2, getNrOfProcUnitsValue(container.getConfigSpec().get(0)));
+    }
+    
+    @Test(expected=OperationNotPerformedException.class)
+    public void testScaleContainerDecrease() throws OperationNotPerformedException {
+        assertTrue(container.getConfigSpec().size() == 0);
+        DmmModelChanger.scaleResourceProvidedByContainer(container, point, AdaptationDirection.DECREASE);
+        assertEquals(template.getTemplateConfig().size(), container.getConfigSpec().size());
+        assertEquals(DEFAULT - 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0)));
+        DmmModelChanger.scaleResourceProvidedByContainer(container, point, AdaptationDirection.DECREASE);
+        assertEquals(DEFAULT - 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0)));
+    }
+    
+    @Test
+    public void testRemoveSpec() throws OperationNotPerformedException {
+        assertTrue(container.getConfigSpec().size() == 0);
+        DmmModelChanger.scaleResourceProvidedByContainer(container, point, AdaptationDirection.INCREASE);
+        assertEquals(template.getTemplateConfig().size(), container.getConfigSpec().size());
+        assertEquals(DEFAULT + 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0)));
+        DmmModelChanger.scaleResourceProvidedByContainer(container, point, AdaptationDirection.DECREASE);
+        assertEquals(0, container.getConfigSpec().size());
+        assertEquals(DEFAULT, getNrOfProcUnitsValue(template.getTemplateConfig().get(0)));
+    }
+
+    private int getNrOfProcUnitsValue(ConfigurationSpecification config) {
+        ActiveResourceSpecification activeSpec = (ActiveResourceSpecification) config;
+        return activeSpec.getProcessingResourceSpecifications().get(0).getNrOfParProcUnits().getNumber();
+    }
+
+}