diff --git a/dependencymanager/build.gradle b/dependencymanager/build.gradle
index db485ef..4465945 100644
--- a/dependencymanager/build.gradle
+++ b/dependencymanager/build.gradle
@@ -20,16 +20,30 @@
 /*
  * Master Gradle build script
  *
- * Depends on bndWorkspace and bndURI properties set by settings.gradle.
+ * Depends on bndPlugin property set by settings.gradle.
+ * and bnd_* values from gradle.properties.
  */
 
-/* Add bnd as a script dependency */
+import aQute.bnd.build.Workspace
+import aQute.bnd.osgi.Constants
+
+/* Add bnd gradle plugin as a script dependency */
 buildscript {
   dependencies {
-    classpath files(bndURI)
+    classpath bndPlugin
   }
 }
 
+/* Initialize the bnd workspace */
+Workspace.setDriver(Constants.BNDDRIVER_GRADLE)
+Workspace.addGestalt(Constants.GESTALT_BATCH, null)
+ext.bndWorkspace = new Workspace(rootDir, bnd_cnf)
+if (bndWorkspace == null) {
+  throw new GradleException("Unable to load workspace ${rootDir}/${bnd_cnf}")
+}
+
+ext.cnf = rootProject.project(bnd_cnf)
+
 /* Configure the subprojects */
 subprojects {
   def bndProject = bndWorkspace.getProject(name)
@@ -37,4 +51,3 @@
     plugins.apply 'biz.aQute.bnd'
   }
 }
-
diff --git a/dependencymanager/cnf/buildrepo/biz.aQute.junit/biz.aQute.junit-latest.jar b/dependencymanager/cnf/buildrepo/biz.aQute.junit/biz.aQute.junit-latest.jar
index 3d0d214..bda8fe4 100644
--- a/dependencymanager/cnf/buildrepo/biz.aQute.junit/biz.aQute.junit-latest.jar
+++ b/dependencymanager/cnf/buildrepo/biz.aQute.junit/biz.aQute.junit-latest.jar
Binary files differ
diff --git a/dependencymanager/cnf/buildrepo/biz.aQute.launcher/biz.aQute.launcher-latest.jar b/dependencymanager/cnf/buildrepo/biz.aQute.launcher/biz.aQute.launcher-latest.jar
index efc751c..0e9c4a3 100644
--- a/dependencymanager/cnf/buildrepo/biz.aQute.launcher/biz.aQute.launcher-latest.jar
+++ b/dependencymanager/cnf/buildrepo/biz.aQute.launcher/biz.aQute.launcher-latest.jar
Binary files differ
diff --git a/dependencymanager/cnf/ext/junit.bnd b/dependencymanager/cnf/ext/junit.bnd
index 1a42d1a..f902dcf 100644
--- a/dependencymanager/cnf/ext/junit.bnd
+++ b/dependencymanager/cnf/ext/junit.bnd
@@ -17,3 +17,5 @@
 junit:\
 	junit;version=latest,\
 	hamcrest-core;version=latest
+
+test-reports: test-results
diff --git a/dependencymanager/cnf/ext/pluginpaths.bnd b/dependencymanager/cnf/ext/pluginpaths.bnd
index 9c12f2e..228ed16 100644
--- a/dependencymanager/cnf/ext/pluginpaths.bnd
+++ b/dependencymanager/cnf/ext/pluginpaths.bnd
@@ -13,6 +13,4 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-#
--pluginpath:\
-	${plugin-dir}/biz.aQute.repository/biz.aQute.repository.jar
\ No newline at end of file
+#
\ No newline at end of file
diff --git a/dependencymanager/cnf/gradle/biz.aQute.bnd.gradle.jar b/dependencymanager/cnf/gradle/biz.aQute.bnd.gradle.jar
deleted file mode 100644
index 0a25453..0000000
--- a/dependencymanager/cnf/gradle/biz.aQute.bnd.gradle.jar
+++ /dev/null
Binary files differ
diff --git a/dependencymanager/cnf/plugins/biz.aQute.repository/biz.aQute.repository.jar b/dependencymanager/cnf/plugins/biz.aQute.repository/biz.aQute.repository.jar
index 1b6e664..abae58b 100644
--- a/dependencymanager/cnf/plugins/biz.aQute.repository/biz.aQute.repository.jar
+++ b/dependencymanager/cnf/plugins/biz.aQute.repository/biz.aQute.repository.jar
Binary files differ
diff --git a/dependencymanager/gradle.properties b/dependencymanager/gradle.properties
index d0b7672..fe4df56 100644
--- a/dependencymanager/gradle.properties
+++ b/dependencymanager/gradle.properties
@@ -33,8 +33,8 @@
 # cnf project name
 bnd_cnf=cnf
 
