diff --git a/core/src/main/java/org/eclipse/gemini/blueprint/context/support/OsgiBundleXmlApplicationContext.java b/core/src/main/java/org/eclipse/gemini/blueprint/context/support/OsgiBundleXmlApplicationContext.java
index 9a1767c..2316352 100644
--- a/core/src/main/java/org/eclipse/gemini/blueprint/context/support/OsgiBundleXmlApplicationContext.java
+++ b/core/src/main/java/org/eclipse/gemini/blueprint/context/support/OsgiBundleXmlApplicationContext.java
@@ -1,37 +1,37 @@
-/******************************************************************************
- * Copyright (c) 2006, 2010 VMware Inc., Oracle Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Apache License v2.0 which accompanies this distribution. 
- * The Eclipse Public License is available at 
- * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
- * is available at http://www.opensource.org/licenses/apache2.0.php.
- * You may elect to redistribute this code under either of these licenses. 
- * 
- * Contributors:
- *   VMware Inc.
- *   Oracle Inc.
- *****************************************************************************/
-
+/******************************************************************************
+ * Copyright (c) 2006, 2010 VMware Inc., Oracle Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * and Apache License v2.0 which accompanies this distribution. 
+ * The Eclipse Public License is available at 
+ * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
+ * is available at http://www.opensource.org/licenses/apache2.0.php.
+ * You may elect to redistribute this code under either of these licenses. 
+ * 
+ * Contributors:
+ *   VMware Inc.
+ *   Oracle Inc.
+ *****************************************************************************/
+
 package org.eclipse.gemini.blueprint.context.support;
 
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import org.eclipse.gemini.blueprint.io.OsgiBundleResource;
-import org.eclipse.gemini.blueprint.util.OsgiStringUtils;
-import org.eclipse.gemini.blueprint.util.internal.BundleUtils;
-import org.osgi.framework.BundleContext;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
-import org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver;
-import org.springframework.beans.factory.xml.DelegatingEntityResolver;
-import org.springframework.beans.factory.xml.NamespaceHandlerResolver;
-import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
-import org.springframework.context.ApplicationContext;
-import org.springframework.util.Assert;
-import org.xml.sax.EntityResolver;
+import java.io.IOException;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
+import org.eclipse.gemini.blueprint.io.OsgiBundleResource;
+import org.eclipse.gemini.blueprint.util.OsgiStringUtils;
+import org.eclipse.gemini.blueprint.util.internal.BundleUtils;
+import org.osgi.framework.BundleContext;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver;
+import org.springframework.beans.factory.xml.DelegatingEntityResolver;
+import org.springframework.beans.factory.xml.NamespaceHandlerResolver;
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
+import org.springframework.context.ApplicationContext;
+import org.springframework.util.Assert;
+import org.xml.sax.EntityResolver;
 
 /**
  * Stand-alone XML application context, backed by an OSGi bundle.
@@ -237,7 +237,7 @@
 	}
 
 	/**
-	 * Similar to {@link #createNamespaceHandlerResolver(BundleContext, ClassLoader, ClassLoader)} , this method creates
+	 * Similar to {@link #createNamespaceHandlerResolver(BundleContext, String, ClassLoader)} , this method creates
 	 * a special OSGi entity resolver that considers the bundle class path first, falling back to the entity resolver
 	 * service provided by the Spring DM extender.
 	 * 
diff --git a/core/src/main/java/org/eclipse/gemini/blueprint/util/internal/BundleUtils.java b/core/src/main/java/org/eclipse/gemini/blueprint/util/internal/BundleUtils.java
index 7c29ec1..5b18816 100644
--- a/core/src/main/java/org/eclipse/gemini/blueprint/util/internal/BundleUtils.java
+++ b/core/src/main/java/org/eclipse/gemini/blueprint/util/internal/BundleUtils.java
@@ -16,8 +16,7 @@
 
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.PackageAdmin;
+import org.osgi.framework.FrameworkUtil;
 
 /**
  * Internal utility used for internal purposes.
@@ -28,19 +27,9 @@
 	public static final String DM_CORE_ID = "spring.osgi.core.bundle.id";
 	public static final String DM_CORE_TS = "spring.osgi.core.bundle.timestamp";
 
-	public static Bundle getDMCoreBundle(BundleContext ctx) {
-		ServiceReference ref = ctx.getServiceReference(PackageAdmin.class.getName());
-		if (ref != null) {
-			Object service = ctx.getService(ref);
-			if (service instanceof PackageAdmin) {
-				PackageAdmin pa = (PackageAdmin) service;
-				if (pa != null) {
-					return pa.getBundle(BundleUtils.class);
-				}
-			}
-		}
-		return null;
-	}
+    public static Bundle getDMCoreBundle(BundleContext ctx) {
+        return FrameworkUtil.getBundle(BundleUtils.class);
+    }
 
 	public static String createNamespaceFilter(BundleContext ctx) {
 		Bundle bnd = getDMCoreBundle(ctx);
diff --git a/core/template.mf b/core/template.mf
index ceaa19c..50d1675 100644
--- a/core/template.mf
+++ b/core/template.mf
@@ -13,7 +13,6 @@
  org.osgi.service.blueprint;version="1.0.0",
  org.aopalliance.*;version="0.0.0",
  org.osgi.service.cm;version=1.2;resolution:=optional,
- org.osgi.service.packageadmin;version=1.2,
  org.osgi.service.startlevel;version=1.0;resolution:=optional,
  org.apache.commons.logging.*;version=${logging.version.range},
  org.eclipse.gemini.blueprint.*;version=${gemini.blueprint.version.range},
diff --git a/extender/src/main/java/org/eclipse/gemini/blueprint/extender/internal/util/BundleUtils.java b/extender/src/main/java/org/eclipse/gemini/blueprint/extender/internal/util/BundleUtils.java
index 9b3cbb1..bb8d9d2 100644
--- a/extender/src/main/java/org/eclipse/gemini/blueprint/extender/internal/util/BundleUtils.java
+++ b/extender/src/main/java/org/eclipse/gemini/blueprint/extender/internal/util/BundleUtils.java
@@ -7,7 +7,7 @@
  * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
  * is available at http://www.opensource.org/licenses/apache2.0.php.
  * You may elect to redistribute this code under either of these licenses. 
- * 
+ *
  * Contributors:
  *   VMware Inc.
  *****************************************************************************/
