diff --git a/bundleplugin/pom.xml b/bundleplugin/pom.xml
index 019ec09..d1340d9 100644
--- a/bundleplugin/pom.xml
+++ b/bundleplugin/pom.xml
@@ -66,7 +66,7 @@
   <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.bundlerepository</artifactId>
-      <version>1.5.0-SNAPSHOT</version>
+      <version>1.6.0</version>
   </dependency>
   <dependency>
     <groupId>org.apache.felix</groupId>
diff --git a/bundleplugin/src/main/java/org/apache/felix/obrplugin/ObrIndex.java b/bundleplugin/src/main/java/org/apache/felix/obrplugin/ObrIndex.java
index 6bfbb45..5ca6afa 100644
--- a/bundleplugin/src/main/java/org/apache/felix/obrplugin/ObrIndex.java
+++ b/bundleplugin/src/main/java/org/apache/felix/obrplugin/ObrIndex.java
@@ -63,6 +63,13 @@
     private String urlTemplate;
 
     /**
+     * The repository to index
+     *
+     * @parameter expression="${mavenRepository}
+     */
+    private String mavenRepository;
+
+    /**
      * Local Repository.
      *
      * @parameter expression="${localRepository}"
@@ -77,10 +84,13 @@
         {
             log.info("Indexing...");
 
-            String mavenRepository = localRepository.getBasedir();
-            URI mavenRepoUri = new File(mavenRepository).toURI();
+            String repo = mavenRepository;
+            if (repo == null) {
+                repo = localRepository.getBasedir();
+            }
+            URI mavenRepoUri = new File(repo).toURI();
 
-            URI repositoryXml = ObrUtils.findRepositoryXml( mavenRepository, obrRepository );
+            URI repositoryXml = ObrUtils.findRepositoryXml( repo, obrRepository );
 
             log.info("Repository:   " + mavenRepoUri);
             log.info("OBR xml:      " + repositoryXml);
@@ -90,7 +100,15 @@
             findAllJars( new File(mavenRepository), files );
 
             DataModelHelperImpl dmh = new DataModelHelperImpl();
-            RepositoryImpl repository = (RepositoryImpl) dmh.repository( repositoryXml.toURL() );
+            RepositoryImpl repository;
+
+            File obrRepoFile = new File(repositoryXml);
+            if (obrRepoFile.isFile()) {
+                repository = (RepositoryImpl) dmh.repository( repositoryXml.toURL() );
+            } else {
+                repository = new RepositoryImpl();
+            }
+
             for (File file : files)
             {
                 try
@@ -112,7 +130,7 @@
                     log.warn("Error processing bundle: " + file + " " + e.getMessage());
                 }
             }
-            Writer writer = new FileWriter( new File(repositoryXml) );
+            Writer writer = new FileWriter( obrRepoFile );
             try
             {
                 dmh.writeRepository( repository, writer );
