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 222c368..58494cc 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
@@ -137,6 +137,7 @@
                 pw.println( "<input type='hidden' name='" + RefreshRepoAction.PARAM_REPO + "' value='" + repo.getURL()
                     + "'>" );
                 pw.println( "<input class='submit' type='submit' value='Refresh'>" );
+                pw.println( "<input class='submit' type='submit' name='remove' value='Remove'>" );
                 pw.println( "</form>" );
                 pw.println( "</td>" );
                 pw.println( "</tr>" );
@@ -165,6 +166,20 @@
             }
         }
 
+        // entry of a new repository
+        pw.println( "<form>" );
+        pw.println( "<tr class='content'>" );
+        pw.println( "<td class='content'>&nbsp;</td>" );
+        pw.println( "<td class='content' colspan='2'>" );
+        pw.println( "  <input class='input' type='text' name='" + RefreshRepoAction.PARAM_REPO + "' value='' size='80'>" );
+        pw.println( "</td>" );
+        pw.println( "<td class='content'>" );
+        pw.println( "<input type='hidden' name='" + Util.PARAM_ACTION + "' value='" + RefreshRepoAction.NAME + "'>" );
+        pw.println( "<input class='submit' type='submit' value='Add'>" );
+        pw.println( "</td>" );
+        pw.println( "</tr>" );
+        pw.println( "</form>" );
+
         this.footer( pw );
 
         this.listResources( pw, repos );
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/RefreshRepoAction.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/RefreshRepoAction.java
index aa495a1..7129a96 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/RefreshRepoAction.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/RefreshRepoAction.java
@@ -17,10 +17,17 @@
 package org.apache.felix.webconsole.internal.obr;
 
 
+import java.net.URL;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import org.apache.felix.webconsole.Action;
+import org.osgi.service.obr.Repository;
+import org.osgi.service.obr.RepositoryAdmin;
 
 
-public abstract class RefreshRepoAction extends AbstractObrPlugin implements Action
+public class RefreshRepoAction extends AbstractObrPlugin implements Action
 {
 
     public static final String NAME = "refreshOBR";
@@ -38,57 +45,86 @@
     {
         return NAME;
     }
-    /*
-        public boolean performAction(HttpServletRequest request,
-                HttpServletResponse response) {
 
-            BundleRepositoryAdmin repoAdmin = getBundleRepositoryAdmin();
-            if (repoAdmin != null) {
-                String repositoryURL = request.getParameter("repository");
-                Iterator<Repository> repos = repoAdmin.getRepositories();
-                Repository repo = this.getRepository(repos, repositoryURL);
 
-                URL repoURL = null;
-                if (repo != null) {
-                    repoURL = repo.getURL();
-                } else {
-                    try {
-                        repoURL = new URL(repositoryURL);
-                    } catch (Throwable t) {
-                        // don't care, just ignore
+    public boolean performAction( HttpServletRequest request, HttpServletResponse response )
+    {
+
+        RepositoryAdmin repoAdmin = getRepositoryAdmin();
+        if ( repoAdmin != null )
+        {
+            String repositoryURL = request.getParameter( "repository" );
+            Repository[] repos = repoAdmin.listRepositories();
+            Repository repo = this.getRepository( repos, repositoryURL );
+
+            URL repoURL = null;
+            if ( repo != null )
+            {
+                repoURL = repo.getURL();
+            }
+            else
+            {
+                try
+                {
+                    repoURL = new URL( repositoryURL );
+                }
+                catch ( Throwable t )
+                {
+                    // don't care, just ignore
+                }
+            }
+
+            // log.log(LogService.LOG_DEBUG, "Refreshing " + repo.getURL());
+            if ( repoURL != null )
+            {
+                if ( request.getParameter( "remove" ) != null )
+                {
+                    try
+                    {
+                        repoAdmin.removeRepository( repoURL );
+                    }
+                    catch ( Exception e )
+                    {
+                        // TODO: log.log(LogService.LOG_ERROR, "Cannot refresh
+                        // Repository " + repo.getURL());
                     }
                 }
-
-                // log.log(LogService.LOG_DEBUG, "Refreshing " + repo.getURL());
-                if (repoURL != null) {
-                    try {
-                        repoAdmin.addRepository(repoURL);
-                    } catch (Exception e) {
+                else
+                {
+                    try
+                    {
+                        repoAdmin.addRepository( repoURL );
+                    }
+                    catch ( Exception e )
+                    {
                         // TODO: log.log(LogService.LOG_ERROR, "Cannot refresh
                         // Repository " + repo.getURL());
                     }
                 }
             }
-
-            return true;
         }
 
-        // ---------- internal -----------------------------------------------------
+        return true;
+    }
 
-        private Repository getRepository(Iterator<Repository> repos,
-                String repositoryUrl) {
-            if (repositoryUrl == null || repositoryUrl.length() == 0) {
-                return null;
-            }
 
-            while (repos.hasNext()) {
-                Repository repo = repos.next();
-                if (repositoryUrl.equals(repo.getURL().toString())) {
-                    return repo;
-                }
-            }
+    // ---------- internal -----------------------------------------------------
 
+    private Repository getRepository( Repository[] repos, String repositoryUrl )
+    {
+        if ( repositoryUrl == null || repositoryUrl.length() == 0 )
+        {
             return null;
         }
-    */
+
+        for ( int i = 0; i < repos.length; i++ )
+        {
+            if ( repositoryUrl.equals( repos[i].getURL().toString() ) )
+            {
+                return repos[i];
+            }
+        }
+
+        return null;
+    }
 }
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 a45fd0b..59fbd7c 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
@@ -49,6 +49,7 @@
 import org.apache.felix.webconsole.internal.misc.ConfigurationRender;
 import org.apache.felix.webconsole.internal.misc.LicenseServlet;
 import org.apache.felix.webconsole.internal.obr.BundleRepositoryRender;
+import org.apache.felix.webconsole.internal.obr.RefreshRepoAction;
 import org.apache.felix.webconsole.internal.system.GCAction;
 import org.apache.felix.webconsole.internal.system.ShutdownAction;
 import org.apache.felix.webconsole.internal.system.ShutdownRender;
@@ -128,7 +129,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 };
+            LicenseServlet.class, RefreshRepoAction.class };
 
     private BundleContext bundleContext;
 
