diff --git a/main/doc/apache-felix-framework-launching-and-embedding.html b/main/doc/apache-felix-framework-launching-and-embedding.html
index d2d0f82..c65aaea 100644
--- a/main/doc/apache-felix-framework-launching-and-embedding.html
+++ b/main/doc/apache-felix-framework-launching-and-embedding.html
@@ -27,37 +27,41 @@
     <div class="main">
 <h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-ApacheFelixFrameworkLaunchingandEmbedding"></a>Apache Felix Framework Launching and Embedding</h1>
 
-<p><em>[This document is based on Felix 1.4.0.]</em></p>
+<p><em>[This document describes framework launching introduced in Felix 2.0.0 and is incompatible with older versions of the Felix framework.]</em></p>
 
 <ul>
-	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-introduction" title="introduction on Apache Felix Framework Launching and Embedding">Introduction</a></li>
-	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-overview" title="overview on Apache Felix Framework Launching and Embedding">API Overview</a>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-introduction">Introduction</a></li>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-overview">API Overview</a>
+
 	<ul>
-		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-creatingandconfiguring" title="creating-and-configuring on Apache Felix Framework Launching and Embedding">Creating and Configuring the Framework Instance</a></li>
-		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-startinginstance" title="starting-instance on Apache Felix Framework Launching and Embedding">Starting the Framework Instance</a></li>
-		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-stoppinginstance" title="stopping-instance on Apache Felix Framework Launching and Embedding">Stopping the Framework Instance</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-creatingandconfiguring">Creating and Configuring the Framework Instance</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-startinginstance">Starting the Framework Instance</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-stoppinginstance">Stopping the Framework Instance</a></li>
 	</ul>
 	</li>
-	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-launching" title="launching on Apache Felix Framework Launching and Embedding">Launching Felix</a>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-launching">Launching Felix</a>
+
 	<ul>
-		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-standardlauncher" title="standard-launcher on Apache Felix Framework Launching and Embedding">Standard Felix Launcher</a></li>
-		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-customlauncher" title="custom-launcher on Apache Felix Framework Launching and Embedding">Custom Felix Launcher</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-standardlauncher">Standard Felix Launcher</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-customlauncher">Custom Felix Launcher</a></li>
 	</ul>
 	</li>
-	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-embedding" title="embedding on Apache Felix Framework Launching and Embedding">Embedding Felix</a>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-embedding">Embedding Felix</a>
 	<ul>
-		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostinteraction" title="host-interaction on Apache Felix Framework Launching and Embedding">Host/Felix Interaction</a></li>
-		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostservices" title="host-services on Apache Felix Framework Launching and Embedding">Providing Host Application Services</a></li>
-		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostserviceusage" title="host-service-usage on Apache Felix Framework Launching and Embedding">Using Services Provided by Bundles</a>
+
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostinteraction">Host/Felix Interaction</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostservices">Providing Host Application Services</a></li>
+		<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostserviceusage">Using Services Provided by Bundles</a>
 		<ul>
-			<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-servicereflection" title="service-reflection on Apache Felix Framework Launching and Embedding">Using Bundle Services via Reflection</a></li>
-			<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-serviceother" title="service-other on Apache Felix Framework Launching and Embedding">Other Approaches</a></li>
+			<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-servicereflection">Using Bundle Services via Reflection</a></li>
+			<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-serviceother">Other Approaches</a></li>
+
 		</ul>
 		</li>
 	</ul>
 	</li>
-	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-caveat" title="caveat on Apache Felix Framework Launching and Embedding">Caveat</a></li>
-	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-feedback" title="feedback on Apache Felix Framework Launching and Embedding">Feedback</a></li>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-caveat">Caveat</a></li>
+	<li><a href="#ApacheFelixFrameworkLaunchingandEmbedding-feedback">Feedback</a></li>
 </ul>
 
 
@@ -65,32 +69,17 @@
 
 <h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-Introduction"></a>Introduction</h1>
 
-<p>The Apache Felix framework is intended to be easily launchable and
-embeddable. For example, Felix avoids the use of system properties for
-configuration, since these are globals and can cause interference if
-multiple framework instances are created in the same VM. Felix also
-tries to multiplex singleton facilities, like the URL stream handler
-factory. The goal is to make it possible to use Felix in as many
-scenarios as possible; however, this is still just a goal. In other
-words, this is a work in progress and if any issues arise, it would be
-greatly appreciated if they are brought to the attention of the Felix
-community. The next section provides a Felix API overview, while the
-remainder of the document is divided into two sections, one focusing on
-how to launch Felix and one focusing on how to embed Felix into a host
-application.</p>
+<p>The Apache Felix framework is intended to be easily launchable and embeddable. For example, Felix avoids the use of system properties for configuration, since these are globals and can cause interference if multiple framework instances are created in the same VM. Felix also tries to multiplex singleton facilities, like the URL stream handler factory. The goal is to make it possible to use Felix in as many scenarios as possible; however, this is still just a goal. In other words, this is a work in progress and if any issues arise, it would be greatly appreciated if they are brought to the attention of the Felix community. The next section provides a Felix API overview, while the remainder of the document is divided into two sections, one focusing on how to launch Felix and one focusing on how to embed Felix into a host application.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-overview"></a></p>
 
 <h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-APIOverview"></a>API Overview</h1>
 
-<p>The Felix framework is implemented by the <tt>org.apache.felix.framework.Felix</tt> class or just <tt>Felix</tt>
-for short. As part of the ongoing OSGi specification process, there is
-a movement to standardize the API for launching and embedding OSGi
-framework implementations. The approach is to have the framework
-implement the <tt>org.osgi.framework.launch.Framework</tt> interface, which extends the <tt>org.osgi.framework.Bundle</tt> interface. These interfaces provide the necessary means to launch and manage framework instances. The <tt>Bundle</tt> interface is defined as:</p>
+<p>The Felix framework is implemented by the <tt>org.apache.felix.framework.Felix</tt> class or just <tt>Felix</tt> for short. As part of the R4.2 OSGi specification, the launching and embedding API of the OSGi framework has been standardized. The approach is to have the framework implement the <tt>org.osgi.framework.launch.Framework</tt> interface, which extends the <tt>org.osgi.framework.Bundle</tt> interface. These interfaces provide the necessary means to launch and manage framework instances. The <tt>Bundle</tt> interface is defined as:</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> Bundle
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">public</span> <span class="code-keyword">interface</span> Bundle
 {
     BundleContext getBundleContext();
     <span class="code-object">long</span> getBundleId();
@@ -107,6 +96,7 @@
     ServiceReference[] getServicesInUse();
     <span class="code-object">int</span> getState();
     <span class="code-object">String</span> getSymbolicName();
+    Version getVersion();
     <span class="code-object">boolean</span> hasPermission(<span class="code-object">Object</span> obj);
     <span class="code-object">Class</span> loadClass(<span class="code-object">String</span> name) <span class="code-keyword">throws</span> ClassNotFoundException;
     void start() <span class="code-keyword">throws</span> BundleException;
@@ -114,57 +104,52 @@
     void uninstall() <span class="code-keyword">throws</span> BundleException;
     void update() <span class="code-keyword">throws</span> BundleException;
     void update(InputStream is) <span class="code-keyword">throws</span> BundleException;
-}</pre>
+}
+
+</pre>
 </div></div>
 
 <p>The <tt>Framework</tt> interface is defined as:</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> Framework <span class="code-keyword">extends</span> Bundle
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">public</span> <span class="code-keyword">interface</span> Framework <span class="code-keyword">extends</span> Bundle
 {
     void init();
     FrameworkEvent waitForStop();
-}</pre>
+}
+
+</pre>
 </div></div>
 
-<p>An additional requirement for framework implementations not captured
-in the interface definitions is that they must implement a public
-constructor that accepts a <tt>Map</tt>, which is used to pass in configuration properties. When you instantiate the <tt>Felix</tt>
-class, the resulting object is the actual System Bundle that bundles
-inside the framework will see if they get bundle 0, which is the System
-Bundle as defined by the OSGi specification.</p>
+<p>To actually construct a framework instance, the R4.2 specification defines the FrameworkFactory interface:</p>
 
-<table class="warningMacro" align="center" border="0" cellpadding="5" cellspacing="8" width="85%"><colgroup><col width="24"><col></colgroup><tbody><tr><td valign="top"><img src="apache-felix-framework-launching-and-embedding_files/forbidden.gif" alt="" align="absmiddle" border="0" height="16" width="16"></td><td><b class="strong">WARNING</b><br>
-<p>This API is undergoing changes and is not completely finalized, so future changes are possible.</p></td></tr></tbody></table>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">public</span> <span class="code-keyword">interface</span> FrameworkFactory
+{
+    Framework newFramework(Map configMap);
+}
+</pre>
+</div></div>
+
+<p>The framework factory can be used to create configured framework instances. It is obtained following the standard <tt>META-INF/services</tt> approach.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-creatingandconfiguring"></a></p>
 
 <h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-CreatingandConfiguringtheFrameworkInstance"></a>Creating and Configuring the Framework Instance</h2>
 
