diff --git a/main/pom.xml b/main/pom.xml
index 862c9fe..c05044e 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -88,6 +88,7 @@
   </dependencies>
   <properties>
     <property name="install.home" value="${basedir.absolutePath}" />
+    <dollar>$</dollar>
   </properties>
   <build>
     <plugins>
@@ -112,7 +113,6 @@
                  so that we only have to maintain one set of properties
                  and only for that reason. -->
             <_include>src/main/resources/config.properties</_include>
-            <dollar>$</dollar>
           </instructions>
         </configuration>
       </plugin>
diff --git a/main/src/main/java/org/apache/felix/main/Main.java b/main/src/main/java/org/apache/felix/main/Main.java
index 9a68dc7..c98925a 100644
--- a/main/src/main/java/org/apache/felix/main/Main.java
+++ b/main/src/main/java/org/apache/felix/main/Main.java
@@ -166,8 +166,16 @@
      * @throws Exception If an error occurs.
     **/
 
-    public static void main(String[] argv) throws Exception
+    public static void main(String[] args) throws Exception
     {
+        // We support at most one argument, which is the bundle
+        // cache directory.
+        if (args.length > 1)
+        {
+            System.out.println("Usage: [<bundle-cache-dir>]");
+            System.exit(0);
+        }
+
         // Load system properties.
         Main.loadSystemProperties();
 
@@ -177,55 +185,17 @@
         // Copy framework properties from the system properties.
         Main.copySystemProperties(configProps);
 
-        // See if the profile name property was specified.
-        String profileName = configProps.getProperty(BundleCache.CACHE_PROFILE_PROP);
-
-        // See if the profile directory property was specified.
-        String profileDirName = configProps.getProperty(BundleCache.CACHE_PROFILE_DIR_PROP);
-        profileDirName = (profileDirName == null)
-            ? configProps.getProperty(SystemBundle.FRAMEWORK_STORAGE_PROP)
-            : profileDirName;
+        // If there is a passed in bundle cache directory, then
+        // that overwrites anything in the config file.
+        if (args.length > 0)
+        {
+            configProps.setProperty(SystemBundle.FRAMEWORK_STORAGE_PROP, args[0]);
+        }
 
         // Print welcome banner.
         System.out.println("\nWelcome to Felix.");
         System.out.println("=================\n");
 
-        // If no profile or profile directory is specified in the
-        // properties, then ask for a profile name.
-        if ((profileName == null) && (profileDirName == null))
-        {
-            System.out.print("Enter profile name: ");
-            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
-            try
-            {
-                profileName = in.readLine();
-            }
-            catch (IOException ex)
-            {
-                System.err.println("Could not read input.");
-                System.exit(-1);
-            }
-            System.out.println("");
-
-            // On some platforms readLine() can return null, such as when
-            // control-C is pressed, so check for that case.
-            if (profileName == null)
-            {
-                profileName = "";
-            }
-            else if (profileName.length() != 0)
-            {
-                configProps.setProperty(BundleCache.CACHE_PROFILE_PROP, profileName);
-            }
-        }
-
-        // A profile directory or name must be specified.
-        if ((profileDirName == null) && (profileName.length() == 0))
-        {
-            System.err.println("You must specify a profile name or directory.");
-            System.exit(-1);
-        }
-
         try
         {
             // Create a list for custom framework activators and
diff --git a/main/src/main/resources/config.properties b/main/src/main/resources/config.properties
index 3958c58..9b2d9cc 100644
--- a/main/src/main/resources/config.properties
+++ b/main/src/main/resources/config.properties
@@ -25,8 +25,22 @@
  org.osgi.util.tracker; version=1.3.3 \
  ${jre-${java.specification.version}}
 
+# The following property makes specified packages from the class path
+# available to all bundles. You should avoid using this property.
 #org.osgi.framework.bootdelegation=sun.*,com.sun.*
-#felix.cache.profile=foo
+
+# The following property explicitly specifies the location of the bundle
+# cache, which defaults to "felix-cache" in the current working directory.
+# If this value is not absolute, then the felix.cache.rootdir controls
+# how the absolute location is calculated. (See next property)
+#org.osgi.framework.storage=${felix.cache.rootdir}/felix-cache
+
+# The following property is used to convert a relative bundle cache
+# location into an absolute one by specifying the root to prepend to
+# the relative cache path. The default for this property is the
+# current working directory.
+#felix.cache.rootdir=${dollar}{user.dir}
+
 felix.auto.start.1= \
  file:bundle/org.apache.felix.shell-1.1.0-SNAPSHOT.jar \
  file:bundle/org.apache.felix.shell.tui-1.1.0-SNAPSHOT.jar \
diff --git a/main/src/main/resources/default.properties b/main/src/main/resources/default.properties
index a431179..cef2e2f 100644
--- a/main/src/main/resources/default.properties
+++ b/main/src/main/resources/default.properties
@@ -25,12 +25,33 @@
  org.osgi.util.tracker; version=1.3.3 \
  ${dollar}{jre-${dollar}{java.specification.version}}
 
+# The following property makes specified packages from the class path
+# available to all bundles. You should avoid using this property.
 #org.osgi.framework.bootdelegation=sun.*,com.sun.*
-#felix.cache.profile=foo
+
+# The following property explicitly specifies the location of the bundle
+# cache, which defaults to "felix-cache" in the current working directory.
+# If this value is not absolute, then the felix.cache.rootdir controls
+# how the absolute location is calculated. (See next property)
+#org.osgi.framework.storage=${felix.cache.rootdir}/felix-cache
+
+# The following property is used to convert a relative bundle cache
+# location into an absolute one by specifying the root to prepend to
+# the relative cache path. The default for this property is the
+# current working directory.
+#felix.cache.rootdir=${dollar}{user.dir}
+
 felix.log.level=4
 felix.startlevel.framework=1
 felix.startlevel.bundle=1
-#framework.service.urlhandlers=false
+
+# Invalid fragment bundles throw an 'exception' by default, but
+# uncomment the follow line to have them log a 'warning' instead.
+#felix.fragment.validation=warning
+
+# Felix installs a stream and content handler factories by default,
+# uncomment the following line to not install them.
+#felix.service.urlhandlers=false
 
 #
 # Java platform package export properties.