@@ -16,39 +16,28 @@
 
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.PackageAdmin;
+import org.osgi.framework.FrameworkUtil;
 import org.eclipse.gemini.blueprint.context.support.OsgiBundleXmlApplicationContext;
 
 /**
  * Internal utility used for internal purposes.
- * 
+ *
  * @author Costin Leau
  */
 public abstract class BundleUtils {
-	public static final String DM_CORE_ID = "spring.osgi.core.bundle.id";
-	public static final String DM_CORE_TS = "spring.osgi.core.bundle.timestamp";
+    public static final String DM_CORE_ID = "spring.osgi.core.bundle.id";
+    public static final String DM_CORE_TS = "spring.osgi.core.bundle.timestamp";
 
-	public static Bundle getDMCoreBundle(BundleContext ctx) {
-		ServiceReference ref = ctx.getServiceReference(PackageAdmin.class.getName());
-		if (ref != null) {
-			Object service = ctx.getService(ref);
-			if (service instanceof PackageAdmin) {
-				PackageAdmin pa = (PackageAdmin) service;
-				if (pa != null) {
-					return pa.getBundle(OsgiBundleXmlApplicationContext.class);
-				}
-			}
-		}
-		return null;
-	}
+    public static Bundle getDMCoreBundle(BundleContext ctx) {
+        return FrameworkUtil.getBundle(OsgiBundleXmlApplicationContext.class);
+    }
 
-	public static String createNamespaceFilter(BundleContext ctx) {
-		Bundle bnd = getDMCoreBundle(ctx);
-		if (bnd != null) {
-			return "(|(" + DM_CORE_ID + "=" + bnd.getBundleId() + ")(" + DM_CORE_TS + "=" + bnd.getLastModified()
-					+ "))";
-		}
-		return "";
-	}
+    public static String createNamespaceFilter(BundleContext ctx) {
+        Bundle bnd = getDMCoreBundle(ctx);
+        if (bnd != null) {
+            return "(|(" + DM_CORE_ID + "=" + bnd.getBundleId() + ")(" + DM_CORE_TS + "=" + bnd.getLastModified()
+                    + "))";
+        }
+        return "";
+    }
 }
diff --git a/extender/template.mf b/extender/template.mf
index 5b1eb78..24aa388 100644
--- a/extender/template.mf
+++ b/extender/template.mf
@@ -2,7 +2,6 @@
  *.internal*
 Import-Package: 
  org.eclipse.gemini.blueprint.extensions.annotation;resolution:=optional;version="${gemini.blueprint.version.range.nq}",
