diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerEclipseLinkTest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerEclipseLinkTest.java
index 6ed52fb..1eef995 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerEclipseLinkTest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerEclipseLinkTest.java
@@ -24,6 +24,7 @@
 import org.junit.Test;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
+import org.osgi.framework.Bundle;
 
 public class JPAContainerEclipseLinkTest extends JPAContainerTest {
 
@@ -44,4 +45,14 @@
         assertTrue("Not PersistenceCapable",
                    Arrays.asList(Car.class.getInterfaces()).contains(PersistenceWeaved.class));
     }
+    
+	@Override
+	protected String getProviderClassName() {
+		return "org.eclipse.persistence.jpa.PersistenceProvider";
+	}
+
+	@Override
+	protected Bundle getProviderBundle() {
+		return getBundleByName("org.apache.aries.jpa.eclipselink.adapter");
+	}
 }
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernate5_2Test.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernate5_2Test.java
new file mode 100644
index 0000000..31849eb
--- /dev/null
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernate5_2Test.java
@@ -0,0 +1,47 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  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.
+ */
+package org.apache.aries.jpa.container.itest;
+
+import org.hibernate.osgi.HibernateBundleActivator;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
+
+public class JPAContainerHibernate5_2Test extends JPAContainerTest {
+
+    @Configuration
+    public Option[] configuration() {
+        return new Option[] {
+            baseOptions(), //
+            ariesJpa21(), //
+            derbyDSF(), //
+            jta12Bundles(), //
+            hibernate5_2(), //
+            testBundle(), //
+        };
+    }
+    
+	@Override
+	protected String getProviderClassName() {
+		return "org.hibernate.jpa.HibernatePersistenceProvider";
+	}
+
+	@Override
+	protected Bundle getProviderBundle() {
+		return FrameworkUtil.getBundle(HibernateBundleActivator.class);
+	}
+}
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernateTest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernateTest.java
index da7ccf2..846c6bd 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernateTest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernateTest.java
@@ -15,8 +15,11 @@
  */
 package org.apache.aries.jpa.container.itest;
 
+import org.hibernate.osgi.HibernateBundleActivator;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
 
 public class JPAContainerHibernateTest extends JPAContainerTest {
 
@@ -31,4 +34,14 @@
             testBundle(), //
         };
     }
+    
+	@Override
+	protected String getProviderClassName() {
+		return "org.hibernate.ejb.HibernatePersistence";
+	}
+
+	@Override
+	protected Bundle getProviderBundle() {
+		return FrameworkUtil.getBundle(HibernateBundleActivator.class);
+	}
 }
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerOpenJPATest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerOpenJPATest.java
index afc83b5..457529c 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerOpenJPATest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerOpenJPATest.java
@@ -24,6 +24,8 @@
 import org.junit.Test;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
 
 public class JPAContainerOpenJPATest extends JPAContainerTest {
     
@@ -46,4 +48,14 @@
 
     }
 
+	@Override
+	protected String getProviderClassName() {
+		return "org.apache.openjpa.persistence.PersistenceProviderImpl";
+	}
+
+	@Override
+	protected Bundle getProviderBundle() {
+		return FrameworkUtil.getBundle(PersistenceCapable.class);
+	}
+
 }
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java
index c5c0edd..463338a 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java
@@ -35,6 +35,7 @@
 import org.apache.aries.jpa.itest.AbstractCarJPAITest;
 import org.apache.aries.jpa.supplier.EmSupplier;
 import org.junit.Test;
+import org.osgi.framework.Bundle;
 import org.osgi.service.coordinator.Coordination;
 import org.osgi.service.coordinator.Coordinator;
 import org.osgi.service.jdbc.DataSourceFactory;
@@ -44,10 +45,17 @@
     @Inject
     Coordinator coordinator;
 
+    protected abstract String getProviderClassName();
+    protected abstract Bundle getProviderBundle();
+    
     @Test
     public void testCarEMFBuilder() throws Exception {
         EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
                                                             "(osgi.unit.name=" + DSF_TEST_UNIT + ")");
+        
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
         Map<String, Object> props = new HashMap<String, Object>();
         EntityManagerFactory emf = emfBuilder.createEntityManagerFactory(props);
         carLifecycleRL(emf.createEntityManager());
