diff --git a/assembly/src/main/filtered-resources/etc/startup.properties b/assembly/src/main/filtered-resources/etc/startup.properties
index 067881b..4674d78 100644
--- a/assembly/src/main/filtered-resources/etc/startup.properties
+++ b/assembly/src/main/filtered-resources/etc/startup.properties
@@ -43,4 +43,4 @@
 org/apache/karaf/jaas/org.apache.karaf.jaas.config/${karaf.version}/org.apache.karaf.jaas.config-${karaf.version}.jar=28
 org/apache/karaf/jaas/org.apache.karaf.jaas.modules/${karaf.version}/org.apache.karaf.jaas.modules-${karaf.version}.jar=30
 org/apache/karaf/features/org.apache.karaf.features.core/${karaf.version}/org.apache.karaf.features.core-${karaf.version}.jar=29
-org/apache/karaf/features/org.apache.karaf.features.command/${karaf.version}/org.apache.karaf.features.command-${karaf.version}.jar=30
\ No newline at end of file
+org/apache/karaf/features/org.apache.karaf.features.command/${karaf.version}/org.apache.karaf.features.command-${karaf.version}.jar=30
diff --git a/project/pom.xml b/project/pom.xml
index f4b7759..82123c0 100644
--- a/project/pom.xml
+++ b/project/pom.xml
@@ -24,6 +24,7 @@
     <groupId>org.apache.jclouds</groupId>
     <artifactId>jclouds-project</artifactId>
     <version>2.0.0-SNAPSHOT</version>
+    <relativePath />
   </parent>
 
   <groupId>org.apache.jclouds.cli</groupId>
diff --git a/runner/src/main/java/org/jclouds/cli/runner/Main.java b/runner/src/main/java/org/jclouds/cli/runner/Main.java
index 0106807..52f1b7a 100644
--- a/runner/src/main/java/org/jclouds/cli/runner/Main.java
+++ b/runner/src/main/java/org/jclouds/cli/runner/Main.java
@@ -27,17 +27,17 @@
 import java.io.PrintStream;
 import java.lang.reflect.Method;
 import java.net.MalformedURLException;
-import java.net.UnknownHostException;
 import java.net.URL;
 import java.net.URLClassLoader;
-import java.util.ArrayList;
+import java.net.UnknownHostException;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Queue;
 import java.util.concurrent.TimeoutException;
+
 import jline.Terminal;
+
 import org.apache.felix.gogo.commands.Action;
 import org.apache.felix.gogo.commands.Command;
 import org.apache.felix.gogo.commands.CommandException;
@@ -60,6 +60,8 @@
 import org.jclouds.rest.ResourceNotFoundException;
 import org.jclouds.util.Throwables2;
 
+import com.google.common.collect.Lists;
+
 /**
  * This is forked from Apache Karaf and aligned to the needs of jclouds cli.
  */
@@ -175,7 +177,7 @@
      * @throws IOException
      */
     public void loadJarsFromPath(File path) throws IOException {
-        Queue<File> dirs = new LinkedList<File>();
+        LinkedList<File> dirs = Lists.newLinkedList();
         dirs.add(path);
         while (!dirs.isEmpty()) {
             for (File f : dirs.poll().listFiles()) {
@@ -188,8 +190,8 @@
             }
         }
     }
-    public static void addURL(URL u) throws IOException
-    {
+
+    public static void addURL(URL u) throws IOException {
         URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
         Class sysclass = URLClassLoader.class;
 
@@ -208,13 +210,12 @@
 
         if (args.length > 0) {
             // Commands have the form: jclouds:category-action.
-            List<String> commands = new ArrayList<String>(
-                commandProcessor.getCommands());
+            List<String> commands = Lists.newArrayList(commandProcessor.getCommands());
             Collections.sort(commands);
             if (!commands.contains(args[0])) {
                 final String INDENT = "    ";
-                StringBuffer sb = new StringBuffer(
-                    "Usage: jclouds {category} {action} {options/arguments}");
+                StringBuilder sb = new StringBuilder(
+                      "Usage: jclouds {category} {action} {options/arguments}");
 
                 // list commands
                 sb.append("\n\nValid commands:");
@@ -391,7 +392,7 @@
     private static PrintStream wrap(PrintStream stream) {
         OutputStream o = AnsiConsole.wrapOutputStream(stream);
         if (o instanceof PrintStream) {
-            return ((PrintStream) o);
+            return (PrintStream) o;
         } else {
             return new PrintStream(o);
         }
@@ -407,7 +408,7 @@
     }
 
     private static List<URL> getFiles(File base) throws MalformedURLException {
-        List<URL> urls = new ArrayList<URL>();
+        List<URL> urls = Lists.newArrayList();
         getFiles(base, urls);
         return urls;
     }