- org.osgi.service.packageadmin;version=1.2,
  org.osgi.service.blueprint.container;version="1.0.0";resolution:=optional,
  org.osgi.service.blueprint.reflect;version="1.0.0";resolution:=optional
 Import-Template: 
diff --git a/io/src/main/java/org/eclipse/gemini/blueprint/io/OsgiBundleResourcePatternResolver.java b/io/src/main/java/org/eclipse/gemini/blueprint/io/OsgiBundleResourcePatternResolver.java
index 6c1acc1..2cca736 100644
--- a/io/src/main/java/org/eclipse/gemini/blueprint/io/OsgiBundleResourcePatternResolver.java
+++ b/io/src/main/java/org/eclipse/gemini/blueprint/io/OsgiBundleResourcePatternResolver.java
@@ -84,7 +84,8 @@
  * @see PathMatchingResourcePatternResolver
  * 
  * @author Costin Leau
- * 
+ *
+ * TODO: Rework to use WIRE Admin
  */
 public class OsgiBundleResourcePatternResolver extends PathMatchingResourcePatternResolver {
 
diff --git a/io/src/main/java/org/eclipse/gemini/blueprint/io/internal/resolver/DependencyResolver.java b/io/src/main/java/org/eclipse/gemini/blueprint/io/internal/resolver/DependencyResolver.java
index 0b76294..61f8988 100644
--- a/io/src/main/java/org/eclipse/gemini/blueprint/io/internal/resolver/DependencyResolver.java
+++ b/io/src/main/java/org/eclipse/gemini/blueprint/io/internal/resolver/DependencyResolver.java
@@ -19,11 +19,12 @@
 
 /**
  * Simple interface offering utility methods for OSGi dependencies, mainly
- * 
  * bundles. This class suplements the {@link PackageAdmin} service by offering
  * information on importing, not just exporting.
  * 
  * @author Costin Leau
+ *
+ * TODO: Rework to remove reference to PackageAdmin
  */
 public interface DependencyResolver {
 
diff --git a/io/src/main/java/org/eclipse/gemini/blueprint/io/internal/resolver/PackageAdminResolver.java b/io/src/main/java/org/eclipse/gemini/blueprint/io/internal/resolver/PackageAdminResolver.java
index 5c7b2d8..267c9ad 100644
--- a/io/src/main/java/org/eclipse/gemini/blueprint/io/internal/resolver/PackageAdminResolver.java
+++ b/io/src/main/java/org/eclipse/gemini/blueprint/io/internal/resolver/PackageAdminResolver.java
@@ -47,6 +47,7 @@
  * @author Costin Leau
  * 
  */
+//TODO: rework to use WIRE Admin
 public class PackageAdminResolver implements DependencyResolver {
 
 	/** logger */
diff --git a/mock/template.mf b/mock/template.mf
index 88a4912..20a99e3 100644
--- a/mock/template.mf
+++ b/mock/template.mf
@@ -2,7 +2,6 @@
  org.springframework.osgi.*.internal.*
 Import-Template: 
  org.osgi.framework;version=1.3,
- org.osgi.service.packageadmin;version=1.2,
  org.springframework.*;version=${spring.version.range},
  org.apache.commons.logging.*;version=${logging.version.range},
  *;resolution:=optional
diff --git a/pom.xml b/pom.xml
index 083b87f..9820e2a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -577,8 +577,8 @@
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <configuration>
-                    <source>1.6</source>
-                    <target>1.6</target>
+                    <source>1.7</source>
+                    <target>1.7</target>
                     <debug>true</debug>
                     <fork>true</fork>
                 </configuration>
@@ -715,7 +715,7 @@
                                 <quiet>true</quiet>
                                 <verbose>false</verbose>
                                 <show>protected</show>
-                                <source>1.6</source>
+                                <source>1.7</source>
                                 <links>
                                     <link>http://download.oracle.com/javase/6/docs/api/</link>
                                     <link>http://static.springsource.org/spring/docs/3.0.x/javadoc-api/</link>
diff --git a/test-support/template.mf b/test-support/template.mf
index b247af8..391d025 100644
--- a/test-support/template.mf
+++ b/test-support/template.mf
@@ -3,7 +3,6 @@
 Import-Template: 
  org.osgi.framework;version=1.3,
  org.osgi.service.cm;version=1.2;resolution:=optional,
- org.osgi.service.packageadmin;version=1.2,
  org.apache.commons.logging.*;version=${logging.version.range},
  org.eclipse.gemini.blueprint.*;version=${gemini.blueprint.version.range},
  org.springframework.*;version=${spring.version.range},
