diff --git a/scr/pom.xml b/scr/pom.xml
index deab4ff..4fc4edc 100644
--- a/scr/pom.xml
+++ b/scr/pom.xml
@@ -111,12 +111,12 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>concurrent</groupId>
-            <artifactId>concurrent</artifactId>
-            <version>1.3.4</version>
+            <groupId>backport-util-concurrent</groupId>
+            <artifactId>backport-util-concurrent</artifactId>
+            <version>3.1</version>
             <scope>provided</scope>
         </dependency>
-        
+
         <!-- Integration Testing with Pax Exam -->
         <dependency>
             <groupId>org.ops4j.pax.exam</groupId>
@@ -305,7 +305,21 @@
                         </DynamicImport-Package>
                         <Embed-Dependency>
                             kxml2;inline=org/kxml2/io/KXmlParser.class|org/xmlpull/v1/XmlPull**,
-                            concurrent;inline=EDU/oswego/cs/dl/util/concurrent/ReentrantWriterPreferenceReadWriteLock.class|EDU/oswego/cs/dl/util/concurrent/WriterPreferenceReadWriteLock*|EDU/oswego/cs/dl/util/concurrent/ReadWriteLock.class|EDU/oswego/cs/dl/util/concurrent/SynchronizedRef.class|EDU/oswego/cs/dl/util/concurrent/SynchronizedVariable.class|EDU/oswego/cs/dl/util/concurrent/Sync.class|EDU/oswego/cs/dl/util/concurrent/Executor.class
+                            backport-util-concurrent;inline=edu/emory/mathcs/backport/java/util/concurrent/TimeUnit.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/TimeUnit*.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantReadWriteLock.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantReadWriteLock*.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/locks/ReadWriteLock.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/locks/Lock.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/locks/Condition.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/locks/CondVar.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/locks/CondVar*.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/helpers/NanoTimer.class
+                            |edu/emory/mathcs/backport/java/util/Arrays.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils*1.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils*MillisProvider.class
+                            |edu/emory/mathcs/backport/java/util/concurrent/atomic/AtomicReference.class
                         </Embed-Dependency>
                     </instructions>
                 </configuration>
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
index 4c85027..80cd8f0 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
@@ -1917,50 +1917,44 @@
         }
     }
 
-    private static class EDULock extends EDU.oswego.cs.dl.util.concurrent.ReentrantWriterPreferenceReadWriteLock implements LockWrapper
+    private static class EDULock  implements LockWrapper
     {
+        private final edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantReadWriteLock lock = new edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantReadWriteLock( );
+
         public boolean tryReadLock( long milliseconds ) throws InterruptedException
         {
-            return readLock().attempt( milliseconds );
+             return lock.readLock().tryLock( milliseconds, edu.emory.mathcs.backport.java.util.concurrent.TimeUnit.MILLISECONDS );
         }
 
         public long getReadHoldCount()
         {
-            return readers_.size();
+            return lock.getReadHoldCount();
         }
 
         public void unlockReadLock()
         {
-            readLock().release();
+            lock.readLock().unlock();
         }
 
         public boolean tryWriteLock( long milliseconds ) throws InterruptedException
         {
-            return writeLock().attempt( milliseconds );
+            return lock.writeLock().tryLock( milliseconds, edu.emory.mathcs.backport.java.util.concurrent.TimeUnit.MILLISECONDS );
         }
 
         public long getWriteHoldCount()
         {
-            return writeHolds_;
+            return lock.getWriteHoldCount();
         }
 
         public void unlockWriteLock()
         {
-            writeLock().release();
+            lock.writeLock().unlock();
         }
 
         public void deescalate()
         {
-            try
-            {
-                readLock().acquire();
-            }
-            catch ( InterruptedException e )
-            {
-                //should not happen, we have the write lock
-                throw ( IllegalStateException ) new IllegalStateException( "Unexpected InterruptedException while acquiring read lock and holding write lock" ).initCause( e );
-            }
-            writeLock().release();
+            lock.readLock().lock();
+            lock.writeLock().unlock();
         }
     }
 
@@ -1996,7 +1990,7 @@
 
     private static class EDUAtomicReferenceWrapper implements AtomicReferenceWrapper
     {
-        private final EDU.oswego.cs.dl.util.concurrent.SynchronizedRef ref = new EDU.oswego.cs.dl.util.concurrent.SynchronizedRef( null );
+        private final edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicReference ref = new edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicReference(  );
 
         public Object get()
         {
@@ -2004,13 +1998,13 @@
         }
 
         public void set(Object o)
-         {
-             ref.set( o );
-         }
+        {
+            ref.set( o );
+        }
 
         public boolean compareAndSet(Object expected, Object replacement)
         {
-            return ref.commit( expected, replacement );
+            return ref.compareAndSet( expected, replacement );
         }
     }
 