-# bnd_jar can also be a URL.
-bnd_jar=cnf/gradle/biz.aQute.bnd.gradle.jar
+# bnd_plugin is the dependency declaration for the bnd gradle plugin
+bnd_plugin=biz.aQute.bnd:biz.aQute.bnd.gradle:3.0.0
 
 # bnd_build can be set to the name of a "master" project whose dependencies will seed the set of projects to build.
 bnd_build=
diff --git a/dependencymanager/org.apache.felix.dependencymanager.benchmark/index.bndrun b/dependencymanager/org.apache.felix.dependencymanager.benchmark/index.bndrun
index 128a69b..177916c 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.benchmark/index.bndrun
+++ b/dependencymanager/org.apache.felix.dependencymanager.benchmark/index.bndrun
@@ -23,18 +23,18 @@
 	org.apache.felix.gogo.shell;version=0.10.0,\
 	org.apache.felix.gogo.runtime;version=0.10.0,\
 	org.apache.felix.configadmin;version=1.8.0,\
-	org.apache.felix.dependencymanager.benchmark.scenario,\
-	org.apache.felix.dependencymanager.benchmark.dependencymanager,\
-    org.apache.felix.dependencymanager.benchmark.dependencymanager.parallel,\
-    org.apache.felix.dependencymanager.benchmark.controller
+	org.apache.felix.dependencymanager.benchmark.scenario;version=latest,\
+	org.apache.felix.dependencymanager.benchmark.dependencymanager;version=latest,\
+    org.apache.felix.dependencymanager.benchmark.dependencymanager.parallel;version=latest,\
+    org.apache.felix.dependencymanager.benchmark.controller;version=latest
 	
--runfw: org.apache.felix.framework;version='[4.4.0,4.4.0]'
+-runfw: org.apache.felix.framework;version='[5.2.0,5.2.0]'
 
 -runproperties:  \
 	ds.loglevel=warn,\
 	org.osgi.framework.bootdelegation='sun.*,com.sun.*,org.netbeans.*',\
 	org.apache.felix.dependencymanager.filterindex='objectClass,id'
 -runvm: -server -Xmx1024m -Xms1024m
--runee: JavaSE-1.8
+-runee: JavaSE/compact1-1.9
 javac.source:          1.8
 javac.target:          1.8
diff --git a/dependencymanager/org.apache.felix.dependencymanager.benchmark/noindex.bndrun b/dependencymanager/org.apache.felix.dependencymanager.benchmark/noindex.bndrun
index 480a954..5e9592f 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.benchmark/noindex.bndrun
+++ b/dependencymanager/org.apache.felix.dependencymanager.benchmark/noindex.bndrun
@@ -23,12 +23,12 @@
 	org.apache.felix.gogo.shell;version=0.10.0,\
 	org.apache.felix.gogo.runtime;version=0.10.0,\
 	org.apache.felix.configadmin;version=1.8.0,\
-	org.apache.felix.dependencymanager.benchmark.scenario,\
-	org.apache.felix.dependencymanager.benchmark.dependencymanager,\
-    org.apache.felix.dependencymanager.benchmark.dependencymanager.parallel,\
-    org.apache.felix.dependencymanager.benchmark.controller
+	org.apache.felix.dependencymanager.benchmark.scenario;version=latest,\
+	org.apache.felix.dependencymanager.benchmark.dependencymanager;version=latest,\
+    org.apache.felix.dependencymanager.benchmark.dependencymanager.parallel;version=latest,\
+    org.apache.felix.dependencymanager.benchmark.controller;version=latest
 	
--runfw: org.apache.felix.framework;version='[4.4.0,4.4.0]'
+-runfw: org.apache.felix.framework;version='[5.2.0,5.2.0]'
 
 -runproperties:  \
 	ds.loglevel=warn,\
diff --git a/dependencymanager/org.apache.felix.dependencymanager.itest/bnd.bnd b/dependencymanager/org.apache.felix.dependencymanager.itest/bnd.bnd
index 5ab27e1..c5c968c 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.itest/bnd.bnd
+++ b/dependencymanager/org.apache.felix.dependencymanager.itest/bnd.bnd
@@ -14,13 +14,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
--runbundles:  \
+-runbundles: \
 	org.apache.felix.metatype;version=1.0.4,\
 	org.apache.felix.gogo.runtime;version=0.10.0,\
 	org.apache.felix.log;version=1.0.1,\
 	org.apache.felix.configadmin;version=1.8.6,\
 	org.apache.felix.dependencymanager;version=latest,\