-<p>To create a framework instance, simply instantiate the <tt>Felix</tt> class. A newly created framework instance is in the <tt>Bundle.INSTALLED</tt> state. You configure the instance by passing the constructor a <tt>Map</tt> containing its configurations properties. The configuration map may contain the following OSGi standard properties:</p>
+<p>You use the framework factory to construct and configure a framework instance (or by directly instantiating the Felix class). The configuration map may contain the following OSGi standard properties:</p>
 
 <ul>
-	<li><tt>org.osgi.framework.system.packages</tt> - specifies a
-list of packages the system bundle should export from the environment;
-if this is not set, then the framework uses a reasonable default fault.</li>
-	<li><tt>org.osgi.framework.system.packages.extra</tt>
-- specifies a list of additional packages the system bundle should
-export from the environment that are appended to the packages specified
-in <tt>org.osgi.framework.system.packages</tt>; there is no default value for this property.</li>
-	<li><tt>org.osgi.framework.bootdelegation</tt>
-- specifies a list of packages that should be made implicitly available
-to all bundles from the environment (i.e., no need to import them);
-there is no default value for this property and its use should be
-avoided.</li>
-	<li><tt>org.osgi.framework.storage</tt> - specifies the
-path to a directory, which will be created if it does not exist, to use
-for bundle cache storage; the default value for this property is "<tt>felix-cache</tt>" in the current working directory.</li>
-	<li><tt>org.osgi.framework.storage.clean</tt>
-- specifies whether the bundle cache should be flushed; the default
-value for this property is "none", but it can be changed to
-"onFirstInit" to flush the bundle cache when the framework is
-initialized.</li>
-	<li><tt>org.osgi.framework.startlevel</tt> - specifies the start level the framework enters upon startup; the default value for this property is 1.</li>
+	<li><tt>org.osgi.framework.system.packages</tt> - specifies a list of packages the system bundle should export from the environment; if this is not set, then the framework uses a reasonable default fault.</li>
+	<li><tt>org.osgi.framework.system.packages.extra</tt> - specifies a list of additional packages the system bundle should export from the environment that are appended to the packages specified in <tt>org.osgi.framework.system.packages</tt>; there is no default value for this property.</li>
+
+	<li><tt>org.osgi.framework.bootdelegation</tt> - specifies a list of packages that should be made implicitly available to all bundles from the environment (i.e., no need to import them); there is no default value for this property and its use should be avoided.</li>
+	<li><tt>org.osgi.framework.storage</tt> - specifies the path to a directory, which will be created if it does not exist, to use for bundle cache storage; the default value for this property is "<tt>felix-cache</tt>" in the current working directory.</li>
+	<li><tt>org.osgi.framework.storage.clean</tt> - specifies whether the bundle cache should be flushed; the default value for this property is "none", but it can be changed to "onFirstInit" to flush the bundle cache when the framework is initialized.</li>
+
+	<li><tt>org.osgi.framework.startlevel.beginning</tt> - specifies the start level the framework enters upon startup; the default value for this property is 1.</li>
 </ul>
 
 
@@ -172,48 +157,36 @@
 
 <ul>
 	<li><tt>felix.cache.rootdir</tt> - specifies which directory should be used to calculate absolute paths when relative paths are used for the <tt>org.osgi.framework.storage</tt> property; the default value for this property is the current working directory.</li>
-	<li><tt>felix.systembundle.activators</tt> - specifies a <tt>List</tt> of <tt>BundleActivator</tt>
-instances that are started/stopped when the System Bundle is
-started/stopped; the specified instances will receive the System
-Bundle's <tt>BundleContext</tt> when invoked.</li>
+
+	<li><tt>felix.systembundle.activators</tt> - specifies a <tt>List</tt> of <tt>BundleActivator</tt> instances that are started/stopped when the System Bundle is started/stopped; the specified instances will receive the System Bundle's <tt>BundleContext</tt> when invoked.</li>
 	<li><tt>felix.log.logger</tt> - specifies an instance of <tt>org.apache.felix.framework.util.Logger</tt> that the framework uses as its default logger.</li>
-	<li><tt>felix.log.level</tt> - specifies an integer <tt>String</tt>
-whose value indicates the degree of logging reported by the framework;
-the default value is "1" and "0" turns off logging completely,
-otherwise log levels match those specified in the OSGi Log Service
-(i.e., 1 = error, 2 = warning, 3 = information, and 4 = debug).</li>
+
+	<li><tt>felix.log.level</tt> - specifies an integer <tt>String</tt> whose value indicates the degree of logging reported by the framework; the default value is "1" and "0" turns off logging completely, otherwise log levels match those specified in the OSGi Log Service (i.e., 1 = error, 2 = warning, 3 = information, and 4 = debug).</li>
 	<li><tt>felix.startlevel.bundle</tt> - specifies the start level for newly installed bundles; the default value is 1.</li>
-	<li><tt>framework.service.urlhandlers</tt>
-- specifies whether or not to activate the URL Handlers service for the
-framework instance; the default value is "&lt;tt&gt;true&lt;/tt&gt;",
-which results in the
-&lt;tt&gt;URL.setURLStreamHandlerFactory()&lt;/tt&gt; and
-&lt;tt&gt;URLConnection.setContentHandlerFactory()&lt;/tt&gt; being
-called.</li>
+	<li><tt>felix.bootdelegation.implicit</tt> - specifies whether or not the framework should try to guess when to boot delegate when external code tries to load classes or resources; the default value is "<tt>true</tt>".</li>
+
+	<li><tt>framework.service.urlhandlers</tt> - specifies whether or not to activate the URL Handlers service for the framework instance; the default value is "<tt>true</tt>", which results in the <tt>URL.setURLStreamHandlerFactory()</tt> and <tt>URLConnection.setContentHandlerFactory()</tt> being called.</li>
 </ul>
 
 
-<p>The configuration map passed into the constructor is copied and the
-keys are treated as case insensitive. You are not able to change the
-framework's configuration after construction. If you need a different
-configuration, you must create a new framework instance.</p>
+<p>The configuration map is copied and the keys are treated as case insensitive. You are not able to change the framework's configuration after construction. If you need a different configuration, you must create a new framework instance.</p>
 
-<table class="warningMacro" align="center" border="0" cellpadding="5" cellspacing="8" width="85%"><colgroup><col width="24"><col></colgroup><tbody><tr><td valign="top"><img src="apache-felix-framework-launching-and-embedding_files/forbidden.gif" alt="" align="absmiddle" border="0" height="16" width="16"></td><td><b class="strong">WARNING</b><br>
-<p>Felix <tt>1.4.0</tt> introduced some significant changes to its configuration properties; if you are upgrading from a previous version, the <a href="http://felix.apache.org/site/apache-felix-usage-documentation.html#ApacheFelixUsageDocumentation-migrating" title="migrating on Apache Felix Usage Documentation">usage document</a> describes the configuration property changes.</p></td></tr></tbody></table>
+<div class='panelMacro'><table class='warningMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/forbidden.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>WARNING</b><br /><p>Felix configuration properties have change considerably starting from <tt>1.4.0</tt>; if you are upgrading from an earlier version, the <a href="/confluence/display/FELIX/Apache+Felix+Framework+Usage+Documentation#ApacheFelixFrameworkUsageDocumentation-migrating">usage document</a> describes the configuration property changes.</p></td></tr></table></div>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-startinginstance"></a></p>
 
 <h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-StartingtheFrameworkInstance"></a>Starting the Framework Instance</h2>
 
-<p>The <tt>start()</tt> method is used to start the framework instance. If the <tt>init()</tt> method was not invoked prior to calling <tt>start()</tt>, then it is implicitly invoked from <tt>start()</tt>. The two methods result in two different framework state transitions:</p>
+<p>The <tt>start()</tt> method is used to start the framework instance. If the <tt>init()</tt> method was not invoked prior to calling <tt>start()</tt>, then it is invoked by <tt>start()</tt>. The two methods result in two different framework state transitions:</p>
 
 <ul>
 	<li><tt>init()</tt> results in the framework instance in the <tt>Bundle.STARTING</tt> state.</li>
 	<li><tt>start()</tt> results in the framework instance in the <tt>Bundle.ACTIVE</tt> state.</li>
+
 </ul>
 
 
