diff --git a/src/main/java/org/apache/aurora/scheduler/app/AppModule.java b/src/main/java/org/apache/aurora/scheduler/app/AppModule.java
index edc13d4..184ff49 100644
--- a/src/main/java/org/apache/aurora/scheduler/app/AppModule.java
+++ b/src/main/java/org/apache/aurora/scheduler/app/AppModule.java
@@ -150,7 +150,8 @@
             opts.app.allowContainerVolumes,
             opts.sla.minRequiredInstances,
             opts.sla.maxSlaDuration.as(Time.SECONDS),
-            opts.app.allowedJobEnvironments),
+            opts.app.allowedJobEnvironments,
+            opts.sla.slaAwareKillNonProd),
         opts.main.driverImpl,
         opts);
   }
diff --git a/src/main/java/org/apache/aurora/scheduler/configuration/ConfigurationManager.java b/src/main/java/org/apache/aurora/scheduler/configuration/ConfigurationManager.java
index e0f8702..4b2941d 100644
--- a/src/main/java/org/apache/aurora/scheduler/configuration/ConfigurationManager.java
+++ b/src/main/java/org/apache/aurora/scheduler/configuration/ConfigurationManager.java
@@ -103,6 +103,7 @@
     private final Pattern allowedJobEnvironments;
     private final int minRequiredInstances;
     private final long maxSlaDurationSecs;
+    private final boolean slaAwareKillNonProd;
 
     public ConfigurationManagerSettings(
         ImmutableSet<Container._Fields> allowedContainerTypes,
@@ -114,7 +115,8 @@
         boolean allowContainerVolumes,
         int minRequiredInstances,
         long maxSlaDurationSecs,
-        String allowedJobEnvironment) {
+        String allowedJobEnvironment,
+        boolean slaAwareKillNonProd) {
 
       this.allowedContainerTypes = requireNonNull(allowedContainerTypes);
       this.allowDockerParameters = allowDockerParameters;
@@ -126,6 +128,7 @@
       this.allowedJobEnvironments = Pattern.compile(requireNonNull(allowedJobEnvironment));
       this.minRequiredInstances = minRequiredInstances;
       this.maxSlaDurationSecs = maxSlaDurationSecs;
+      this.slaAwareKillNonProd = slaAwareKillNonProd;
     }
   }
 
@@ -231,8 +234,8 @@
       int instanceCount) throws TaskDescriptionException {
 
     if (config.isSetSlaPolicy()) {
-      if (tierManager.getTier(ITaskConfig.build(config)).isRevocable()
-          || tierManager.getTier(ITaskConfig.build(config)).isPreemptible()) {
+      if (!(settings.slaAwareKillNonProd
+          || tierManager.getTier(ITaskConfig.build(config)).isProduction())) {
         throw new TaskDescriptionException(String.format(
             "Tier '%s' does not support SlaPolicy.",
             config.getTier()));
diff --git a/src/test/java/org/apache/aurora/scheduler/base/TaskTestUtil.java b/src/test/java/org/apache/aurora/scheduler/base/TaskTestUtil.java
index 39d5c10..c992205 100644
--- a/src/test/java/org/apache/aurora/scheduler/base/TaskTestUtil.java
+++ b/src/test/java/org/apache/aurora/scheduler/base/TaskTestUtil.java
@@ -93,7 +93,8 @@
           true,
           2,
           1800L,
-          ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS);
+          ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+          false);
   public static final ExecutorID EXECUTOR_ID = ExecutorID.newBuilder()
       .setValue("PLACEHOLDER")
       .build();
diff --git a/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java b/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java
index a99fa7a..8709137 100644
--- a/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/configuration/ConfigurationManagerTest.java
@@ -135,7 +135,8 @@
           false,
           MIN_REQUIRED_INSTANCES,
           MAX_SLA_DURATION_SECS,
-          ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS),
+          ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+          false),
       TaskTestUtil.TIER_MANAGER,
       TaskTestUtil.THRIFT_BACKFILL,
       TestExecutorSettings.THERMOS_EXECUTOR);
@@ -150,7 +151,8 @@
           true,
           MIN_REQUIRED_INSTANCES,
           MAX_SLA_DURATION_SECS,
-          ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS),
+          ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+          false),
       TaskTestUtil.TIER_MANAGER,
       TaskTestUtil.THRIFT_BACKFILL,
       TestExecutorSettings.THERMOS_EXECUTOR);
@@ -306,7 +308,8 @@
             false,
             MIN_REQUIRED_INSTANCES,
             MAX_SLA_DURATION_SECS,
-            ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS),
+            ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+            false),
         TaskTestUtil.TIER_MANAGER,
         TaskTestUtil.THRIFT_BACKFILL,
         TestExecutorSettings.THERMOS_EXECUTOR).validateAndPopulate(ITaskConfig.build(builder), 100);
@@ -332,7 +335,8 @@
                     false,
                     MIN_REQUIRED_INSTANCES,
                     MAX_SLA_DURATION_SECS,
-                    ".+"),
+                    ".+",
+                    false),
             TaskTestUtil.TIER_MANAGER,
             TaskTestUtil.THRIFT_BACKFILL,
             TestExecutorSettings.THERMOS_EXECUTOR)
@@ -379,7 +383,8 @@
           true,
           MIN_REQUIRED_INSTANCES,
           MAX_SLA_DURATION_SECS,
-          "b.r"),
+          "b.r",
+          false),
       TaskTestUtil.TIER_MANAGER,
       TaskTestUtil.THRIFT_BACKFILL,
       TestExecutorSettings.THERMOS_EXECUTOR)
@@ -387,6 +392,36 @@
   }
 
   @Test
+  public void testSlaPolicyNonProdTiersEnabled() throws Exception {
+    ITaskConfig config = ITaskConfig.build(
+        CONFIG_WITH_CONTAINER
+            .newBuilder()
+            .setTier(TaskTestUtil.DEV_TIER_NAME)
+            .setSlaPolicy(SlaPolicy.countSlaPolicy(
+                new CountSlaPolicy()
+                    .setCount(MIN_REQUIRED_INSTANCES - 1))));
+
+    new ConfigurationManager(
+        new ConfigurationManagerSettings(
+            ALL_CONTAINER_TYPES,
+            true,
+            ImmutableList.of(new DockerParameter("foo", "bar")),
+            false,
+            true,
+            true,
+            true,
+            MIN_REQUIRED_INSTANCES,
+            MAX_SLA_DURATION_SECS,
+            ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+            true),
+        TaskTestUtil.TIER_MANAGER,
+        TaskTestUtil.THRIFT_BACKFILL,
+        TestExecutorSettings.THERMOS_EXECUTOR).validateAndPopulate(
+        config,
+        MIN_REQUIRED_INSTANCES);
+  }
+
+  @Test
   public void testCountSlaPolicyUnsupportedTier() throws Exception {
     ITaskConfig config = ITaskConfig.build(
         CONFIG_WITH_CONTAINER
diff --git a/src/test/java/org/apache/aurora/scheduler/thrift/ThriftIT.java b/src/test/java/org/apache/aurora/scheduler/thrift/ThriftIT.java
index f0199a4..aa11041 100644
--- a/src/test/java/org/apache/aurora/scheduler/thrift/ThriftIT.java
+++ b/src/test/java/org/apache/aurora/scheduler/thrift/ThriftIT.java
@@ -192,7 +192,8 @@
         false,
         20,
         1800,
-        ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS);
+        ConfigurationManager.DEFAULT_ALLOWED_JOB_ENVIRONMENTS,
+        false);
 
     createThrift(configurationManagerSettings);
 
