diff --git a/config/src/main/java/com/typesafe/config/ConfigFactory.java b/config/src/main/java/com/typesafe/config/ConfigFactory.java
index 69b59f14..735ffed2 100644
--- a/config/src/main/java/com/typesafe/config/ConfigFactory.java
+++ b/config/src/main/java/com/typesafe/config/ConfigFactory.java
@@ -170,6 +170,14 @@ public final class ConfigFactory {
     }
 
     private static Config loadDefaultConfig(ClassLoader loader, ConfigParseOptions parseOptions) {
+      return loadDefaultConfig(loader, parseOptions, ConfigResolveOptions.defaults());
+    }
+
+    private static Config loadDefaultConfig(ClassLoader loader, ConfigResolveOptions resolveOptions) {
+      return loadDefaultConfig(loader, ConfigParseOptions.defaults(), resolveOptions);
+    }
+
+    private static Config loadDefaultConfig(ClassLoader loader, ConfigParseOptions parseOptions, ConfigResolveOptions resolveOptions) {
         int specified = 0;
 
         // override application.conf with config.file, config.resource,
@@ -185,7 +193,7 @@ public final class ConfigFactory {
             specified += 1;
 
         if (specified == 0) {
-            return load(loader, "application", parseOptions, ConfigResolveOptions.defaults());
+            return load(loader, "application", parseOptions, resolveOptions);
         } else if (specified > 1) {
             throw new ConfigException.Generic("You set more than one of config.file='" + file
                     + "', config.url='" + url + "', config.resource='" + resource
@@ -196,16 +204,16 @@ public final class ConfigFactory {
                     resource = resource.substring(1);
                 // this deliberately does not parseResourcesAnySyntax; if
                 // people want that they can use an include statement.
-                return load(loader, parseResources(loader, resource, parseOptions));
+                return load(loader, parseResources(loader, resource, parseOptions), resolveOptions);
             } else if (file != null) {
                 return load(
                         loader,
-                        parseFile(new File(file), parseOptions));
+                        parseFile(new File(file), parseOptions), resolveOptions);
             } else {
                 try {
                     return load(
                             loader,
-                            parseURL(new URL(url), parseOptions));
+                            parseURL(new URL(url), parseOptions), resolveOptions);
                 } catch (MalformedURLException e) {
                     throw new ConfigException.Generic("Bad URL in config.url system property: '"
                             + url + "': " + e.getMessage(), e);
@@ -280,16 +288,42 @@ public final class ConfigFactory {
      * @param loader
      *            class loader for finding resources
      * @param parseOptions
-      *            Options for parsing resources
+     *            Options for parsing resources
      * @return configuration for an application
      */
-    public static Config load(final ClassLoader loader, final ConfigParseOptions parseOptions) {
-        return ConfigImpl.computeCachedConfig(loader, "load", new Callable<Config>() {
-            @Override
-            public Config call() {
-                return loadDefaultConfig(loader, parseOptions);
-            }
-        });
+    public static Config load(ClassLoader loader, ConfigParseOptions parseOptions) {
+        return loadDefaultConfig(loader, parseOptions);
+    }
+
+    /**
+     * Like {@link #load()} but allows specifying a class loader other than the
+     * thread's current context class loader, and resolve options
+     *
+     * @param loader
+     *            class loader for finding resources
+     * @param resolveOptions
+      *            options for resolving the assembled config stack
+     * @return configuration for an application
+     */
+    public static Config load(ClassLoader loader, ConfigResolveOptions resolveOptions) {
+        return loadDefaultConfig(loader, resolveOptions);
+    }
+
+
+    /**
+     * Like {@link #load()} but allows specifying a class loader other than the
+     * thread's current context class loader, parse options, and resolve options
+     *
+     * @param loader
+     *            class loader for finding resources
+     * @param parseOptions
+     *            Options for parsing resources
+     * @param resolveOptions
+     *            options for resolving the assembled config stack
+     * @return configuration for an application
+     */
+    public static Config load(ClassLoader loader, ConfigParseOptions parseOptions, ConfigResolveOptions resolveOptions) {
+        return loadDefaultConfig(loader, parseOptions, resolveOptions);
     }
 
     /**