-<p>The <tt>init()} method is necessary since the framework does not have a {{BundleContext</tt> when it is first created, so a transition to the <tt>Bundle.STARTING</tt> state is required to acquire its context (via <tt>Bundle.getBundleContext()</tt>) for performing various tasks, such as installing bundles. Note that Felix also provides the <tt>felix.systembundle.activators</tt> property that serves a similar purpose. After the <tt>init()</tt> method completes, the follow actions have been performed:</p>
+<p>The <tt>init()</tt> method is necessary since the framework does not have a <tt>BundleContext</tt> when it is first created, so a transition to the <tt>Bundle.STARTING</tt> state is required to acquire its context (via <tt>Bundle.getBundleContext()</tt>) for performing various tasks, such as installing bundles. Note that Felix also provides the <tt>felix.systembundle.activators</tt> property that serves a similar purpose, but is not standard. After the <tt>init()</tt> method completes, the follow actions have been performed:</p>
 
 <ul>
 	<li>Event handling is enabled.</li>
@@ -221,6 +194,7 @@
 	<li>The framework is set to start level 0.</li>
 	<li>All bundles in the bundle caches are reified and their state is set to <tt>Bundle.INSTALLED</tt>.</li>
 	<li>The framework gets a valid <tt>BundleContext</tt>.</li>
+
 	<li>All framework-provided services are made available (e.g., PackageAdmin, StartLevel, etc.).</li>
 	<li>The framework enters the <tt>Bundle.STARTING</tt> state.</li>
 </ul>
@@ -236,82 +210,133 @@
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-launching"></a></p>
 
-<h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-LaunchingFelix"></a>Launching Felix</h1>
+<h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-LaunchingaFramework"></a>Launching a Framework</h1>
 
-<p>Launching Felix is fairly simple and involves only three steps:</p>
+<p>Launching a framework is fairly simple and involves only four steps:</p>
 
 <ol>
 	<li>Define some configuration properties.</li>
-	<li>Create an instance of <tt>org.apache.felix.framework.Felix</tt> with the configuration properties.</li>
-	<li>Invoke the <tt>org.apache.felix.framework.Felix.start()</tt> method.</li>
+	<li>Obtain framework factory.</li>
+	<li>Use factory to create framework with the configuration properties.</li>
+
+	<li>Invoke the <tt>Framework.start()</tt> method.</li>
 </ol>
 
 
-<p>In reality, the first step is optional, since all properties will
-have reasonable defaults, but if you are creating a launcher you will
-generally want to more than that, such as automatically installing and
-starting bundles when you start the framework instance. The default
-Felix launcher defines reusable functionality to automatically install
-and/or start bundles upon framework startup; see the <a href="http://felix.apache.org/site/apache-felix-usage-documentation.html#ApacheFelixUsageDocumentation-configuringfelix" title="configuring-felix on Apache Felix Usage Documentation">usage document</a> for more information on configuring Felix and on the various configuration properties.</p>
+<p>In reality, the first step is optional, since all properties will have reasonable defaults, but if you are creating a launcher you will generally want to more than that, such as automatically installing and starting bundles when you start the framework instance. The default Felix launcher defines reusable functionality to automatically install and/or start bundles upon framework startup; see the <a href="/confluence/display/FELIX/Apache+Felix+Framework+Usage+Documentation#ApacheFelixFrameworkUsageDocumentation-configuringfelix">usage document</a> for more information on configuring Felix and on the various configuration properties.</p>
 
-<p>The remainder of this section describes how the standard Felix
-launcher works as well as how to create a custom launcher for Felix.</p>
+<p>The remainder of this section describes how the standard Felix launcher works as well as how to create a custom launcher for Felix.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-standardlauncher"></a></p>
 
 <h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-StandardFelixLauncher"></a>Standard Felix Launcher</h2>
 
-<p>The standard Felix launcher is very simple and is not intended to
-solve every possible requirement; it is intended to work for most
-standard situations. Most special launching requirements should be
-resolved by creating a custom launcher. This section describes how the
-standard launcher works. The following code represents the complete <tt>main()</tt> method of the standard launcher, each numbered comment will be described in more detail below:</p>
+<p>The standard Felix launcher is very simple and is not intended to solve every possible requirement; it is intended to work for most standard situations. Most special launching requirements should be resolved by creating a custom launcher. This section describes how the standard launcher works. The following code represents the complete <tt>main()</tt> method of the standard launcher, each numbered comment will be described in more detail below:</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">static</span> void main(<span class="code-object">String</span>[] argv) <span class="code-keyword">throws</span> Exception
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">public</span> <span class="code-keyword">static</span> void main(<span class="code-object">String</span>[] args) <span class="code-keyword">throws</span> Exception
 {
-    <span class="code-comment">// (1) Check <span class="code-keyword">for</span> proper command line usage.
-</span>    <span class="code-keyword">if</span> (args.length &gt; 1)
+    <span class="code-comment">// (1) Check <span class="code-keyword">for</span> command line arguments and verify usage.
+
+</span>    <span class="code-object">String</span> bundleDir = <span class="code-keyword">null</span>;
+    <span class="code-object">String</span> cacheDir = <span class="code-keyword">null</span>;
+    <span class="code-object">boolean</span> expectBundleDir = <span class="code-keyword">false</span>;
+    <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &lt; args.length; i++)
     {
-        <span class="code-object">System</span>.out.println(<span class="code-quote">"Usage: [&lt;bundle-cache-dir&gt;]"</span>);
+        <span class="code-keyword">if</span> (args[i].equals(BUNDLE_DIR_SWITCH))
+        {
+            expectBundleDir = <span class="code-keyword">true</span>;
+        }
+        <span class="code-keyword">else</span> <span class="code-keyword">if</span> (expectBundleDir)
+        {
+            bundleDir = args[i];
+            expectBundleDir = <span class="code-keyword">false</span>;
+        }
+        <span class="code-keyword">else</span>
+
+        {
+            cacheDir = args[i];
+        }
+    }
+    <span class="code-keyword">if</span> ((args.length &gt; 3) || (expectBundleDir &amp;&amp; bundleDir == <span class="code-keyword">null</span>))
+    {
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"Usage: [-b &lt;bundle-deploy-dir&gt;] [&lt;bundle-cache-dir&gt;]"</span>);
         <span class="code-object">System</span>.exit(0);
     }
 
     <span class="code-comment">// (2) Load system properties.
+
 </span>    Main.loadSystemProperties();
 
     <span class="code-comment">// (3) Read configuration properties.
 </span>    Properties configProps = Main.loadConfigProperties();
-
-    <span class="code-comment">// (4) Copy framework properties from the system properties.
-</span>    Main.copySystemProperties(configProps);
-
-    <span class="code-comment">// (5) If specified, use command-line argument as path to bundle cache.
-</span>    <span class="code-keyword">if</span> (args.length &gt; 0)
+    <span class="code-keyword">if</span> (configProps == <span class="code-keyword">null</span>)
     {
-        configProps.setProperty(Constants.FRAMEWORK_STORAGE, args[0]);
+        <span class="code-object">System</span>.err.println(<span class="code-quote">"No "</span> + CONFIG_PROPERTIES_FILE_VALUE + <span class="code-quote">" found."</span>);
+        configProps = <span class="code-keyword">new</span> Properties();
     }
 
-    <span class="code-comment">// (6) Create a list <span class="code-keyword">for</span> custom framework activators and
-</span>    <span class="code-comment">// add an instance of the auto-activator it <span class="code-keyword">for</span> processing
-</span>    <span class="code-comment">// auto-install and auto-start properties. Add <span class="code-keyword">this</span> list
-</span>    <span class="code-comment">// to the configuration properties.
-</span>    List list = <span class="code-keyword">new</span> ArrayList();
-    list.add(<span class="code-keyword">new</span> AutoActivator(configProps));
-    configProps.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
+    <span class="code-comment">// (4) Copy framework properties from the system properties.
+
+</span>    Main.copySystemProperties(configProps);
+        
+    <span class="code-comment">// (5) Use the specified auto-deploy directory over <span class="code-keyword">default</span>.
+</span>    <span class="code-keyword">if</span> (bundleDir != <span class="code-keyword">null</span>)
+    {
+        configProps.setProperty(AutoProcessor.AUTO_DEPLOY_DIR_PROPERY, bundleDir);
+    }
+
+    <span class="code-comment">// (6) Use the specified bundle cache directory over <span class="code-keyword">default</span>.
+</span>    <span class="code-keyword">if</span> (cacheDir != <span class="code-keyword">null</span>)
+    {
+        configProps.setProperty(Constants.FRAMEWORK_STORAGE, cacheDir);
+    }
+
+    <span class="code-comment">// (7) Add a shutdown hook to clean stop the framework.
+
+</span>    <span class="code-object">String</span> enableHook = configProps.getProperty(SHUTDOWN_HOOK_PROP);
+    <span class="code-keyword">if</span> ((enableHook == <span class="code-keyword">null</span>) || !enableHook.equalsIgnoreCase(<span class="code-quote">"<span class="code-keyword">false</span>"</span>))
+    {
+        <span class="code-object">Runtime</span>.getRuntime().addShutdownHook(<span class="code-keyword">new</span> <span class="code-object">Thread</span>() {
+            <span class="code-keyword">public</span> void run()
+            {
+                <span class="code-keyword">try</span>
+
+                {
+                    <span class="code-keyword">if</span> (m_fwk != <span class="code-keyword">null</span>)
+                    {
+                        m_fwk.stop();
+                        m_fwk.waitForStop(0);
+                    }
+                }
+                <span class="code-keyword">catch</span> (Exception ex)
+                {
+                    <span class="code-object">System</span>.err.println(<span class="code-quote">"Error stopping framework: "</span> + ex);
+                }
+            }
+        });
+    }
 
     <span class="code-comment">// Print welcome banner.
-</span>    <span class="code-object">System</span>.out.println(<span class="code-quote">"\nWelcome to Felix."</span>);
-    <span class="code-object">System</span>.out.println(<span class="code-quote">"=================\n"</span>);
+</span>    <span class="code-object">System</span>.out.println(<span class="code-quote">"\nWelcome to Felix"</span>);
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"================\n"</span>);
 
     <span class="code-keyword">try</span>