@@ -57,6 +65,10 @@
     public void testTruckEMFBuilder() throws Exception {
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + DSF_TEST_UNIT + ")");
+
+    	assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+    	
     	Map<String, Object> props = new HashMap<String, Object>();
     	EntityManagerFactory emf = emfBuilder.createEntityManagerFactory(props);
     	truckLifecycleRL(emf.createEntityManager());
@@ -186,6 +198,9 @@
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
     	
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+    	
     	Properties jdbcProps = new Properties();
     	jdbcProps.setProperty("url", "jdbc:derby:memory:DSFTEST;create=true");
     	
@@ -204,7 +219,10 @@
     	
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
-    	
+    	 
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
     	Properties jdbcProps = new Properties();
     	jdbcProps.setProperty("url", "jdbc:derby:memory:DSFTEST;create=true");
     	
@@ -220,7 +238,10 @@
     public void testCarEMFBuilderExternalDSXA() throws Exception {
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
-
+    	 
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
     	Map<String, Object> props = new HashMap<String, Object>();
     	props.put("javax.persistence.jtaDataSource", ds);
     	props.put("javax.persistence.transactionType", JTA.name());
@@ -234,7 +255,10 @@
     public void testTruckEMFBuilderExternalDSXA() throws Exception {
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
-    	
+    	 
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
     	Map<String, Object> props = new HashMap<String, Object>();
     	props.put("javax.persistence.jtaDataSource", ds);
     	props.put("javax.persistence.transactionType", JTA.name());
@@ -249,6 +273,9 @@
         EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
                         "(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
         
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
         Map<String, Object> props = new HashMap<String, Object>();
         Properties jdbcProps = new Properties();
         jdbcProps.setProperty("url", "jdbc:derby:memory:TESTNOJTA;create=true");
@@ -263,7 +290,10 @@
     public void testTruckEMFBuilderNoNonJTADataSource() throws Exception {
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
-    	
+    	 
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
     	Map<String, Object> props = new HashMap<String, Object>();
     	Properties jdbcProps = new Properties();
     	jdbcProps.setProperty("url", "jdbc:derby:memory:TESTNOJTA;create=true");
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
index d3eb4cf..c0a2692 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
@@ -19,6 +19,7 @@
 import static org.ops4j.pax.exam.CoreOptions.frameworkProperty;
 import static org.ops4j.pax.exam.CoreOptions.junitBundles;
 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.systemPackage;
 import static org.ops4j.pax.exam.CoreOptions.systemProperty;
 import static org.ops4j.pax.exam.CoreOptions.vmOption;
 import static org.ops4j.pax.exam.CoreOptions.when;
@@ -269,6 +270,23 @@
                          mvnBundle("org.hibernate", "hibernate-osgi")
             );
     }
+    
+    protected Option hibernate5_2() {
+    	return composite(
+    			systemPackage("javax.xml.stream;version=1.0"), 
+    			systemPackage("javax.xml.stream.events;version=1.0"),
+				systemPackage("javax.xml.stream.util;version=1.0"),
+    			mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.antlr", "2.7.7_5"),
+				mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.dom4j", "1.6.1_5"),
+				mavenBundle("com.fasterxml", "classmate", "1.3.0"),
+				mavenBundle("org.javassist", "javassist", "3.20.0-GA"),
+				mavenBundle("org.jboss.logging", "jboss-logging", "3.3.0.Final"),
+				mavenBundle("org.jboss", "jandex", "2.0.3.Final"),
+				mavenBundle("org.hibernate.common", "hibernate-commons-annotations", "5.0.1.Final"),
+				mavenBundle("org.hibernate", "hibernate-core", "5.2.10.Final"),
+				mavenBundle("org.hibernate", "hibernate-osgi", "5.2.10.Final")
+    			);
+    }
 
     protected Option derbyDSF() {
         return composite(
diff --git a/javax-persistence/README.md b/javax-persistence/README.md
new file mode 100644
index 0000000..d663a0c
--- /dev/null
+++ b/javax-persistence/README.md
@@ -0,0 +1,15 @@
+# Aries JPA Specification Jars
+
+These projects contain the JPA API at various versions, providing proper OSGi packaging and contracts so that they can be used easily in OSGi.
+
+##Using the JPA API with your OSGi bundles
+
+If you are using a bnd based plugin (e.g. the bnd-maven-plugin or the maven-bundle-plugin) then you should make sure to set the following:
+
+    -contract: *
+
+or
+
+    -contract: JavaJPA
+
+in your bnd configuration. This will ensure that your bundle is built depending on the JPA contract, and therefore that it will not need to be repackaged to use future, backward compatible versions of the JPA specification.
\ No newline at end of file
diff --git a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java
index 56ad2c2..dca7270 100644
--- a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java
+++ b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java
@@ -67,6 +67,7 @@
 	private boolean closed;
 
 	private final PersistenceProvider provider;
+	private final Bundle providerBundle;
 	private final PersistenceUnit persistenceUnit;
 	private final BundleContext containerContext;
 	private final PersistenceUnitTransactionType originalTxType;
@@ -83,8 +84,10 @@
 	private boolean complete;
 
 
-	public AriesEntityManagerFactoryBuilder(BundleContext containerContext, PersistenceProvider provider, PersistenceUnit persistenceUnit) {
+
+	public AriesEntityManagerFactoryBuilder(BundleContext containerContext, PersistenceProvider provider, Bundle providerBundle, PersistenceUnit persistenceUnit) {
 		this.provider = provider;
+		this.providerBundle = providerBundle;
 		this.persistenceUnit = persistenceUnit;
 		this.containerContext = containerContext;
 		this.originalTxType = persistenceUnit.getTransactionType();
@@ -139,6 +142,17 @@
     }
 
 	@Override
+	public String getPersistenceProviderName() {
+		String name = persistenceUnit.getPersistenceProviderClassName();
+		return name == null ? provider.getClass().getName() : name;
+	}
+
+	@Override
+	public Bundle getPersistenceProviderBundle() {
+		return providerBundle;
+	}
+
+	@Override
 	public EntityManagerFactory createEntityManagerFactory(Map<String, Object> props) {
 		
 		synchronized (this) {
diff --git a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceProviderTracker.java b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceProviderTracker.java
index ac7e96d..540a792 100644
--- a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceProviderTracker.java
+++ b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceProviderTracker.java
@@ -85,7 +85,7 @@
 
         createAndCloseDummyEMF(provider);
 
-        stored.builder = new AriesEntityManagerFactoryBuilder(context, provider, punit);
+        stored.builder = new AriesEntityManagerFactoryBuilder(context, provider, reference.getBundle(), punit);
         Dictionary<String, ?> props = AriesEntityManagerFactoryBuilder.createBuilderProperties(punit, punit.getBundle());
         stored.reg = context.registerService(EntityManagerFactoryBuilder.class, stored.builder , props);
         return stored;
diff --git a/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/PropsConfigurationTest.java b/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/PropsConfigurationTest.java
index b0f1f7e..4b94f7f 100644
--- a/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/PropsConfigurationTest.java
+++ b/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/PropsConfigurationTest.java
@@ -21,6 +21,7 @@
 import static java.util.Collections.singletonMap;
 import static javax.persistence.spi.PersistenceUnitTransactionType.JTA;
 import static javax.persistence.spi.PersistenceUnitTransactionType.RESOURCE_LOCAL;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.fail;
 import static org.mockito.AdditionalMatchers.and;
@@ -29,7 +30,6 @@
 import static org.mockito.Matchers.anyMap;
 import static org.mockito.Matchers.argThat;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
@@ -75,6 +75,8 @@
 @RunWith(MockitoJUnitRunner.class)
 public class PropsConfigurationTest {
 
+	private static final String ECLIPSE_PERSISTENCE_PROVIDER = "org.eclipse.persistence.jpa.PersistenceProvider";
+
 	private static final String JDBC_PASSWORD = "123456";
 
 	private static final String JDBC_USER = "bob";
@@ -94,7 +96,7 @@
 	BundleContext containerContext, punitContext;
 	
 	@Mock
-	Bundle punitBundle;
+	Bundle punitBundle, providerBundle;
 	
 	@Mock
 	EntityManagerFactory emf;
@@ -122,7 +124,7 @@
 		
 		when(punit.getPersistenceUnitName()).thenReturn("test-props");
 		when(punit.getPersistenceProviderClassName())
-			.thenReturn("org.eclipse.persistence.jpa.PersistenceProvider");
+			.thenReturn(ECLIPSE_PERSISTENCE_PROVIDER);
 		when(punit.getTransactionType()).thenReturn(PersistenceUnitTransactionType.JTA);
 		when(punit.getBundle()).thenReturn(punitBundle);
 		when(punit.getProperties()).thenReturn(punitProperties);
@@ -161,7 +163,7 @@
 	public void testRegistersManagedEMF() throws InvalidSyntaxException, ConfigurationException {
 		
 		AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(
-				containerContext, provider, punit);
+				containerContext, provider, providerBundle, punit);
 		
 		verify(containerContext).registerService(eq(ManagedService.class),
 				any(ManagedService.class), argThat(servicePropsMatcher(
@@ -201,7 +203,10 @@
     		.thenReturn(emf);
     	
     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(
-        		containerContext, provider, punit);
+        		containerContext, provider, providerBundle, punit);
+    	
+    	assertEquals(ECLIPSE_PERSISTENCE_PROVIDER, emfb.getPersistenceProviderName());
+    	assertEquals(providerBundle, emfb.getPersistenceProviderBundle());
     	
     	try {
     		emfb.createEntityManagerFactory(null);
@@ -230,9 +235,12 @@
 		props.put("javax.persistence.dataSource", ds);
 		
 		AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(
-				containerContext, provider, punit);
-		emfb.createEntityManagerFactory(props);
+				containerContext, provider, providerBundle, punit);
 		
+		assertEquals(ECLIPSE_PERSISTENCE_PROVIDER, emfb.getPersistenceProviderName());
+    	assertEquals(providerBundle, emfb.getPersistenceProviderBundle());
+		
+		emfb.createEntityManagerFactory(props);
 		
 		verify(punit).setNonJtaDataSource(ds);
 		verify(punitContext).registerService(eq(EntityManagerFactory.class),
@@ -259,7 +267,7 @@
         props.put("javax.persistence.dataSource", ds);
        
         AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(
-        		containerContext, provider, punit);
+        		containerContext, provider, providerBundle, punit);
         emfb.createEntityManagerFactory(props);
         
         
@@ -289,7 +297,7 @@
     			any(Map.class))).thenReturn(emf);
     	
     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(
-    			containerContext, provider, punit);
+    			containerContext, provider, providerBundle, punit);
     	
     	verify(punit).setJtaDataSource(ds);
     	verify(punitContext).registerService(eq(EntityManagerFactory.class),
@@ -317,7 +325,7 @@
     			any(Map.class))).thenReturn(emf);
     	
     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(
-    			containerContext, provider, punit);
+    			containerContext, provider, providerBundle, punit);
     	
     	verify(punit).setJtaDataSource(ds);
     	verify(punitContext).registerService(eq(EntityManagerFactory.class),
@@ -351,7 +359,7 @@
     			any(Map.class))).thenReturn(emf);
     	
     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(
-    			containerContext, provider, punit);
+    			containerContext, provider, providerBundle, punit);
 
     	verifyZeroInteractions(provider);
     	
@@ -393,7 +401,7 @@
     			any(Map.class))).thenReturn(emf);
     	
     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(
-    			containerContext, provider, punit);
+    			containerContext, provider, providerBundle, punit);
     	
     	verify(punit).setJtaDataSource(ds);
     	verify(punitContext).registerService(eq(EntityManagerFactory.class),
@@ -418,7 +426,7 @@
     			any(Map.class))).thenReturn(emf);
     	
     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(
-    			containerContext, provider, punit);
+    			containerContext, provider, providerBundle, punit);
     	
     	verify(punit).setNonJtaDataSource(ds);
     	verify(punitContext).registerService(eq(EntityManagerFactory.class),
@@ -438,7 +446,7 @@
 		props.put("javax.persistence.dataSource", ds);
 		
 		AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(
-				containerContext, provider, punit);
+				containerContext, provider, providerBundle, punit);
 		
 		EntityManagerFactory returnedEMF = emfb.createEntityManagerFactory(props);
 		
@@ -466,7 +474,7 @@
     	props.put("javax.persistence.dataSource", ds);
     	
     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(
-    			containerContext, provider, punit);
+    			containerContext, provider, providerBundle, punit);
     	
     	emfb.createEntityManagerFactory(props);
     	
diff --git a/jpa-support/README.md b/jpa-support/README.md
new file mode 100644
index 0000000..14d50e9
--- /dev/null
+++ b/jpa-support/README.md
@@ -0,0 +1,3 @@
+#Aries JPA Helper services
+
+These services are deprecated in favour of the standard OSGi Transaction Control Service, which provides a much fuller set of available functions.
\ No newline at end of file
