diff --git a/gogo/command/src/main/java/org/apache/felix/gogo/command/Basic.java b/gogo/command/src/main/java/org/apache/felix/gogo/command/Basic.java
index 16d2659..ab1b72f 100644
--- a/gogo/command/src/main/java/org/apache/felix/gogo/command/Basic.java
+++ b/gogo/command/src/main/java/org/apache/felix/gogo/command/Basic.java
@@ -88,9 +88,9 @@
 
     @Descriptor("set bundle start level or initial bundle start level")
     public void bundlelevel(
-        @Parameter(name="-s", description="set the specified bundle's start level",
+        @Parameter(names={ "-s", "--setlevel" }, description="set the bundle's start level",
             presentValue="true", absentValue="false") boolean set,
-        @Parameter(name="-i", description="set the initial bundle start level",
+        @Parameter(names={ "-i", "--setinitial" }, description="set the initial bundle start level",
             presentValue="true", absentValue="false") boolean initial,
         @Descriptor("target level") int level,
         @Descriptor("target identifiers") Bundle[] bundles)
@@ -276,11 +276,11 @@
                             Parameter p = (Parameter) ann;
                             if (p.presentValue().equals(Parameter.UNSPECIFIED))
                             {
-                                options.put(p.name(), p);
+                                options.put(p.names()[0], p);
                             }
                             else
                             {
-                                flags.put(p.name(), p);
+                                flags.put(p.names()[0], p);
                             }
                             found = true;
                         }
@@ -304,10 +304,14 @@
                     System.out.println("   flags:");
                     for (Entry<String, Parameter> entry : flags.entrySet())
                     {
-                        System.out.println("      "
-                            + entry.getValue().name()
-                            + "   "
-                            + entry.getValue().description());
+                        // Print all aliases.
+                        String[] names = entry.getValue().names();
+                        System.out.print("      " + names[0]);
+                        for (int aliasIdx = 1; aliasIdx < names.length; aliasIdx++)
+                        {
+                            System.out.print(", " + names[aliasIdx]);
+                        }
+                        System.out.println("   " + entry.getValue().description());
                     }
                 }
                 if (options.size() > 0)
