diff --git a/config/src/main/java/com/typesafe/config/ConfigException.java b/config/src/main/java/com/typesafe/config/ConfigException.java
index fce04b40..f35e8dbe 100644
--- a/config/src/main/java/com/typesafe/config/ConfigException.java
+++ b/config/src/main/java/com/typesafe/config/ConfigException.java
@@ -126,6 +126,10 @@ public abstract class ConfigException extends RuntimeException implements Serial
                     cause);
         }
 
+        public Missing(ConfigOrigin origin, String path) {
+            this(origin, "No configuration setting found for key '" + path + "'", null);
+        }
+
         public Missing(String path) {
             this(path, null);
         }
@@ -134,9 +138,6 @@ public abstract class ConfigException extends RuntimeException implements Serial
             super(origin, message, cause);
         }
 
-        protected Missing(ConfigOrigin origin, String message) {
-            this(origin, message, null);
-        }
     }
 
     /**
diff --git a/config/src/main/java/com/typesafe/config/impl/SimpleConfig.java b/config/src/main/java/com/typesafe/config/impl/SimpleConfig.java
index ce1913ad..c0d6b65c 100644
--- a/config/src/main/java/com/typesafe/config/impl/SimpleConfig.java
+++ b/config/src/main/java/com/typesafe/config/impl/SimpleConfig.java
@@ -153,7 +153,7 @@ final class SimpleConfig implements Config, MergeableValue, Serializable {
             ConfigValueType expected, Path originalPath) {
         AbstractConfigValue v = self.peekAssumingResolved(key, originalPath);
         if (v == null)
-            throw new ConfigException.Missing(originalPath.render());
+            throw new ConfigException.Missing(self.origin(), originalPath.render());
 
         if (expected != null)
             v = DefaultTransformer.transform(v, expected);