+
     {
-        <span class="code-comment">// (7) Create an instance and start the framework.
-</span>
-        m_felix = <span class="code-keyword">new</span> Felix(configProps);
-        m_felix.start();
-        <span class="code-comment">// (8) Wait <span class="code-keyword">for</span> framework to stop to exit the VM.
-</span>        m_felix.waitForStop();
+        <span class="code-comment">// (8) Create an instance and initialize the framework.
+</span>        FrameworkFactory factory = getFrameworkFactory();
+        m_fwk = factory.newFramework(configProps);
+        m_fwk.init();
+        <span class="code-comment">// (9) Use the system bundle context to process the auto-deploy
+</span>        <span class="code-comment">// and auto-install/auto-start properties.
+</span>        AutoProcessor.process(configProps, m_fwk.getBundleContext());
+        <span class="code-comment">// (10) Start the framework.
+</span>        m_fwk.start();
+        <span class="code-comment">// (11) Wait <span class="code-keyword">for</span> framework to stop to exit the VM.
+
+</span>        m_fwk.waitForStop(0);
         <span class="code-object">System</span>.exit(0);
     }
     <span class="code-keyword">catch</span> (Exception ex)
@@ -320,118 +345,80 @@
         ex.printStackTrace();
         <span class="code-object">System</span>.exit(-1);
     }
-}</pre>
+}
+</pre>
 </div></div>
 
 <p>The general steps of the standard launcher are quite straightforward:</p>
 
 <ol>
-	<li>The launcher only supports a single, optional command-line
-argument, which is the path to the bundle cache, so check for this and
-issue a usage message it there are more than one arguments.</li>
-	<li>Load any system properties specified in the <tt>system.properties</tt> file; this file is typically located in the <tt>conf/</tt> directory of the Felix installation directory, but it can be specified directly using the <tt>felix.system.properties</tt>
-system property. This file is not needed to launch Felix and is
-provided merely for convenience when system properties must be
-specified. The file is a standard Java properties file, but it also
-supports property substitution using <tt>${&lt;property-name</tt>} syntax. Property substitution can be nested; only system properties will be used for substitution.</li>
-	<li>Load any configuration properties specified in the <tt>config.properties</tt> file; this file is typically located in the <tt>conf/</tt> directory of the Felix installation directory, but it can be specified directly using the <tt>felix.config.properties</tt>
-system property. This file is used to configure the Felix instance
-created by the launcher. The file is a standard Java properties file,
-but it also supports property substitution using "<tt>${&lt;property-name</tt>}"
-syntax. Property substitution can be nested; configuration and system
-properties will be used for substitution with configuration properties
-having precedence.</li>
-	<li>For convenience, any configuration
-properties that are set as system properties will be copied into the
-set of configuration properties to provide an easy way to add to or
-override configuration properties specified in the <tt>config.properties</tt> file.</li>
-	<li>If there is a single command-line argument, then use that to set the value of <tt>org.osgi.framework.storage</tt>; relative paths are relative to the current directory unless the <tt>felix.cache.rootdir</tt> property is set.</li>
-	<li>Create a list to hold custom framework activators and add an instance of <tt>org.apache.felix.main.AutoActivator</tt>, which will process <tt>felix.auto.install</tt> and <tt>felix.auto.start</tt> configuration properties during framework startup to automatically install and/or start bundles; see the <a href="http://felix.apache.org/site/apache-felix-usage-documentation.html#ApacheFelixUsageDocumentation-configuringfelix" title="configuring-felix on Apache Felix Usage Documentation">usage document</a> for more information configuration properties.</li>
-	<li>Create the Felix instance passing in the configuration properties, then call <tt>start()</tt>.</li>
+	<li>The launcher supports setting the auto-deploy directory (with the <tt>-b</tt> switch) and setting the bundle cache path with a single argument, so check for this and issue a usage message it there are more than one arguments.</li>
+	<li>Load any system properties specified in the <tt>system.properties</tt> file; this file is typically located in the <tt>conf/</tt> directory of the Felix installation directory, but it can be specified directly using the <tt>felix.system.properties</tt> system property. This file is not needed to launch Felix and is provided merely for convenience when system properties must be specified. The file is a standard Java properties file, but it also supports property substitution using <tt>${&lt;property-name</tt>} syntax. Property substitution can be nested; only system properties will be used for substitution.</li>
+
+	<li>Load any configuration properties specified in the <tt>config.properties</tt> file; this file is typically located in the <tt>conf/</tt> directory of the Felix installation directory, but it can be specified directly using the <tt>felix.config.properties</tt> system property. This file is used to configure the Felix instance created by the launcher. The file is a standard Java properties file, but it also supports property substitution using "<tt>${&lt;property-name</tt>}" syntax. Property substitution can be nested; configuration and system properties will be used for substitution with configuration properties having precedence.</li>
+	<li>For convenience, any configuration properties that are set as system properties are copied into the set of configuration properties. This provide an easy way to add to or override configuration properties specified in the <tt>config.properties</tt> file, since the Felix instance will never look at system properties for configuration.</li>
+
+	<li>If the <tt>-b</tt> switch was used to specify an auto-deploy directory, then use that to set the value of <tt>felix.auto.deploy.dir</tt>.</li>
+	<li>If a single command-line argument is specified, then use that to set the value of <tt>org.osgi.framework.storage</tt>; relative paths are relative to the current directory unless the <tt>felix.cache.rootdir</tt> property is set.</li>
+	<li>Create a framework instance using the <tt>FrameworkFactory</tt> passing in the configuration properties, then initialize the factory instance.</li>
+
+	<li>Use <tt>org.apache.felix.main.AutoProcessor</tt>, which will automatically deploy any bundles in the auto-deploy directory as well as bundles specified in the <tt>felix.auto.install</tt> and <tt>felix.auto.start</tt> configuration properties during framework startup to automatically install and/or start bundles; see the usage document for more information <a href="/confluence/display/FELIX/Apache+Felix+Framework+Usage+Documentation#ApacheFelixFrameworkUsageDocumentation-configuringframework">configuration properties</a> and <a href="/confluence/display/FELIX/Apache+Felix+Framework+Usage+Documentation#ApacheFelixFrameworkUsageDocumentation-autodeploy">bundle auto-deploy</a>.</li>
 	<li>Invoke <tt>waitForStop()</tt> to wait for the framework to stop to force the VM to exit; this is necessary because the framework never calls <tt>System.exit()</tt> and some libraries (e.g., Swing) create threads that will not allow the VM to exit.</li>
+
 </ol>
 
 
-<p>The framework is not active until the <tt>start()</tt> method is
-called. If no shell bundles are installed and started or if there is
-difficulty locating the shell bundles specified in the auto-start
-property, then it will appear as if the framework is hung, but it is
-actually running without any way to interact with it since the shell
-bundles provide the only means of interaction.</p>
+<p>The framework is not active until the <tt>start()</tt> method is called. If no shell bundles are installed and started or if there is difficulty locating the shell bundles specified in the auto-start property, then it will appear as if the framework is hung, but it is actually running without any way to interact with it since the shell bundles provide the only means of interaction.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-customlauncher"></a></p>
 
 <h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-CustomFelixLauncher"></a>Custom Felix Launcher</h2>
 
