diff --git a/utils/src/main/java/org/apache/felix/utils/properties/InterpolationHelper.java b/utils/src/main/java/org/apache/felix/utils/properties/InterpolationHelper.java
index b3a07fb..833f92a 100644
--- a/utils/src/main/java/org/apache/felix/utils/properties/InterpolationHelper.java
+++ b/utils/src/main/java/org/apache/felix/utils/properties/InterpolationHelper.java
@@ -267,11 +267,11 @@
         return val;
     }
 
-    private static class BundleContextSubstitutionCallback implements SubstitutionCallback
+    static class BundleContextSubstitutionCallback implements SubstitutionCallback
     {
         private final BundleContext context;
 
-        private BundleContextSubstitutionCallback(BundleContext context)
+        public BundleContextSubstitutionCallback(BundleContext context)
         {
             this.context = context;
         }
diff --git a/utils/src/main/java/org/apache/felix/utils/properties/Properties.java b/utils/src/main/java/org/apache/felix/utils/properties/Properties.java
index bb15907..81817aa 100644
--- a/utils/src/main/java/org/apache/felix/utils/properties/Properties.java
+++ b/utils/src/main/java/org/apache/felix/utils/properties/Properties.java
@@ -86,22 +86,36 @@
     private List<String> header;
     private List<String> footer;
     private File location;
-    private BundleContext context;
+    private InterpolationHelper.SubstitutionCallback callback;
+    private boolean substitute = true;
 
     public Properties() {
     }
 
     public Properties(File location) throws IOException {
-      this(location, null);
+      this(location, (InterpolationHelper.SubstitutionCallback) null);
     }
 
     public Properties(File location, BundleContext context) throws IOException {
+        this(location, new InterpolationHelper.BundleContextSubstitutionCallback(context));
+    }
+
+    public Properties(File location, InterpolationHelper.SubstitutionCallback callback) throws IOException {
         this.location = location;
-        this.context = context;
+        this.callback = callback;
         if(location.exists())
             load(location);
     }
 
+    public Properties(boolean substitute) throws IOException {
+        this.substitute = substitute;
+    }
+
+    public Properties(File location, boolean substitute) throws IOException {
+        this.location = location;
+        this.substitute = substitute;
+    }
+
     public void load(File location) throws IOException {
         InputStream is = new FileInputStream(location);
         try {
@@ -347,13 +361,27 @@
                                new ArrayList<String>(reader.getValueLines())));
         }
         footer = new ArrayList<String>(reader.getCommentLines());
-        if(context != null)
+        if (substitute)
         {
-            InterpolationHelper.performSubstitution(storage, context);
+            substitute();
+        }
+    }
+
+    public void substitute()
+    {
+        substitute(callback);
+    }
+
+    public void substitute(InterpolationHelper.SubstitutionCallback callback)
+    {
+        if(callback != null)
+        {
+            InterpolationHelper.performSubstitution(storage, callback);
         }
         else {
             InterpolationHelper.performSubstitution(storage);
         }
+
     }
 
     /**
