diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/ResolvePermutationDependentValues.java b/dev/core/src/com/google/gwt/dev/jjs/impl/ResolvePermutationDependentValues.java
index 515e9d5df4..ea3a9ef343 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/ResolvePermutationDependentValues.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/ResolvePermutationDependentValues.java
@@ -47,6 +47,7 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -76,7 +77,14 @@ public void endVisit(JPermutationDependentValue x, Context ctx) {
     private JExpression propertyValueExpression(JPermutationDependentValue x) {
       List<String> propertyValues = props.getConfigurationProperties().getStrings(x.getRequestedValue());
 
-      String propertyValue = propertyValues.isEmpty() ? null : Joiner.on(",").join(propertyValues);
+      if (!propertyValues.isEmpty() && propertyValues.stream().allMatch(Objects::isNull)) {
+        if (x.getDefaultValueExpression() != null) {
+          return x.getDefaultValueExpression();
+        }
+        throw new InternalCompilerException("No default set for configuration property '"
+            + x.getRequestedValue() + "'");
+      }
+      String propertyValue = propertyValues.isEmpty() ? null : Joiner.on(",").skipNulls().join(propertyValues);
 
       if (propertyValue != null) {
         // It is a configuration property.
diff --git a/user/test/com/google/gwt/dev/jjs/SystemGetPropertyTest.gwt.xml b/user/test/com/google/gwt/dev/jjs/SystemGetPropertyTest.gwt.xml
index f307fdb464..1502cb1789 100644
--- a/user/test/com/google/gwt/dev/jjs/SystemGetPropertyTest.gwt.xml
+++ b/user/test/com/google/gwt/dev/jjs/SystemGetPropertyTest.gwt.xml
@@ -33,4 +33,5 @@
   <set-property name="someOtherDynamicProperty" value="blue">
     <when-property-is name="collapsedProperty" value="two"/>
   </set-property>
+  <define-configuration-property name="configPropertyUnset" is-multi-valued="false"/>
 </module>
\ No newline at end of file
diff --git a/user/test/com/google/gwt/dev/jjs/test/SystemGetPropertyTest.java b/user/test/com/google/gwt/dev/jjs/test/SystemGetPropertyTest.java
index 696978a338..042a3f4300 100644
--- a/user/test/com/google/gwt/dev/jjs/test/SystemGetPropertyTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/SystemGetPropertyTest.java
@@ -36,5 +36,6 @@ public void testBindingProperties() {
     String expectedResult = "safari".equals(System.getProperty("user.agent")) ?
         "InSafari" : "NotInSafari";
     assertEquals(expectedResult, System.getProperty("someDynamicProperty"));
+    assertEquals("foo", System.getProperty("configPropertyUnset", "foo"));
   }
 }