-<p>This section creates a bare-bones launcher to demonstrate the
-minimum requirements for creating an interactive launcher for the Felix
-framework. This example uses the standard Felix shell bundles for
-interactivity, but any other bundles could be used instead. For
-example, the shell service and telnet bundles could be used to launch
-Felix and make it remotely accessible.</p>
+<p>This section creates a bare-bones launcher to demonstrate the minimum requirements for creating an interactive launcher for the Felix framework. This example uses the standard Felix shell bundles for interactivity, but any other bundles could be used instead. For example, the shell service and telnet bundles could be used to launch Felix and make it remotely accessible.</p>
 
 <p>This example launcher project has the following directory structure:</p>
 
-<div class="preformatted"><div class="preformattedContent">
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
 <pre>launcher/
    lib/
-      org.apache.felix.main-1.4.0.jar
+      org.apache.felix.main-2.0.0.jar
    bundle/
-      org.apache.felix.shell-1.0.2.jar
-      org.apache.felix.shell.tui-1.0.2.jar
+      org.apache.felix.shell-1.4.0.jar
+      org.apache.felix.shell.tui-1.4.0.jar
    src/
       example/
          Main.java
 </pre>
 </div></div>
 
-<p>The <tt>lib/</tt> directory contains Felix' main JAR file, which
-also contains the OSGi core interfaces. The main JAR file is used so
-that we can reuse the default launcher's auto-install/auto-start
-configuration property handling; if these capabilities are not needed,
-then it would be possible to use the framework JAR file instead of the
-main JAR file. The <tt>bundle/</tt> directory contains the shell
-service and textual shell interface bundles that will be used for
-interacting with the framework instance. Note: If you do not launch
-Felix with interactive bundles, it will appear as if the framework
-instance is hung, but it is actually just sitting there waiting for
-someone to tell it to do something. The <tt>src/example/</tt> directory contains the following <tt>Main.java</tt> file, which is a very simplistic Felix launcher.</p>
+<p>The <tt>lib/</tt> directory contains Felix' main JAR file, which also contains the OSGi core interfaces. The main JAR file is used so that we can reuse the default launcher's auto-install/auto-start configuration property handling; if these capabilities are not needed, then it would be possible to use the framework JAR file instead of the main JAR file. The <tt>bundle/</tt> directory contains the shell service and textual shell interface bundles that will be used for interacting with the framework instance. Note: If you do not launch Felix with interactive bundles, it will appear as if the framework instance is hung, but it is actually just sitting there waiting for someone to tell it to do something. The <tt>src/example/</tt> directory contains the following <tt>Main.java</tt> file, which is a very simplistic Felix launcher.</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> example;
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">package</span> example;
 
-<span class="code-keyword">import</span> java.util.ArrayList;
-<span class="code-keyword">import</span> java.util.List;
-<span class="code-keyword">import</span> java.util.Map;
-<span class="code-keyword">import</span> java.util.HashMap;
-<span class="code-keyword">import</span> org.osgi.framework.Constants;
-<span class="code-keyword">import</span> org.apache.felix.framework.Felix;
-<span class="code-keyword">import</span> org.apache.felix.framework.util.FelixConstants;
-<span class="code-keyword">import</span> org.apache.felix.main.AutoActivator;
+<span class="code-keyword">import</span> java.io.*;
+<span class="code-keyword">import</span> org.osgi.framework.launch.*;
+<span class="code-keyword">import</span> org.apache.felix.main.AutoProcessor;
 
 <span class="code-keyword">public</span> class Main
 {
-    <span class="code-keyword">private</span> <span class="code-keyword">static</span> Felix m_felix = <span class="code-keyword">null</span>;
+    <span class="code-keyword">private</span> <span class="code-keyword">static</span> Framework m_fwk = <span class="code-keyword">null</span>;
 
     <span class="code-keyword">public</span> <span class="code-keyword">static</span> void main(<span class="code-object">String</span>[] argv) <span class="code-keyword">throws</span> Exception
     {
         <span class="code-comment">// Print welcome banner.
+
 </span>        <span class="code-object">System</span>.out.println(<span class="code-quote">"\nWelcome to Felix."</span>);
         <span class="code-object">System</span>.out.println(<span class="code-quote">"=================\n"</span>);
 
-        Map configMap = <span class="code-keyword">new</span> HashMap();
-        configMap.put(AutoActivator.AUTO_START_PROP + <span class="code-quote">".1"</span>,
-            <span class="code-quote">"file:bundle/org.apache.felix.shell-1.0.2.jar "</span> +
-            <span class="code-quote">"file:bundle/org.apache.felix.shell.tui-1.0.2.jar"</span>);
-        List list = <span class="code-keyword">new</span> ArrayList();
-        list.add(<span class="code-keyword">new</span> AutoActivator(configMap));
-        configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
-
         <span class="code-keyword">try</span>
         {
-            m_felix = <span class="code-keyword">new</span> Felix(configMap);
-            m_felix.start();
-            m_felix.waitForStop();
+            m_fwk = getFrameworkFactory().newFramework(<span class="code-keyword">null</span>);
+            m_fwk.init()
+            AutoProcessor.process(<span class="code-keyword">null</span>, m_fwk.getBundleContext());
+            m_fwk.start();
+            m_fwk.waitForStop();
             <span class="code-object">System</span>.exit(0);
         }
         <span class="code-keyword">catch</span> (Exception ex)
@@ -441,116 +428,117 @@
             <span class="code-object">System</span>.exit(-1);
         }
     }
-}</pre>
+
+    <span class="code-keyword">private</span> <span class="code-keyword">static</span> FrameworkFactory getFrameworkFactory() <span class="code-keyword">throws</span> Exception
+    {
+        URL url = Main.class.getClassLoader().getResource(
+            <span class="code-quote">"META-INF/services/org.osgi.framework.launch.FrameworkFactory"</span>);
+        <span class="code-keyword">if</span> (url != <span class="code-keyword">null</span>)
+        {
+            BufferedReader br = <span class="code-keyword">new</span> BufferedReader(<span class="code-keyword">new</span> InputStreamReader(url.openStream()));
+            <span class="code-keyword">try</span>
+
+            {
+                <span class="code-keyword">for</span> (<span class="code-object">String</span> s = br.readLine(); s != <span class="code-keyword">null</span>; s = br.readLine())
+                {
+                    s = s.trim();
+                    <span class="code-comment">// Try to load first non-empty, non-commented line.
+</span>                    <span class="code-keyword">if</span> ((s.length() &gt; 0) &amp;&amp; (s.charAt(0) != '#'))
+                    {
+                        <span class="code-keyword">return</span> (FrameworkFactory) <span class="code-object">Class</span>.forName(s).newInstance();
+                    }
+                }
+            }
+            <span class="code-keyword">finally</span>
+
+            {
+                <span class="code-keyword">if</span> (br != <span class="code-keyword">null</span>) br.close();
+            }
+        }
+
+        <span class="code-keyword">throw</span> <span class="code-keyword">new</span> Exception(<span class="code-quote">"Could not find framework factory."</span>);
+    }
+}
+</pre>
 </div></div>
 
-<p>This launcher has all information hard coded in it, unlike the
-default Felix launcher, which loads configuration properties from files
-and performs variable substitution. This simple launcher provides a
-good starting point if the features of the default launcher are not
-necessary. Since very few configuration properties are specified, the
-default values are used. In the case of the framework bundle cache, it
-will use "<tt>felix-cache</tt>" in the current directory.</p>
+<p>This launcher relies on the default behavior of <tt>AutoProcessor</tt> to automatically deploy the shell bundles. This simple, generic launcher provides a good starting point if the default Felix launcher is not sufficient. Since very few configuration properties are specified, the default values are used. For the bundle auto-deploy directory, "<tt>bundle</tt>" in the current directory is used, while for the framework bundle cache, "<tt>felix-cache</tt>" in the current directory is used.</p>
 
 <p>By breaking down the above source code into small chunks, it is quite easy to see what is going on.</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java">Map configMap = <span class="code-keyword">new</span> HashMap();</pre>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+            m_fwk = getFrameworkFactory().newFramework(<span class="code-keyword">null</span>);
+            m_fwk.init()
+
+</pre>
 </div></div>
 
-<p>This simply creates a map to hold configuration properties.</p>
+<p>These steps get a the framework factory service and use it to create a framework instance with a default configuration. Once the framework instance is created, it is initialized with <tt>init()</tt>.</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java">configMap.put(AutoActivator.AUTO_START_PROP + <span class="code-quote">".1"</span>,
-            <span class="code-quote">"file:bundle/org.apache.felix.shell-1.0.2.jar "</span> +
-            <span class="code-quote">"file:bundle/org.apache.felix.shell.tui-1.0.2.jar"</span>);</pre>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+            AutoProcessor.process(<span class="code-keyword">null</span>, m_fwk.getBundleContext());
+</pre>
 </div></div>
 
