diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java
index af5bf3f..eed0725 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java
@@ -128,7 +128,6 @@
 
                 pw.println( "<tr class='content'>" );
                 pw.println( "<td class='content'>" + repo.getName() + "</td>" );
-                pw.println( "<td class='content'>" + repo.getURL() + "</td>" );
 
                 pw.print ( "<td class='content'>" );
                 pw.print ( "<a href='" + repo.getURL() + "' target='_blank' title='Show Repository " + repo.getURL()
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/DeployerThread.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/DeployerThread.java
new file mode 100644
index 0000000..8646187
--- /dev/null
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/DeployerThread.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.webconsole.internal.obr;
+
+
+import org.apache.felix.webconsole.internal.Logger;
+import org.osgi.service.log.LogService;
+import org.osgi.service.obr.Requirement;
+import org.osgi.service.obr.Resolver;
+import org.osgi.service.obr.Resource;
+
+
+public class DeployerThread extends Thread
+{
+
+    private final Resolver obrResolver;
+
+    private final Logger logger;
+
+    private final boolean startBundles;
+
+
+    public DeployerThread( Resolver obrResolver, Logger logger, boolean startBundles )
+    {
+        this( obrResolver, logger, startBundles, "OBR Bundle Deployer" );
+    }
+
+
+    public DeployerThread( Resolver obrResolver, Logger logger, boolean startBundles, String name )
+    {
+        super( name );
+        this.obrResolver = obrResolver;
+        this.logger = logger;
+        this.startBundles = startBundles;
+    }
+
+
+    public void run()
+    {
+        try
+        {
+            if ( obrResolver.resolve() )
+            {
+
+                logResource( "Installing Requested Resources", obrResolver.getAddedResources() );
+                logResource( "Installing Required Resources", obrResolver.getRequiredResources() );
+                logResource( "Installing Optional Resources", obrResolver.getOptionalResources() );
+
+                obrResolver.deploy( startBundles );
+            }
+            else
+            {
+                logRequirements( "Cannot Install requested bundles due to unsatisfied requirements", obrResolver
+                    .getUnsatisfiedRequirements() );
+            }
+        }
+        catch ( Exception ie )
+        {
+            Throwable cause = ( ie.getCause() != null ) ? ie.getCause() : ie;
+            logger.log( LogService.LOG_ERROR, "Cannot install bundles", cause );
+        }
+    }
+
+
+    private void logResource( String message, Resource[] res )
+    {
+        if ( res != null && res.length > 0 )
+        {
+            logger.log( LogService.LOG_INFO, message );
+            for ( int i = 0; i < res.length; i++ )
+            {
+                logger.log( LogService.LOG_INFO, "  " + i + ": " + res[i].getSymbolicName() + ", "
+                    + res[i].getVersion() );
+            }
+        }
+    }
+
+
+    private void logRequirements( String message, Requirement[] req )
+    {
+        logger.log( LogService.LOG_ERROR, message );
+        for ( int i = 0; req != null && i < req.length; i++ )
+        {
+            logger.log( LogService.LOG_ERROR, "  " + i + ": " + req[i].getName() + " (" + req[i].getComment() + ")" );
+        }
+    }
+
+}
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/InstallFromRepoAction.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/InstallFromRepoAction.java
index 109f095..f58c46d 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/InstallFromRepoAction.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/InstallFromRepoAction.java
@@ -17,10 +17,17 @@
 package org.apache.felix.webconsole.internal.obr;
 
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import org.apache.felix.webconsole.Action;
+import org.osgi.service.log.LogService;
+import org.osgi.service.obr.RepositoryAdmin;
+import org.osgi.service.obr.Resolver;
+import org.osgi.service.obr.Resource;
 
 
-public abstract class InstallFromRepoAction extends AbstractObrPlugin implements Action
+public class InstallFromRepoAction extends AbstractObrPlugin implements Action
 {
 
     public static final String NAME = "installFromOBR";
@@ -37,58 +44,64 @@
         return NAME;
     }
 
+
     /*
      * (non-Javadoc)
      *
      * @see org.apache.sling.manager.web.internal.Action#performAction(javax.servlet.http.HttpServletRequest,
      *      javax.servlet.http.HttpServletResponse)
-    public boolean performAction(HttpServletRequest request,
-            HttpServletResponse response) {
+     */
+    public boolean performAction( HttpServletRequest request, HttpServletResponse response )
+    {
 
         // check whether we have to do something
-        String[] bundles = request.getParameterValues("bundle");
-        if (bundles == null || bundles.length == 0) {
-            getLog().log(LogService.LOG_INFO, "No resources to deploy");
+        String[] bundles = request.getParameterValues( "bundle" );
+        if ( bundles == null || bundles.length == 0 )
+        {
+            getLog().log( LogService.LOG_INFO, "No resources to deploy" );
             return true;
         }
 
-        InstallerService installerService = getInstallerService();
-        if (installerService != null) {
-            Installer installer = installerService.getInstaller();
+        RepositoryAdmin repoAdmin = getRepositoryAdmin();
+        if ( repoAdmin != null )
+        {
+
+            Resolver resolver = repoAdmin.resolver();
 
             // prepare the deployment
-            for (int i = 0; i < bundles.length; i++) {
+            for ( int i = 0; i < bundles.length; i++ )
+            {
                 String bundle = bundles[i];
-                int comma = bundle.indexOf(',');
-                String name = (comma > 0) ? bundle.substring(0, comma) : bundle;
-                String version = (comma < bundle.length() - 1)
-                        ? bundle.substring(comma + 1)
-                        : null;
+                int comma = bundle.indexOf( ',' );
+                String name = ( comma > 0 ) ? bundle.substring( 0, comma ) : bundle;
+                String version = ( comma < bundle.length() - 1 ) ? bundle.substring( comma + 1 ) : null;
 
-                if (name.length() > 0) {
+                if ( name.length() > 0 )
+                {
                     // no name, ignore this one
-                    VersionRange versionRange = new VersionRange(version);
-                    installer.addBundle(name, versionRange, -1);
+                    if ( version == null )
+                    {
+                        version = "*";
+                    }
+
+                    String filter = "(&(symbolicname=" + name + ")(version=" + version + "))";
+                    Resource[] resources = repoAdmin.discoverResources( filter );
+                    if ( resources != null && resources.length > 0 )
+                    {
+                        resolver.add( resources[0] );
+                    }
                 }
+
             }
 
             // check whether the "deploystart" button was clicked
-            boolean start = request.getParameter("deploystart") != null;
+            boolean start = request.getParameter( "deploystart" ) != null;
 
-            try {
-                installer.install(start);
-            } catch (InstallerException ie) {
-                Throwable cause = (ie.getCause() != null) ? ie.getCause() : ie;
-                getLog().log(LogService.LOG_ERROR, "Cannot install bundles",
-                    cause);
-            } finally {
-                installer.dispose();
-            }
+            DeployerThread dt = new DeployerThread( resolver, getLog(), start );
+            dt.start();
         }
 
         // redirect to bundle list
         return true;
     }
-     */
-
 }
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
index 99983b6..5c4e28d 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
@@ -30,6 +30,7 @@
 import org.apache.felix.webconsole.internal.core.*;
 import org.apache.felix.webconsole.internal.misc.*;
 import org.apache.felix.webconsole.internal.obr.BundleRepositoryRender;
+import org.apache.felix.webconsole.internal.obr.InstallFromRepoAction;
 import org.apache.felix.webconsole.internal.obr.RefreshRepoAction;
 import org.apache.felix.webconsole.internal.system.*;
 import org.osgi.framework.*;
@@ -105,7 +106,7 @@
         { ComponentConfigurationPrinter.class, ComponentsServlet.class, ConfigManager.class, BundlesServlet.class,
             InstallAction.class, SetStartLevelAction.class, ConfigurationRender.class, GCAction.class,
             ShutdownAction.class, ShutdownRender.class, VMStatRender.class, BundleRepositoryRender.class,
-            LicenseServlet.class, RefreshRepoAction.class, ShellServlet.class };
+            LicenseServlet.class, RefreshRepoAction.class, InstallFromRepoAction.class, ShellServlet.class };
 
     private BundleContext bundleContext;
 