@@ -315,9 +319,14 @@
                     System.out.println("   options:");
                     for (Entry<String, Parameter> entry : options.entrySet())
                     {
-                        System.out.println("      "
-                            + entry.getValue().name()
-                            + "   "
+                        // Print all aliases.
+                        String[] names = entry.getValue().names();
+                        System.out.print("      " + names[0]);
+                        for (int aliasIdx = 1; aliasIdx < names.length; aliasIdx++)
+                        {
+                            System.out.print(", " + names[aliasIdx]);
+                        }
+                        System.out.println("   "
                             + entry.getValue().description()
                             + ((entry.getValue().absentValue() == null) ? "" : " [optional]"));
                     }
@@ -452,11 +461,11 @@
 
     @Descriptor("list all installed bundles")
     public void lb(
-        @Parameter(name="-l", description="show location",
+        @Parameter(names={ "-l", "--location" }, description="show location",
             presentValue="true", absentValue="false") boolean showLoc,
-        @Parameter(name="-s", description="show symbolic name",
+        @Parameter(names={ "-s", "--symbolicname" }, description="show symbolic name",
             presentValue="true", absentValue="false") boolean showSymbolic,
-        @Parameter(name="-u", description="show update location",
+        @Parameter(names={ "-u", "--updatelocation" }, description="show update location",
             presentValue="true", absentValue="false") boolean showUpdate)
     {
         lb(showLoc, showSymbolic, showUpdate, null);
@@ -464,11 +473,11 @@
 
     @Descriptor("list installed bundles matching a substring")
     public void lb(
-        @Parameter(name="-l", description="show location",
+        @Parameter(names={ "-l", "--location" }, description="show location",
             presentValue="true", absentValue="false") boolean showLoc,
-        @Parameter(name="-s", description="show symbolic name",
+        @Parameter(names={ "-s", "--symbolicname" }, description="show symbolic name",
             presentValue="true", absentValue="false") boolean showSymbolic,
-        @Parameter(name="-u", description="show update location",
+        @Parameter(names={ "-u", "--updatelocation" }, description="show update location",
             presentValue="true", absentValue="false") boolean showUpdate,
         @Descriptor("subtring matched against name or symbolic name") String pattern)
     {
@@ -676,9 +685,9 @@
 
     @Descriptor("start bundles")
     public void start(
-        @Parameter(name="-t", description="transient",
+        @Parameter(names={ "-t", "--transient" }, description="start bundle transiently",
             presentValue="true", absentValue="false") boolean trans,
-        @Parameter(name="-p", description="use declared activation policy",
+        @Parameter(names={ "-p", "--policy" }, description="use declared activation policy",
             presentValue="true", absentValue="false") boolean policy,
         @Descriptor("target bundle identifiers or URLs") String[] ss)
     {
@@ -757,7 +766,7 @@
 
     @Descriptor("stop bundles")
     public void stop(
-        @Parameter(name="-t", description="transient",
+        @Parameter(names={ "-t", "--transient" }, description="stop bundle transiently",
             presentValue="true", absentValue="false") boolean trans,
         @Descriptor("target bundles") Bundle[] bundles)
     {
@@ -1073,36 +1082,4 @@
             return "Unknown    ";
         }
     }
-
-    private static Bundle getBundle(BundleContext bc, Long id)
-    {
-        Bundle bundle = bc.getBundle(id);
-        if (bundle == null)
-        {
-            System.err.println("Bundle ID " + id + " is invalid");
-        }
-        return bundle;
-    }
-
-    private static List<Bundle> getBundles(BundleContext bc, Long[] ids)
-    {
-        List<Bundle> bundles = new ArrayList<Bundle>();
-        if ((ids != null) && (ids.length > 0))
-        {
-            for (long id : ids)
-            {
-                Bundle bundle = getBundle(bc, id);
-                if (bundle != null)
-                {
-                    bundles.add(bundle);
-                }
-            }
-        }
-        else
-        {
-            bundles = null;
-        }
-
-        return bundles;
-    }
 }
\ No newline at end of file
diff --git a/gogo/command/src/main/java/org/apache/felix/gogo/command/OBR.java b/gogo/command/src/main/java/org/apache/felix/gogo/command/OBR.java
index 8fc52db..2fd208c 100644
--- a/gogo/command/src/main/java/org/apache/felix/gogo/command/OBR.java
+++ b/gogo/command/src/main/java/org/apache/felix/gogo/command/OBR.java
@@ -133,7 +133,7 @@
 
     @Descriptor("list repository resources")
     public void list(
-        @Parameter(name="-v", description="verbose",
+        @Parameter(names={ "-v", "--verbose" }, description="verbose",
             presentValue="true", absentValue="false") boolean verbose,
         @Descriptor("optional strings used for name matching") String[] args)
         throws IOException, InvalidSyntaxException
@@ -291,7 +291,7 @@
 
     @Descriptor("deploy resource from repository")
     public void deploy(
-        @Parameter(name="-s", description="start deployed bundles",
+        @Parameter(names={ "-s", "--start" }, description="start deployed bundles",
             presentValue="true", absentValue="false") boolean start,
         @Descriptor("( <bundle-name> | <symbolic-name> | <bundle-id> )[@<version>] ...")
             String[] args)
@@ -398,7 +398,7 @@
 
     @Descriptor("retrieve resource source code from repository")
     public void source(
-        @Parameter(name="-x", description="extract",
+        @Parameter(names={ "-x", "--extract" }, description="extract",
             presentValue="true", absentValue="false") boolean extract,
         @Descriptor("local target directory") File localDir,
         @Descriptor("( <bundle-name> | <symbolic-name> | <bundle-id> )[@<version>] ...")
@@ -448,7 +448,7 @@
 
     @Descriptor("retrieve resource JavaDoc from repository")
     public void javadoc(
-        @Parameter(name="-x", description="extract",
+        @Parameter(names={"-x", "--extract" }, description="extract",
             presentValue="true", absentValue="false") boolean extract,
         @Descriptor("local target directory") File localDir,
         @Descriptor("( <bundle-name> | <symbolic-name> | <bundle-id> )[@<version>] ...")
diff --git a/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Reflective.java b/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Reflective.java
index 61d9575..9f86804 100644
--- a/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Reflective.java
+++ b/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Reflective.java
@@ -227,8 +227,7 @@
             Object item = itArgs.next();
             if (item instanceof String)
             {
-                String option = (String) item;
-                if (option.startsWith("-"))
+                if (((String) item).startsWith("-"))
                 {
                     for (int argIndex = 0; argIndex < pas.length; argIndex++)
                     {
@@ -237,21 +236,28 @@
                         {
                             if (as[a] instanceof Parameter)
                             {
-                                Parameter o = (Parameter) as[a];
-                                if (o.name().equals(option) && o.presentValue() == null)
+                                Parameter param = (Parameter) as[a];
+                                for (String name : param.names())
                                 {
-                                    itArgs.remove();
-                                    assert itArgs.hasNext();
-                                    Object value = itArgs.next();
-                                    itArgs.remove();
-                                    out[argIndex] = coerce(session, target,
-                                        types[argIndex], value);
-                                }
-                                else if (o.name().equals(option) && o.presentValue() != null)
-                                {
-                                    itArgs.remove();
-                                    out[argIndex] = coerce(session, target,
-                                        types[argIndex], o.presentValue());
+                                    if (name.equals(item))
+                                    {
+                                        if (param.presentValue() == null)
+                                        {
+                                            itArgs.remove();
+                                            assert itArgs.hasNext();
+                                            Object value = itArgs.next();
+                                            itArgs.remove();
+                                            out[argIndex] = coerce(session, target,
+                                                types[argIndex], value);
+                                        }
+                                        else if (param.presentValue() != null)
+                                        {
+                                            itArgs.remove();
+                                            out[argIndex] = coerce(session, target,
+                                                types[argIndex], param.presentValue());
+                                        }
+                                        break;
+                                    }
                                 }
                             }
                         }
diff --git a/gogo/runtime/src/main/java/org/osgi/service/command/Parameter.java b/gogo/runtime/src/main/java/org/osgi/service/command/Parameter.java
index 13239c0..d9dc63c 100644
--- a/gogo/runtime/src/main/java/org/osgi/service/command/Parameter.java
+++ b/gogo/runtime/src/main/java/org/osgi/service/command/Parameter.java
@@ -30,10 +30,10 @@
     static final String UNSPECIFIED = "org.osgi.service.command.unspecified.parameter";
 
     /**
-     * Parameter name, which must start with the hyphen character.
-     * @return parameter name.
+     * Parameter name and aliases which must start with the hyphen character.
+     * @return parameter names.
     **/
-    String name();
+    String[] names();
 
     /**
      * Optional parameter description.
