diff --git a/containers-marathon/src/main/java/org/apache/aries/containers/marathon/impl/ServiceImpl.java b/containers-marathon/src/main/java/org/apache/aries/containers/marathon/impl/ServiceImpl.java
index 182d4b4..7cf926f 100644
--- a/containers-marathon/src/main/java/org/apache/aries/containers/marathon/impl/ServiceImpl.java
+++ b/containers-marathon/src/main/java/org/apache/aries/containers/marathon/impl/ServiceImpl.java
@@ -72,7 +72,7 @@
     @Override
     public void setInstanceCount(int count) {
         App updatedApp = new App();
-        updatedApp.setInstances(count);;
+        updatedApp.setInstances(count);
         marathonClient.updateApp(marathonAppID, updatedApp, true);
     }
 
diff --git a/containers-marathon/src/test/java/org/apache/aries/containers/marathon/impl/ServiceImplTest.java b/containers-marathon/src/test/java/org/apache/aries/containers/marathon/impl/ServiceImplTest.java
index b435d72..d02ddea 100644
--- a/containers-marathon/src/test/java/org/apache/aries/containers/marathon/impl/ServiceImplTest.java
+++ b/containers-marathon/src/test/java/org/apache/aries/containers/marathon/impl/ServiceImplTest.java
@@ -30,6 +30,8 @@
 import org.apache.aries.containers.ServiceConfig;
 import org.junit.Test;
 import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
@@ -37,6 +39,7 @@
 import mesosphere.marathon.client.Marathon;
 import mesosphere.marathon.client.model.v2.App;
 import mesosphere.marathon.client.model.v2.GetAppResponse;
+import mesosphere.marathon.client.model.v2.Result;
 import mesosphere.marathon.client.model.v2.Task;
 
 public class ServiceImplTest {
@@ -129,6 +132,34 @@
         assertEquals(new HashSet<>(Arrays.asList("task1", "task2")), foundTasks);
     }
 
+    @Test
+    public void testSetInstanceCount() throws Exception {
+        List<App> updatedApps = new ArrayList<>();
+
+        Marathon mc = Mockito.mock(Marathon.class);
+        Mockito.when(mc.updateApp(Mockito.eq("mid1"), Mockito.isA(App.class), Mockito.eq(true))).
+            then(new Answer<Result>() {
+                @Override
+                public Result answer(InvocationOnMock invocation) throws Throwable {
+                    updatedApps.add((App) invocation.getArguments()[1]);
+                    return Mockito.mock(Result.class);
+                }
+            });
+
+        ServiceConfig cfg = ServiceConfig.builder("svc1", "a/b/c:d").build();
+
+        App app = new App();
+        app.setId("mid1");
+        ServiceImpl svc = new ServiceImpl(mc, app, cfg);
+
+        assertEquals("Precondition", 0, updatedApps.size());
+        svc.setInstanceCount(5);
+        assertEquals(1, updatedApps.size());
+
+        App updated = updatedApps.iterator().next();
+        assertEquals(5, (int) updated.getInstances());
+    }
+
     private GetAppResponse getAppResponse(App a) {
         GetAppResponse gar = Mockito.mock(GetAppResponse.class);
         Mockito.when(gar.getApp()).thenReturn(a);
