diff --git a/provider/marathon.go b/provider/marathon.go
index 26982e460..33c53a0b4 100644
--- a/provider/marathon.go
+++ b/provider/marathon.go
@@ -81,16 +81,17 @@ func (provider *Marathon) Provide(configurationChan chan<- types.ConfigMessage)
 
 func (provider *Marathon) loadMarathonConfig() *types.Configuration {
 	var MarathonFuncMap = template.FuncMap{
-		"getBackend":        provider.getBackend,
-		"getPort":           provider.getPort,
-		"getWeight":         provider.getWeight,
-		"getDomain":         provider.getDomain,
-		"getProtocol":       provider.getProtocol,
-		"getPassHostHeader": provider.getPassHostHeader,
-		"getEntryPoints":    provider.getEntryPoints,
-		"getFrontendValue":  provider.getFrontendValue,
-		"getFrontendRule":   provider.getFrontendRule,
-		"replace":           replace,
+		"getBackend":         provider.getBackend,
+		"getPort":            provider.getPort,
+		"getWeight":          provider.getWeight,
+		"getDomain":          provider.getDomain,
+		"getProtocol":        provider.getProtocol,
+		"getPassHostHeader":  provider.getPassHostHeader,
+		"getEntryPoints":     provider.getEntryPoints,
+		"getFrontendValue":   provider.getFrontendValue,
+		"getFrontendRule":    provider.getFrontendRule,
+		"getFrontendBackend": provider.getFrontendBackend,
+		"replace":            replace,
 	}
 
 	applications, err := provider.marathonClient.Applications(nil)
@@ -313,7 +314,16 @@ func (provider *Marathon) getFrontendRule(application marathon.Application) stri
 	return "Host"
 }
 
-func (provider *Marathon) getBackend(application marathon.Application) string {
+func (provider *Marathon) getBackend(task marathon.Task, applications []marathon.Application) string {
+	application, errApp := getApplication(task, applications)
+	if errApp != nil {
+		log.Errorf("Unable to get marathon application from task %s", task.AppID)
+		return ""
+	}
+	return provider.getFrontendBackend(application)
+}
+
+func (provider *Marathon) getFrontendBackend(application marathon.Application) string {
 	if label, err := provider.getLabel(application, "traefik.backend"); err == nil {
 		return label
 	}
diff --git a/provider/marathon_test.go b/provider/marathon_test.go
index 642f28224..6227a2641 100644
--- a/provider/marathon_test.go
+++ b/provider/marathon_test.go
@@ -851,7 +851,7 @@ func TestMarathonGetBackend(t *testing.T) {
 	}
 
 	for _, a := range applications {
-		actual := provider.getBackend(a.application)
+		actual := provider.getFrontendBackend(a.application)
 		if actual != a.expected {
 			t.Fatalf("expected %q, got %q", a.expected, actual)
 		}
diff --git a/templates/marathon.tmpl b/templates/marathon.tmpl
index 5558924fd..ba60b5012 100644
--- a/templates/marathon.tmpl
+++ b/templates/marathon.tmpl
@@ -1,13 +1,13 @@
 {{$apps := .Applications}}
 [backends]{{range .Tasks}}
-    [backends.backend{{with index $apps 0 }}{{getBackend .}}{{end}}.servers.server-{{.ID | replace "." "-"}}]
+    [backends.backend{{getBackend . $apps}}.servers.server-{{.ID | replace "." "-"}}]
     url = "{{getProtocol . $apps}}://{{.Host}}:{{getPort . $apps}}"
     weight = {{getWeight . $apps}}
 {{end}}
 
 [frontends]{{range .Applications}}
   [frontends.frontend{{.ID | replace "/" "-"}}]
-  backend = "backend{{getBackend .}}"
+  backend = "backend{{getFrontendBackend .}}"
   passHostHeader = {{getPassHostHeader .}}
   entryPoints = [{{range getEntryPoints .}}
     "{{.}}",
diff --git a/tests/compose-marathon.yml b/tests/compose-marathon.yml
index d749fe095..722f2f91d 100644
--- a/tests/compose-marathon.yml
+++ b/tests/compose-marathon.yml
@@ -31,6 +31,7 @@ slave:
     - /usr/bin/docker:/usr/bin/docker:ro
     - /usr/lib/x86_64-linux-gnu/libapparmor.so.1:/usr/lib/x86_64-linux-gnu/libapparmor.so.1:ro
     - /var/run/docker.sock:/var/run/docker.sock
+    - /lib/x86_64-linux-gnu/libsystemd-journal.so.0:/lib/x86_64-linux-gnu/libsystemd-journal.so.0
 
 marathon:
   image: mesosphere/marathon:v0.13.0