diff --git a/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleCommand.java b/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleCommand.java
index 474f94c..e6ef18a 100644
--- a/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleCommand.java
+++ b/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleCommand.java
@@ -23,25 +23,20 @@ import org.osgi.framework.Bundle;
 
 public abstract class BundleCommand extends OsgiCommandSupport {
 
-    @Argument(index = 0, name = "id", description = "The bundle ID", required = true, multiValued  = false)
-    long id;
+    @Argument(index = 0, name = "id", description = "The bundle ID or name or name/version", required = true, multiValued  = false)
+    String id;
 
     @Option(name = "--force", aliases = {}, description = "Forces the command to execute", required = false, multiValued = false)
     boolean force;
 
     protected Object doExecute() throws Exception {
-        Bundle bundle = getBundleContext().getBundle(id);
-        if (bundle == null) {
-            System.out.println("Bundle " + id + " not found");
-            return null;
-        }
+        BundleSelector selector = new BundleSelector(getBundleContext(), session);        
+        Bundle bundle = selector.getBundle(String.valueOf(id), force);
 
-        if (!force && Util.isASystemBundle(getBundleContext(), bundle) && !Util.accessToSystemBundleIsAllowed(bundle.getBundleId(), session)) {
-            return null;
-        } else {
+        if (bundle != null) {
             doExecute(bundle);
-            return null;
         }
+        return null;
     }
 
     protected abstract void doExecute(Bundle bundle) throws Exception;
diff --git a/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleSelector.java b/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleSelector.java
index afb04e0..263d689 100644
--- a/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleSelector.java
+++ b/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleSelector.java
@@ -85,6 +85,25 @@ public class BundleSelector {
         return bundles;
     }
 
+    /**
+     * Get a bundle by ID or name or name/version.
+     * 
+     * @param id bundle ID or name or name/version.
+     * @param force forces the command to execute.
+     * @return the bundle or null if not found.
+     */
+    public Bundle getBundle(String id, boolean force) throws Exception {
+        List<String> ids = new ArrayList<String>(1);
+        ids.add(id);
+        List<Bundle> bundles = selectBundles(ids, force);
+        if (bundles.isEmpty()) {
+            System.err.println("Bundle " + id + " not found");
+            return null;
+        } else {
+            return bundles.get(0);
+        }
+    }
+    
     private void addBundle(Bundle bundle, String id, boolean force, List<Bundle> bundles) throws Exception {
         if (bundle == null) {
             // if the bundle is null here, it's because we didn't find it