-<p>This sets the <tt>AutoActivator.AUTO_START_PROP</tt> configuration property (string value "<tt>felix.auto.start</tt>"),
-which is a space-delimited list of bundle URLs that the framework will
-automatically install and start when the framework starts. However,
-this property key cannot be used as is; it must be appended with a "."
-and then a number, where the number represents the start level for the
-bundle when it is installed. In this particular example, ".1" is
-appended to the property name, thus the two bundles will be installed
-into start level one. This example uses relative <tt>file:</tt> URLs, which will load the bundles from the <tt>bundle/</tt>
-directory assuming that the launcher is started from the root directory
-of the launcher project. It is also possible to specify absolute URLs
-or remote URLs.</p>
+<p>The <tt>AutorProcessor</tt> will automatically deploy bundles in the auto-deploy directory and any referenced from the auto-install/start properties. Since we are using an empty configuration, the auto-deploy directory is the <tt>bundle</tt> directory in the current directory and there are no auto properties. Therefore, in this case, the two shell bundles will be installed.</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java">List list = <span class="code-keyword">new</span> ArrayList();
-        list.add(<span class="code-keyword">new</span> AutoActivator(configMap));
-        configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);</pre>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+            m_fwk.start();
+            m_fwk.waitForStop();
+            <span class="code-object">System</span>.exit(0);
+</pre>
 </div></div>
 
-<p>This above creates a list to hold custom framework activators and adds an instance of <tt>org.apache.felix.main.AutoActivator</tt>
-to it, which will process the auto-install and auto-start configuration
-properties during framework startup. The list of activators is then
-added to the configuration map.</p>
+<p>These final steps start the framework and cause the launching application thread to wait for the framework to stop and when it does the launching thread calls <tt>System.exit()</tt> to make sure the VM actually exits.</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java">m_felix = <span class="code-keyword">new</span> Felix(configMap);
-            m_felix.start();</pre>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+    <span class="code-keyword">private</span> <span class="code-keyword">static</span> FrameworkFactory getFrameworkFactory() <span class="code-keyword">throws</span> Exception
+    {
+        ...
+    }
+
+</pre>
 </div></div>
 
-<p>These steps create the framework instance and start it. The configuration property map is passed into the <tt>Felix</tt> constructor.</p>
-
-<div class="code"><div class="codeContent">
-<pre class="code-java">m_felix.waitForStop();
-            <span class="code-object">System</span>.exit(0);</pre>
-</div></div>
-
-<p>These final steps cause the launching application thread to wait for
-the framework to stop and when it does the launching thread calls <tt>System.exit()</tt> to make sure the VM actually exits.</p>
+<p>This method retrieves the framework factory service by doing a META-INF/services resource lookup, which it can use to obtain the concrete class name for the factory. If you are using Java 6, then you can use the <tt>ServiceLoader</tt> API in the JRE to further simplify the factory service lookup.</p>
 
 <p>The following command compiles the launcher when run from the root directory of the launcher project:</p>
 
-<div class="preformatted"><div class="preformattedContent">
-<pre>javac -d . -classpath lib/org.apache.felix.main-1.4.0.jar src/example/Main.java
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>javac -d . -classpath lib/org.apache.felix.main-2.0.0.jar src/example/Main.java
 </pre>
 </div></div>
 
-<p>After executing this command, an <tt>example/</tt> directory is
-created in the current directory, which contains the generated class
-file. The following command executes the simple launcher when run from
-the root directory of the launcher project:</p>
+<p>After executing this command, an <tt>example/</tt> directory is created in the current directory, which contains the generated class file. The following command executes the simple launcher when run from the root directory of the launcher project:</p>
 
-<div class="preformatted"><div class="preformattedContent">
-<pre>java -cp .:lib/org.apache.felix.main-1.4.0.jar example.Main
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>java -cp .:lib/org.apache.felix.main-2.0.0.jar example.Main
 </pre>
 </div></div>
 
-<p>After executing this command, a "<tt>felix-cache/</tt>" directory is created that contains the installed bundles, which were installed from the <tt>bundle/</tt> directory.</p>
+<p>After executing this command, a "<tt>felix-cache/</tt>" directory is created that contains the cached bundles, which were installed from the <tt>bundle/</tt> directory.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-embedding"></a></p>
 
 <h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-EmbeddingFelix"></a>Embedding Felix</h1>
 
-<p>Embedding Felix into a host application is a simple way to provide a
-sophisticated extensibility mechanism (i.e., a plugin system) to the
-host application. Embedding Felix is very similar to launching Felix as
-described above, the main difference is that the host application
-typically wants to interact with the framework instance and/or
-installed bundles/services from the outside. This is fairly easy to
-achieve with Felix, but there are some subtle issues to understand.
-This section presents the mechanisms for embedding Felix into a host
-application and the issues in doing so.</p>
+<p>Embedding Felix into a host application is a simple way to provide a sophisticated extensibility mechanism (i.e., a plugin system) to the host application. Embedding Felix is very similar to launching Felix as described above, the main difference is that the host application typically wants to interact with the framework instance and/or installed bundles/services from the outside. This is fairly easy to achieve with Felix, but there are some subtle issues to understand. This section presents the mechanisms for embedding Felix into a host application and the issues in doing so.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-hostinteraction"></a></p>
 
-<h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-Host/FelixInteraction"></a>Host/Felix Interaction</h2>
+<h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-Host%2FFelixInteraction"></a>Host/Felix Interaction</h2>
 
-<p>In the section on <a href="#ApacheFelixFrameworkLaunchingandEmbedding-launching" title="launching on Apache Felix Framework Launching and Embedding">launching</a> Felix above, the <tt>Felix</tt> accepts a configuration property called <tt>felix.systembundle.activators</tt>,
-which is a list of bundle activator instances. These bundle activator
-instances provide a convenient way for host applications to interact
-with the Felix framework. The ability offered by these activators can
-also be accomplished by invoking <tt>init()</tt> on the framework instance and the using <tt>getBundleContext()</tt> to get the System Bundle's context, but it can be more convenient to use an activator instance.</p>
+<p>In the section on <a href="#ApacheFelixFrameworkLaunchingandEmbedding-launching">launching</a> Felix above, the <tt>Felix</tt> accepts a configuration property called <tt>felix.systembundle.activators</tt>, which is a list of bundle activator instances. These bundle activator instances provide a convenient way for host applications to interact with the Felix framework. The ability offered by these activators can also be accomplished by invoking <tt>init()</tt> on the framework instance and the using <tt>getBundleContext()</tt> to get the System Bundle's context, but it can be more convenient to use an activator instance.</p>
 
 <p>Each activator instance passed into the constructor effectively becomes part of the System Bundle. This means that the <tt>start()</tt>/<tt>stop()</tt> methods of each activator instance in the list gets invoked when the System Bundle's activator <tt>start()</tt>/<tt>stop()</tt> methods gets invoked, respectively. Each activator instance will be given the System Bundle's <tt>BundleContext</tt> object so that they can interact with the framework. Consider following snippet of a bundle activator:</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> class HostActivator <span class="code-keyword">implements</span> BundleActivator
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">public</span> class HostActivator <span class="code-keyword">implements</span> BundleActivator
 {
     <span class="code-keyword">private</span> BundleContext m_context = <span class="code-keyword">null</span>;
 
@@ -572,15 +560,16 @@
         }
         <span class="code-keyword">return</span> <span class="code-keyword">null</span>;
     }
-}</pre>
+}
+
+</pre>
 </div></div>
 
-<p>Given the above bundle activator, it is now possible to embed Felix
-into a host application and interact with it as the following snippet
-illustrates:</p>
+<p>Given the above bundle activator, it is now possible to embed Felix into a host application and interact with it as the following snippet illustrates:</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">public</span> class HostApplication
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">public</span> class HostApplication
 {
     <span class="code-keyword">private</span> HostActivator m_activator = <span class="code-keyword">null</span>;
     <span class="code-keyword">private</span> Felix m_felix = <span class="code-keyword">null</span>;
@@ -588,6 +577,7 @@
     <span class="code-keyword">public</span> HostApplication()
     {
         <span class="code-comment">// Create a configuration property map.
+
 </span>        Map configMap = <span class="code-keyword">new</span> HashMap();
         <span class="code-comment">// Create host activator;
 </span>        m_activator = <span class="code-keyword">new</span> HostActivator();
@@ -598,6 +588,7 @@
         <span class="code-keyword">try</span>
         {
             <span class="code-comment">// Now create an instance of the framework with
+
 </span>            <span class="code-comment">// our configuration properties.
 </span>            m_felix = <span class="code-keyword">new</span> Felix(configMap);
             <span class="code-comment">// Now start Felix instance.
@@ -613,6 +604,7 @@
     <span class="code-keyword">public</span> Bundle[] getInstalledBundles()
     {
         <span class="code-comment">// Use the system bundle activator to gain external
+
 </span>        <span class="code-comment">// access to the set of installed bundles.
 </span>        <span class="code-keyword">return</span> m_activator.getBundles();
     }
@@ -624,53 +616,41 @@
 </span>        m_felix.stop();
         m_felix.waitForStop();
     }
-}</pre>
+}
+</pre>
 </div></div>
 
