diff --git a/examples/tasklist-blueprint/src/test/java/org/apache/aries/jpa/tasklist/blueprint/impl/TaskServiceImplTest.java b/examples/tasklist-blueprint/src/test/java/org/apache/aries/jpa/tasklist/blueprint/impl/TaskServiceImplTest.java
index 6c5e426..c4f9b72 100644
--- a/examples/tasklist-blueprint/src/test/java/org/apache/aries/jpa/tasklist/blueprint/impl/TaskServiceImplTest.java
+++ b/examples/tasklist-blueprint/src/test/java/org/apache/aries/jpa/tasklist/blueprint/impl/TaskServiceImplTest.java
@@ -54,7 +54,7 @@
     }
 
     private EntityManagerFactory createTestEMF() {
-        Map<String, String> properties = new HashMap<>();
+        Map<String, String> properties = new HashMap<String, String>();
         properties.put("javax.persistence.jdbc.driver", "org.apache.derby.jdbc.EmbeddedDriver");
         properties.put("javax.persistence.jdbc.url", "jdbc:derby:memory:TEST;create=true");
         EntityManagerFactory emf = Persistence.createEntityManagerFactory("tasklist", properties);
diff --git a/examples/tasklist-ds/src/test/java/org/apache/aries/jpa/tasklist/closure/impl/TaskServiceImplTest.java b/examples/tasklist-ds/src/test/java/org/apache/aries/jpa/tasklist/closure/impl/TaskServiceImplTest.java
index e0c0607..f54e0c6 100644
--- a/examples/tasklist-ds/src/test/java/org/apache/aries/jpa/tasklist/closure/impl/TaskServiceImplTest.java
+++ b/examples/tasklist-ds/src/test/java/org/apache/aries/jpa/tasklist/closure/impl/TaskServiceImplTest.java
@@ -70,7 +70,7 @@
     }
 
     private EntityManagerFactory createTestEMF() {
-        Map<String, String> properties = new HashMap<>();
+        Map<String, String> properties = new HashMap<String, String>();
         properties.put("javax.persistence.jdbc.driver", "org.apache.derby.jdbc.EmbeddedDriver");
         properties.put("javax.persistence.jdbc.url", "jdbc:derby:target/test;create=true");
         EntityManagerFactory emf = Persistence.createEntityManagerFactory("tasklist", properties);
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java
index 3f94bde..04d7676 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java
@@ -108,7 +108,7 @@
         Runnable carLifeCycle = getService(Runnable.class, "(type=carCoordinated)");
         carLifeCycle.run();
         ExecutorService exec = Executors.newFixedThreadPool(20);
-        List<Future<?>> futures = new ArrayList<>();
+        List<Future<?>> futures = new ArrayList<Future<?>>();
         for (int c=0; c<100; c++) {
             futures.add(exec.submit(carLifeCycle));
         }
diff --git a/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaComponentProcessor.java b/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaComponentProcessor.java
index b8fbb4b..b882549 100644
--- a/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaComponentProcessor.java
+++ b/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaComponentProcessor.java
@@ -66,7 +66,7 @@
         Bundle bundle = getComponent(cdr, "blueprintBundle");
         cdr.registerComponentDefinition(createServiceRef(JPA_COORDINATOR, Coordinator.class));
 
-        Set<String> components = new HashSet<>(cdr.getComponentDefinitionNames());
+        Set<String> components = new HashSet<String>(cdr.getComponentDefinitionNames());
         for (String component : components) {
             ComponentMetadata compDef = cdr.getComponentDefinition(component);
             if (compDef instanceof MutableBeanMetadata && !((MutableBeanMetadata)compDef).isProcessor()) {
diff --git a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/Activator.java b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/Activator.java
index b7ee6e8..1dabec1 100644
--- a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/Activator.java
+++ b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/Activator.java
@@ -39,7 +39,7 @@
         registerWeavingHook(context, TransformerRegistrySingleton.get());
 
         PersistenceBundleTracker customizer = new PersistenceBundleTracker(context);
-        persistenceBundleManager = new BundleTracker<>(context, Bundle.STARTING | Bundle.ACTIVE, customizer);
+        persistenceBundleManager = new BundleTracker<Bundle>(context, Bundle.STARTING | Bundle.ACTIVE, customizer);
         persistenceBundleManager.open();
     }
 
diff --git a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/ManagedEMF.java b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/ManagedEMF.java
index 9d2f20a..b8b73ac 100644
--- a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/ManagedEMF.java
+++ b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/ManagedEMF.java
@@ -135,7 +135,7 @@
     }
 
     public static Dictionary<String, String> createProperties(PersistenceUnitInfo persistenceUnit, Bundle puBundle) {
-        Dictionary<String, String> props = new Hashtable<>();
+        Dictionary<String, String> props = new Hashtable<String, String>();
         props.put(JPA_UNIT_NAME, persistenceUnit.getPersistenceUnitName());
         if (persistenceUnit.getPersistenceProviderClassName() != null) {
             props.put(JPA_UNIT_PROVIDER, persistenceUnit.getPersistenceProviderClassName());
diff --git a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleTracker.java b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleTracker.java
index bf92728..32bdef7 100644
--- a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleTracker.java
+++ b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleTracker.java
@@ -119,7 +119,7 @@
     private Collection<PersistenceProviderTracker> getTrackers(Bundle bundle) {
         Collection<PersistenceProviderTracker> providerTrackers = trackers.get(bundle);
         if (providerTrackers == null) {
-            providerTrackers = new ArrayList<>();
+            providerTrackers = new ArrayList<PersistenceProviderTracker>();
             trackers.put(bundle, providerTrackers);
         }
         return providerTrackers;
diff --git a/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/PersistenceUnit.java b/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/PersistenceUnit.java
index a8da11c..03e5ee9 100644
--- a/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/PersistenceUnit.java
+++ b/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/PersistenceUnit.java
@@ -64,7 +64,7 @@
         this.transactionType = transactionType;
         this.props = new Properties();
         this.classLoader = bundle.adapt(BundleWiring.class).getClassLoader();
-        this.classNames = new HashSet<>();
+        this.classNames = new HashSet<String>();
     }
 
     public void addClassName(String className) {
@@ -112,7 +112,7 @@
 
     @Override
     public List<String> getManagedClassNames() {
-        ArrayList<String> names = new ArrayList<>();
+        ArrayList<String> names = new ArrayList<String>();
         names.addAll(classNames);
         return names;
     }
diff --git a/jpa-parent/pom.xml b/jpa-parent/pom.xml
index 9f173e8..6c458de 100644
--- a/jpa-parent/pom.xml
+++ b/jpa-parent/pom.xml
@@ -145,8 +145,8 @@
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <configuration>
-                    <source>1.7</source>
-                    <target>1.7</target>
+                    <source>1.6</source>
+                    <target>1.6</target>
                 </configuration>
             </plugin>
             <plugin>
diff --git a/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EMFTracker.java b/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EMFTracker.java
index b322d91..4a78ae5 100644
--- a/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EMFTracker.java
+++ b/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EMFTracker.java
@@ -104,13 +104,13 @@
     }
 
     private Dictionary<String, String> getEmSupplierProps(String unitName) {
-        Dictionary<String, String> props = new Hashtable<>();
+        Dictionary<String, String> props = new Hashtable<String, String>();
         props.put(JPA_UNIT_NAME, unitName);
         return props;
     }
 
     private Dictionary<String, String> rlTxManProps(String unitName) {
-        Dictionary<String, String> props = new Hashtable<>();
+        Dictionary<String, String> props = new Hashtable<String, String>();
         props.put(JPA_UNIT_NAME, unitName);
         props.put(TMTracker.TRANSACTION_TYPE, "RESOURCE_LOCAL");
         return props;
diff --git a/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/TMTracker.java b/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/TMTracker.java
index e554a87..d585ec6 100644
--- a/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/TMTracker.java
+++ b/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/TMTracker.java
@@ -61,7 +61,7 @@
     }
 
     private Dictionary<String, String> xaTxManProps(String unitName) {
-        Dictionary<String, String> txmanProperties = new Hashtable<>();
+        Dictionary<String, String> txmanProperties = new Hashtable<String, String>();
         txmanProperties.put(EntityManagerFactoryBuilder.JPA_UNIT_NAME, unitName);
         txmanProperties.put(TRANSACTION_TYPE, "JTA");
         return txmanProperties;
diff --git a/jpa-support/src/test/java/org/apache/aries/jpa/impl/DummyCoordination.java b/jpa-support/src/test/java/org/apache/aries/jpa/impl/DummyCoordination.java
index c859780..3785fc7 100644
--- a/jpa-support/src/test/java/org/apache/aries/jpa/impl/DummyCoordination.java
+++ b/jpa-support/src/test/java/org/apache/aries/jpa/impl/DummyCoordination.java
@@ -30,7 +30,7 @@
 import org.osgi.service.coordinator.Participant;
 
 public class DummyCoordination implements Coordination {
-    private Set<Participant> participants = new HashSet<>();
+    private Set<Participant> participants = new HashSet<Participant>();
     private Map<Class<?>, Object> vars = new HashMap<Class<?>, Object>();
     private Coordination enclosing;
 
diff --git a/jpa-support/src/test/java/org/apache/aries/jpa/impl/DummyCoordinator.java b/jpa-support/src/test/java/org/apache/aries/jpa/impl/DummyCoordinator.java
index 5e3c647..e13ceb6 100644
--- a/jpa-support/src/test/java/org/apache/aries/jpa/impl/DummyCoordinator.java
+++ b/jpa-support/src/test/java/org/apache/aries/jpa/impl/DummyCoordinator.java
@@ -27,7 +27,7 @@
 
 public class DummyCoordinator implements Coordinator {
 
-    private java.util.Deque<Coordination> coordinations = new ArrayDeque<>();
+    private java.util.Deque<Coordination> coordinations = new ArrayDeque<Coordination>();
 
     @Override
     public Coordination create(String name, long timeMillis) {