-	org.apache.felix.dependencymanager.shell;version=latest
+	org.apache.felix.dependencymanager.shell;version=latest,\
+	biz.aQute.junit;version=3.0.0
 -runee: JavaSE-1.7
 -runvm: -ea
 -runfw: org.apache.felix.framework
diff --git a/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd b/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd
index 38e5cce..69ef111 100644
--- a/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd
+++ b/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd
@@ -29,7 +29,8 @@
 	org.apache.felix.log;version=1.0.1,\
 	org.apache.felix.dependencymanager;version=latest,\
 	org.apache.felix.dependencymanager.runtime;version=latest,\
-	org.apache.felix.dependencymanager.shell;version=latest
+	org.apache.felix.dependencymanager.shell;version=latest,\
+	biz.aQute.junit;version=3.0.0	
 -runee: JavaSE-1.7
 -runfw: org.apache.felix.framework;version='[4.4.0,4.4.0]'
 -runsystempackages: \
diff --git a/dependencymanager/settings.gradle b/dependencymanager/settings.gradle
index 69007e8..90f6d5d 100644
--- a/dependencymanager/settings.gradle
+++ b/dependencymanager/settings.gradle
@@ -24,37 +24,27 @@
  */
 
 import aQute.bnd.build.Workspace
+import aQute.bnd.osgi.Constants
 
-/* Add bnd as a script dependency */
+/* Add bnd gradle plugin as a script dependency */
 buildscript {
+  repositories {
+    jcenter()
+  }
   dependencies {
-    def bndURI = rootDir.toURI().resolve(bnd_jar)
-    if (bndURI.scheme != 'file') {
-      /* If not a local file, copy to a local file in cnf/cache */
-      def cnfCache = mkdir("${rootDir}/${bnd_cnf}/cache")
-      def bndJarFile = new File(cnfCache, 'biz.aQute.bnd.gradle.jar')
-      if (!bndJarFile.exists()) {
-        println "Downloading ${bndURI} to ${bndJarFile} ..."
-        bndURI.toURL().withInputStream { is ->
-          bndJarFile.withOutputStream { os ->
-            def bos = new BufferedOutputStream( os )
-            bos << is
-          }
-        }
-      }
-      bndURI = bndJarFile.toURI()
-    }
-    classpath files(bndURI)
-
-    /* After the rootProject is created, pass URI to projects */
-    gradle.rootProject { rootProject ->
-      rootProject.ext.bndURI = bndURI
-    }
+    classpath bnd_plugin
+  }
+  /* Pass bnd gradle plugin classpath to rootProject once created */
+  def bndPlugin = files(configurations.classpath.files)
+  gradle.rootProject { rootProject ->
+    rootProject.ext.bndPlugin = bndPlugin
   }
 }
 
 /* Initialize the bnd workspace */
-def workspace = Workspace.getWorkspace(rootDir, bnd_cnf)
+Workspace.setDriver(Constants.BNDDRIVER_GRADLE)
+Workspace.addGestalt(Constants.GESTALT_BATCH, null)
+def workspace = new Workspace(rootDir, bnd_cnf)
 if (workspace == null) {
   throw new GradleException("Unable to load workspace ${rootDir}/${bnd_cnf}")
 }
@@ -104,8 +94,8 @@
   if (! projectName.equals("org.apache.felix.dependencymanager.benchmark")) {
     include projectName
     def project = getBndProject(workspace, projectName)
-    project?.dependson.each {
-      include it.name
+    project?.getDependson()*.getName().each {
+      include it
     }
   }
 }
@@ -123,10 +113,10 @@
 
   project.getInfo(workspace, "${rootDir} :")
   def errorCount = 0
-  project.warnings.each {
+  project.getWarnings().each {
     println "Warning: ${it}"
   }
-  project.errors.each {
+  project.getErrors().each {
     println "Error  : ${it}"
     errorCount++
   }
@@ -141,9 +131,3 @@
   }
   throw new GradleException("Project ${rootDir}/${projectName} is not a valid bnd project")
 }
-
-/* After the rootProject is created, set up some properties. */
-gradle.rootProject { rootProject ->
-  rootProject.ext.bndWorkspace = workspace
-  rootProject.ext.cnf = rootProject.project(bnd_cnf)
-}