-<p>Notice how the <tt>HostApplication.getInstalledBundles()</tt> method
-uses its activator instance to get access to the System Bundle's
-context in order to interact with the embedded Felix framework
-instance. This approach provides the foundation for all interaction
-between the host application and the embedded framework instance.</p>
+<p>Notice how the <tt>HostApplication.getInstalledBundles()</tt> method uses its activator instance to get access to the System Bundle's context in order to interact with the embedded Felix framework instance. This approach provides the foundation for all interaction between the host application and the embedded framework instance.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-hostservices"></a></p>
 
 <h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-ProvidingHostApplicationServices"></a>Providing Host Application Services</h2>
 
-<p>Providing services from the host application to bundles inside the
-embedded Felix framework instance follows the basic approach laid out
-in <a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostinteraction" title="host-interaction on Apache Felix Framework Launching and Embedding">above</a>.
-The main complication for providing a host application service to
-bundles is the fact that both the host application and the bundles must
-be using the same class definitions for the service interface classes.
-Since the host application cannot import classes from a bundle, this
-means that the service interface classes <b>must</b> be accessible on
-the class path, typically as part of the host application itself. The
-host application then must export the service interface package via the
-system bundle so that bundles installed into the embedded framework
-instance can import it. This is achieved using the <tt>org.osgi.framework.system.packages.extra</tt> configuration property previously presented.</p>
+<p>Providing services from the host application to bundles inside the embedded Felix framework instance follows the basic approach laid out in <a href="#ApacheFelixFrameworkLaunchingandEmbedding-hostinteraction">above</a>. The main complication for providing a host application service to bundles is the fact that both the host application and the bundles must be using the same class definitions for the service interface classes. Since the host application cannot import classes from a bundle, this means that the service interface classes <b>must</b> be accessible on the class path, typically as part of the host application itself. The host application then must export the service interface package via the system bundle so that bundles installed into the embedded framework instance can import it. This is achieved using the <tt>org.osgi.framework.system.packages.extra</tt> configuration property previously presented.</p>
 
 <p>Consider the follow simple property lookup service:</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.service.lookup;
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">package</span> host.service.lookup;
 
 <span class="code-keyword">public</span> class Lookup
 {
     <span class="code-keyword">public</span> <span class="code-object">Object</span> lookup(<span class="code-object">String</span> name);
-}</pre>
+}
+
+</pre>
 </div></div>
 
-<p>This package is simply part of the host application, which is potentially packaged into a JAR file and started with the "<tt>java -jar</tt>"
-command. Now consider the following host application bundle activator,
-which will be used to register/unregister the property lookup service
-when the embedded framework instance starts/stops:</p>
+<p>This package is simply part of the host application, which is potentially packaged into a JAR file and started with the "<tt>java -jar</tt>" command. Now consider the following host application bundle activator, which will be used to register/unregister the property lookup service when the embedded framework instance starts/stops:</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.core;
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">package</span> host.core;
 
 <span class="code-keyword">import</span> java.util.Map;
 <span class="code-keyword">import</span> org.osgi.framework.BundleActivator;
+
 <span class="code-keyword">import</span> org.osgi.framework.BundleContext;
 <span class="code-keyword">import</span> org.osgi.framework.ServiceRegistration;
 <span class="code-keyword">import</span> host.service.lookup;
@@ -684,6 +664,7 @@
     <span class="code-keyword">public</span> HostActivator(Map lookupMap)
     {
         <span class="code-comment">// Save a reference to the service's backing store.
+
 </span>        m_lookupMap = lookupMap;
     }
 
@@ -699,6 +680,7 @@
             }
         };
         <span class="code-comment">// Register the property lookup service and save
+
 </span>        <span class="code-comment">// the service registration.
 </span>        m_registration = m_context.registerService(
             Lookup.class.getName(), lookup, <span class="code-keyword">null</span>);
@@ -710,20 +692,20 @@
 </span>        m_registration.unregister();
         m_context = <span class="code-keyword">null</span>;
     }
-}</pre>
+}
+</pre>
 </div></div>
 
-<p>Given the above host application bundle activator, the following
-code snippet shows how the host application could create an embedded
-version of the Felix framework and provide the property lookup service
-to installed bundles:</p>
+<p>Given the above host application bundle activator, the following code snippet shows how the host application could create an embedded version of the Felix framework and provide the property lookup service to installed bundles:</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.core;
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">package</span> host.core;
 
 <span class="code-keyword">import</span> java.util.List;
 <span class="code-keyword">import</span> java.util.ArrayList;
 <span class="code-keyword">import</span> java.util.Map;
+
 <span class="code-keyword">import</span> java.util.HashMap;
 <span class="code-keyword">import</span> host.service.lookup.Lookup;
 <span class="code-keyword">import</span> org.apache.felix.framework.Felix;
@@ -739,6 +721,7 @@
     <span class="code-keyword">public</span> HostApplication()
     {
         <span class="code-comment">// Initialize the map <span class="code-keyword">for</span> the property lookup service.
+
 </span>        m_lookupMap.put(<span class="code-quote">"name1"</span>, <span class="code-quote">"value1"</span>);
 
         m_lookupMap.put(<span class="code-quote">"name2"</span>, <span class="code-quote">"value2"</span>);
@@ -746,6 +729,7 @@
         m_lookupMap.put(<span class="code-quote">"name4"</span>, <span class="code-quote">"value4"</span>);
 
         <span class="code-comment">// Create a configuration property map.
+
 </span>        Map configMap = <span class="code-keyword">new</span> HashMap();
         <span class="code-comment">// Export the host provided service <span class="code-keyword">interface</span> <span class="code-keyword">package</span>.
 </span>        configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA,
@@ -757,6 +741,7 @@
         configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
 
         <span class="code-keyword">try</span>
+
         {
             <span class="code-comment">// Now create an instance of the framework with
 </span>            <span class="code-comment">// our configuration properties.
@@ -774,62 +759,49 @@
     <span class="code-keyword">public</span> void shutdownApplication()
     {
         <span class="code-comment">// Shut down the felix framework when stopping the
+
 </span>        <span class="code-comment">// host application.
 </span>        m_felix.stop();
         m_felix.waitForStop();
     }
-}</pre>
+}
+</pre>
 </div></div>
 
-<p>Rather than having the host application bundle activator register
-the service, it is also possible for the the host application to simply
-get the bundle context from the bundle activator and register the
-service directly, but the presented approach is perhaps a little
-cleaner since it allows the host application to register/unregister the
-service when the system bundle starts/stops.</p>
+<p>Rather than having the host application bundle activator register the service, it is also possible for the the host application to simply get the bundle context from the bundle activator and register the service directly, but the presented approach is perhaps a little cleaner since it allows the host application to register/unregister the service when the system bundle starts/stops.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-hostserviceusage"></a></p>
 
 <h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-UsingServicesProvidedbyBundles"></a>Using Services Provided by Bundles</h2>
 
-<p>Using services provided by bundles follows the same general approach
-of using a host application bundle activator. The main complication for
-the host application using a service from a bundle is the fact that
-both the host application and the bundle must be using the same class
-definitions for the service interface classes. Since the host
-application cannot import classes from a bundle, this means that the
-service interface classes <b>must</b> be accessible on the class path,
-typically as part of the host application itself. The host application
-then must export the service interface package via the system bundle so
-that bundles installed into the embedded framework instance can import
-it. This is achieved using the <tt>org.osgi.framework.system.packages.extra</tt> configuration property previously presented.</p>
+<p>Using services provided by bundles follows the same general approach of using a host application bundle activator. The main complication for the host application using a service from a bundle is the fact that both the host application and the bundle must be using the same class definitions for the service interface classes. Since the host application cannot import classes from a bundle, this means that the service interface classes <b>must</b> be accessible on the class path, typically as part of the host application itself. The host application then must export the service interface package via the system bundle so that bundles installed into the embedded framework instance can import it. This is achieved using the <tt>org.osgi.framework.system.packages.extra</tt> configuration property previously presented.</p>
 
