diff --git a/containers-marathon/src/main/java/org/apache/aries/containers/marathon/impl/MarathonServiceManager.java b/containers-marathon/src/main/java/org/apache/aries/containers/marathon/impl/MarathonServiceManager.java
index d2e0e55..7735af0 100644
--- a/containers-marathon/src/main/java/org/apache/aries/containers/marathon/impl/MarathonServiceManager.java
+++ b/containers-marathon/src/main/java/org/apache/aries/containers/marathon/impl/MarathonServiceManager.java
@@ -25,6 +25,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import javax.naming.OperationNotSupportedException;
+
 import org.apache.aries.containers.Service;
 import org.apache.aries.containers.ServiceConfig;
 import org.apache.aries.containers.ServiceManager;
@@ -34,9 +36,11 @@
 import mesosphere.marathon.client.Marathon;
 import mesosphere.marathon.client.MarathonClient;
 import mesosphere.marathon.client.model.v2.App;
+import mesosphere.marathon.client.model.v2.Command;
 import mesosphere.marathon.client.model.v2.Container;
 import mesosphere.marathon.client.model.v2.Docker;
 import mesosphere.marathon.client.model.v2.GetAppsResponse;
+import mesosphere.marathon.client.model.v2.HealthCheck;
 import mesosphere.marathon.client.model.v2.Port;
 
 public class MarathonServiceManager implements ServiceManager {
@@ -89,6 +93,7 @@
         app.setMem(config.getRequestedMemory());
         app.setInstances(config.getRequestedInstances());
         app.setEnv(Collections.unmodifiableMap(config.getEnvVars()));
+        app.addLabel(SERVICE_NAME, config.getServiceName());
 
         StringBuilder cmd = new StringBuilder();
         if (config.getEntryPoint() != null) {
@@ -112,7 +117,7 @@
 
         Docker docker = new Docker();
         docker.setImage(config.getContainerImage());
-        docker.setNetwork("BRIDGE"); // TODO is this correct?
+        docker.setNetwork("BRIDGE");
         List<Port> ports = new ArrayList<>();
         for (int p : config.getContainerPorts()) {
             Port port = new Port();
@@ -124,12 +129,38 @@
         Container container = new Container();
         container.setType("DOCKER");
         container.setDocker(docker);
-
         app.setContainer(container);
-        app.addLabel(SERVICE_NAME, config.getServiceName());
+
+        List<HealthCheck> healthChecks = new ArrayList<>();
+        for (org.apache.aries.containers.HealthCheck hc : config.getHealthChecks()) {
+            HealthCheck healthCheck = new HealthCheck();
+            healthCheck.setProtocol(hc.getType().toString());
+            healthCheck.setGracePeriodSeconds(hc.getGracePeriod());
+            healthCheck.setIntervalSeconds(hc.getInterval());
+            healthCheck.setMaxConsecutiveFailures(hc.getMaxFailures());
+            healthCheck.setTimeoutSeconds(hc.getTimeout());
+
+            switch (hc.getType()) {
+            case HTTP:
+                healthCheck.setPath(hc.getParameters());
+                // Fallthrough as the other params are the same as TCP
+            case TCP:
+                healthCheck.setPort(hc.getPort());
+                healthCheck.setPortIndex(hc.getPortIndex());
+                break;
+            case COMMAND:
+                Command command = new Command();
+                command.setValue(hc.getParameters());
+                healthCheck.setCommand(command);
+                break;
+            default:
+                throw new OperationNotSupportedException(hc.getType() + " health checks are not yet supported");
+            }
+            healthChecks.add(healthCheck);
+        }
+        app.setHealthChecks(healthChecks);
 
         App res = marathonClient.createApp(app);
-
         return createServiceFromApp(res, config);
     }
 
diff --git a/containers-marathon/src/test/java/org/apache/aries/containers/marathon/impl/MarathonServiceManagerTest.java b/containers-marathon/src/test/java/org/apache/aries/containers/marathon/impl/MarathonServiceManagerTest.java
index 0baf722..c0152e9 100644
--- a/containers-marathon/src/test/java/org/apache/aries/containers/marathon/impl/MarathonServiceManagerTest.java
+++ b/containers-marathon/src/test/java/org/apache/aries/containers/marathon/impl/MarathonServiceManagerTest.java
@@ -26,6 +26,7 @@
 import java.util.List;
 import java.util.Set;
 
+import org.apache.aries.containers.HealthCheck;
 import org.apache.aries.containers.Service;
 import org.apache.aries.containers.ServiceConfig;
 import org.junit.Test;
@@ -103,7 +104,7 @@
     }
 
     @Test
-    public void testGetService2() throws Exception {
+    public void testGetServiceWithHealthCheck() throws Exception {
         GetAppsResponse nar = Mockito.mock(GetAppsResponse.class);
 
         List<App> appsCreated = new ArrayList<>();
@@ -121,9 +122,18 @@
 
         MarathonServiceManager msm = new MarathonServiceManager(mc);
 
+        HealthCheck hc1 = HealthCheck.builder(HealthCheck.Type.HTTP).parameters("/").portIndex(0).
+                build();
+        HealthCheck hc2 = HealthCheck.builder(HealthCheck.Type.TCP).port(8080).
+                build();
+        HealthCheck hc3 = HealthCheck.builder(HealthCheck.Type.COMMAND).parameters("ping test.com").
+                build();
         ServiceConfig cfg = ServiceConfig.builder("my-other-service", "animage").
                 entryPoint("/bin/sh").
                 commandLine("-c", "ls -la").
+                healthCheck(hc1).
+                healthCheck(hc2).
+                healthCheck(hc3).
                 build();
 
         assertEquals("Precondition", 0, appsCreated.size());
@@ -132,6 +142,30 @@
 
         App app = appsCreated.iterator().next();
         assertEquals("/bin/sh -c 'ls -la'", app.getCmd());
+
+        List<mesosphere.marathon.client.model.v2.HealthCheck> checks = app.getHealthChecks();
+        assertEquals(3, checks.size());
+
+        Set<String> foundTypes = new HashSet<>();
+        for (mesosphere.marathon.client.model.v2.HealthCheck check : checks) {
+            foundTypes.add(check.getProtocol());
+
+            switch (check.getProtocol()) {
+            case "HTTP":
+                assertEquals("/", check.getPath());
+                assertEquals((Integer) 0, check.getPortIndex());
+                assertNull(check.getPort());
+                break;
+            case "TCP":
+                assertEquals(8080, (int) check.getPort());
+                assertNull(check.getPortIndex());
+                break;
+            case "COMMAND":
+                assertEquals("ping test.com", check.getCommand().getValue());
+                break;
+            }
+        }
+
         assertSame(cfg, svc.getConfiguration());
     }
 