-<p>Consider the following simple command service interface for which
-bundles provide implementations, such as might be used to create an
-extensible interactive shell:</p>
+<p>Consider the following simple command service interface for which bundles provide implementations, such as might be used to create an extensible interactive shell:</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.service.command;
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">package</span> host.service.command;
 
 <span class="code-keyword">public</span> class Command
 {
     <span class="code-keyword">public</span> <span class="code-object">String</span> getName();
     <span class="code-keyword">public</span> <span class="code-object">String</span> getDescription();
     <span class="code-keyword">public</span> <span class="code-object">boolean</span> execute(<span class="code-object">String</span> commandline);
-}</pre>
+}
+
+</pre>
 </div></div>
 
-<p>This package is simply part of the host application, which is potentially packaged into a JAR file and started with the "<tt>java -jar</tt>"
-command. Now consider the previously introduced host application bundle
-activator below, which simply provides access to the system bundle
-context:</p>
+<p>This package is simply part of the host application, which is potentially packaged into a JAR file and started with the "<tt>java -jar</tt>" command. Now consider the previously introduced host application bundle activator below, which simply provides access to the system bundle context:</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.core;
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">package</span> host.core;
 
 <span class="code-keyword">import</span> org.osgi.framework.BundleActivator;
 <span class="code-keyword">import</span> org.osgi.framework.BundleContext;
 
+
 <span class="code-keyword">public</span> class HostActivator <span class="code-keyword">implements</span> BundleActivator
 {
     <span class="code-keyword">private</span> BundleContext m_context = <span class="code-keyword">null</span>;
@@ -848,25 +820,27 @@
     {
         <span class="code-keyword">return</span> m_context;
     }
-}</pre>
+}
+
+</pre>
 </div></div>
 
-<p>With this bundle activator, the host application can use command
-services provided by bundles installed inside its embedded Felix
-framework instance. The following code snippet illustrates one possible
-approach:</p>
+<p>With this bundle activator, the host application can use command services provided by bundles installed inside its embedded Felix framework instance. The following code snippet illustrates one possible approach:</p>
 
-<div class="code"><div class="codeContent">
-<pre class="code-java"><span class="code-keyword">package</span> host.core;
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">package</span> host.core;
 
 <span class="code-keyword">import</span> java.util.List;
 <span class="code-keyword">import</span> java.util.ArrayList;
+
 <span class="code-keyword">import</span> java.util.Map;
 <span class="code-keyword">import</span> host.service.command.Command;
 <span class="code-keyword">import</span> org.apache.felix.framework.Felix;
 <span class="code-keyword">import</span> org.apache.felix.framework.util.FelixConstants;
 <span class="code-keyword">import</span> org.apache.felix.framework.cache.BundleCache;
 <span class="code-keyword">import</span> org.osgi.framework.Constants;
+
 <span class="code-keyword">import</span> org.osgi.util.tracker.ServiceTracker;
 
 <span class="code-keyword">public</span> class HostApplication
@@ -878,6 +852,7 @@
     <span class="code-keyword">public</span> HostApplication()
     {
         <span class="code-comment">// Create a configuration property map.
+
 </span>        Map configMap = <span class="code-keyword">new</span> HashMap();
         <span class="code-comment">// Export the host provided service <span class="code-keyword">interface</span> <span class="code-keyword">package</span>.
 </span>        configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA,
@@ -889,6 +864,7 @@
         configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
 
         <span class="code-keyword">try</span>
+
         {
             <span class="code-comment">// Now create an instance of the framework with
 </span>            <span class="code-comment">// our configuration properties.
@@ -910,11 +886,13 @@
     <span class="code-keyword">public</span> <span class="code-object">boolean</span> execute(<span class="code-object">String</span> name, <span class="code-object">String</span> commandline)
     {
         <span class="code-comment">// See <span class="code-keyword">if</span> any of the currently tracked command services
+
 </span>        <span class="code-comment">// match the specified command name, <span class="code-keyword">if</span> so then execute it.
 </span>        <span class="code-object">Object</span>[] services = m_tracker.getServices();
         <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; (services != <span class="code-keyword">null</span>) &amp;&amp; (i &lt; services.length); i++)
         {
             <span class="code-keyword">try</span>
+
             {
                 <span class="code-keyword">if</span> (((Command) services[i]).getName().equals(name))
                 {
@@ -925,6 +903,7 @@
             {
                 <span class="code-comment">// Since the services returned by the tracker could become
 </span>                <span class="code-comment">// invalid at any moment, we will <span class="code-keyword">catch</span> all exceptions, log
+
 </span>                <span class="code-comment">// a message, and then ignore faulty services.
 </span>                <span class="code-object">System</span>.err.println(ex);
             }
@@ -940,45 +919,36 @@
 </span>        m_felix.stop();
         m_felix.waitForStop();
     }
-}</pre>
+}
+
+</pre>
 </div></div>
 
-<p>The above example is overly simplistic with respect to concurrency
-issues and error conditions, but it demonstrates the overall approach
-for using bundle-provided services from the host application.</p>
+<p>The above example is overly simplistic with respect to concurrency issues and error conditions, but it demonstrates the overall approach for using bundle-provided services from the host application.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-servicereflection"></a></p>
 
 <h3><a name="ApacheFelixFrameworkLaunchingandEmbedding-UsingBundleServicesviaReflection"></a>Using Bundle Services via Reflection</h3>
 
-<p>It possible for the host application to use services provided by
-bundles without having access to the service interface classes and thus
-not needing to put the service interface classes on the class path. To
-do this, the host application uses the same general approach to acquire
-the system bundle context object, which it can use to look up service
-objects. Using either an LDAP filter or the service interface class
-name, the host application can retrieve the service object and then use
-standard Java reflection to invoke methods on the service object.</p>
+<p>It possible for the host application to use services provided by bundles without having access to the service interface classes and thus not needing to put the service interface classes on the class path. To do this, the host application uses the same general approach to acquire the system bundle context object, which it can use to look up service objects. Using either an LDAP filter or the service interface class name, the host application can retrieve the service object and then use standard Java reflection to invoke methods on the service object.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-serviceother"></a></p>
 
 <h3><a name="ApacheFelixFrameworkLaunchingandEmbedding-OtherApproaches"></a>Other Approaches</h3>
 
-<p>The <span class="nobr"><a href="http://code.google.com/p/transloader/" title="Visit page outside Confluence" rel="nofollow">Transloader<sup><img class="rendericon" src="apache-felix-framework-launching-and-embedding_files/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span> project is another attempt at dealing with issues of classes loaded from different class loaders and may be of interest.</p>
+<p>The <a href="http://code.google.com/p/transloader/" rel="nofollow">Transloader</a> project is another attempt at dealing with issues of classes loaded from different class loaders and may be of interest.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-caveat"></a></p>
 
 <h1><a name="ApacheFelixFrameworkLaunchingandEmbedding-Caveat"></a>Caveat</h1>
 
-<p>The code in this document has not been thoroughly tested nor even
-compiled and may be out of date with respect to the current Felix
-source code. If you find errors please report them so the that they can
-be corrected.</p>
+<p>The code in this document has not been thoroughly tested nor even compiled and may be out of date with respect to the current Felix source code. If you find errors please report them so the that they can be corrected.</p>
 
 <p><a name="ApacheFelixFrameworkLaunchingandEmbedding-feedback"></a></p>
 
 <h2><a name="ApacheFelixFrameworkLaunchingandEmbedding-Feedback"></a>Feedback</h2>
 
-<p>Subscribe to the Felix users mailing list by sending a message to <span class="nobr"><a href="mailto:users-subscribe@felix.apache.org" title="Send mail to users-subscribe@felix.apache.org" rel="nofollow">users-subscribe@felix.apache.org<sup><img class="rendericon" src="apache-felix-framework-launching-and-embedding_files/mail_small.gif" alt="" align="absmiddle" border="0" height="12" width="13"></sup></a></span>; after subscribing, email questions or feedback to <span class="nobr"><a href="mailto:users@felix.apache.org" title="Send mail to users@felix.apache.org" rel="nofollow">users@felix.apache.org<sup><img class="rendericon" src="apache-felix-framework-launching-and-embedding_files/mail_small.gif" alt="" align="absmiddle" border="0" height="12" width="13"></sup></a></span>.</p>
+<p>Subscribe to the Felix users mailing list by sending a message to <a href="mailto:users-subscribe@felix.apache.org" rel="nofollow">users-subscribe@felix.apache.org</a>; after subscribing, email questions or feedback to <a href="mailto:users@felix.apache.org" rel="nofollow">users@felix.apache.org</a>.</p>
+        
     </div>
-  </body></html>
\ No newline at end of file
+  </body></html>
