diff --git a/3rdparty/backport-util-concurrent-2.2.jar b/3rdparty/backport-util-concurrent-2.2.jar
index 338e546..61f54c3 100644
--- a/3rdparty/backport-util-concurrent-2.2.jar
+++ b/3rdparty/backport-util-concurrent-2.2.jar
Binary files differ
diff --git a/3rdparty/backport-util-concurrent-full-2.2.jar b/3rdparty/backport-util-concurrent-full-2.2.jar
new file mode 100644
index 0000000..20a1687
--- /dev/null
+++ b/3rdparty/backport-util-concurrent-full-2.2.jar
Binary files differ
diff --git a/3rdparty/qdox-1.6.1.jar b/3rdparty/qdox-1.6.1.jar
index 8587ae2..76f49e8 100644
--- a/3rdparty/qdox-1.6.1.jar
+++ b/3rdparty/qdox-1.6.1.jar
Binary files differ
diff --git a/3rdparty/qdox-full-1.6.1.jar b/3rdparty/qdox-full-1.6.1.jar
new file mode 100644
index 0000000..a7a9c2c
--- /dev/null
+++ b/3rdparty/qdox-full-1.6.1.jar
Binary files differ
diff --git a/src/main/org/testng/internal/ResultMap.java b/src/jdk14/org/testng/internal/ResultMap.java
similarity index 83%
copy from src/main/org/testng/internal/ResultMap.java
copy to src/jdk14/org/testng/internal/ResultMap.java
index b3288f1..04c94a0 100644
--- a/src/main/org/testng/internal/ResultMap.java
+++ b/src/jdk14/org/testng/internal/ResultMap.java
@@ -5,14 +5,14 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
 
 import org.testng.IResultMap;
 import org.testng.ITestNGMethod;
 import org.testng.ITestResult;
 
 public class ResultMap implements IResultMap {
-  private Map<ITestResult, ITestNGMethod> m_map =
-    new HashMap<ITestResult, ITestNGMethod>();
+  private Map<ITestResult, ITestNGMethod> m_map = new ConcurrentHashMap/*<ITestResult, ITestNGMethod>*/();
 
   public void addResult(ITestResult result, ITestNGMethod method) {
     m_map.put(result, method);
diff --git a/src/main/org/testng/internal/ResultMap.java b/src/jdk15/org/testng/internal/ResultMap.java
similarity index 85%
rename from src/main/org/testng/internal/ResultMap.java
rename to src/jdk15/org/testng/internal/ResultMap.java
index b3288f1..31ccaf8 100644
--- a/src/main/org/testng/internal/ResultMap.java
+++ b/src/jdk15/org/testng/internal/ResultMap.java
@@ -5,14 +5,14 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.testng.IResultMap;
 import org.testng.ITestNGMethod;
 import org.testng.ITestResult;
 
 public class ResultMap implements IResultMap {
-  private Map<ITestResult, ITestNGMethod> m_map =
-    new HashMap<ITestResult, ITestNGMethod>();
+  private Map<ITestResult, ITestNGMethod> m_map = new ConcurrentHashMap<ITestResult, ITestNGMethod>();
 
   public void addResult(ITestResult result, ITestNGMethod method) {
     m_map.put(result, method);
diff --git a/src/main/org/testng/TestRunner.java b/src/main/org/testng/TestRunner.java
index 660d5b4..b49925c 100644
--- a/src/main/org/testng/TestRunner.java
+++ b/src/main/org/testng/TestRunner.java
@@ -990,9 +990,7 @@
   //
 
   public void addPassedTest(ITestNGMethod tm, ITestResult tr) {
-    synchronized(m_passedTests) {
-      m_passedTests.addResult(tr, tm);
-    }
+    m_passedTests.addResult(tr, tm);
   }
 
   public Set<ITestResult> getPassedTests(ITestNGMethod tm) {
@@ -1000,9 +998,7 @@
   }
 
   public void addSkippedTest(ITestNGMethod tm, ITestResult tr) {
-    synchronized(m_skippedTests) {
-      m_skippedTests.addResult(tr, tm);
-    }
+    m_skippedTests.addResult(tr, tm);
   }
 
   public void addInvokedMethod(InvokedMethod im) {
@@ -1035,22 +1031,14 @@
   // ITestResultNotifier
   /////
 
-//  public ITestNGMethod[] getTestMethods() {
-//    return m_allTestMethods;
-//  }
-
   private void logFailedTest(ITestNGMethod method,
                              ITestResult tr,
                              boolean withinSuccessPercentage) {
     if (withinSuccessPercentage) {
-      synchronized(m_failedButWithinSuccessPercentageTests) {
-        m_failedButWithinSuccessPercentageTests.addResult(tr, method);
-      }
+      m_failedButWithinSuccessPercentageTests.addResult(tr, method);
     }
     else {
-      synchronized(m_failedTests) {
-        m_failedTests.addResult(tr, method);
-      }
+      m_failedTests.addResult(tr, method);
     }
   }
 
@@ -1141,21 +1129,15 @@
   
   private class ConfigurationListener implements IConfigurationListener {
     public void onConfigurationFailure(ITestResult itr) {
-      synchronized(m_failedConfigurations) {
-        m_failedConfigurations.addResult(itr, itr.getMethod());
-      }
+      m_failedConfigurations.addResult(itr, itr.getMethod());
     }
 
     public void onConfigurationSkip(ITestResult itr) {
-      synchronized(m_skippedConfigurations) {
-        m_skippedConfigurations.addResult(itr, itr.getMethod());
-      }
+      m_skippedConfigurations.addResult(itr, itr.getMethod());
     }
 
     public void onConfigurationSuccess(ITestResult itr) {
-      synchronized(m_passedConfigurations) {
-        m_passedConfigurations.addResult(itr, itr.getMethod());
-      }
+      m_passedConfigurations.addResult(itr, itr.getMethod());
     }
   }
 } // TestRunner
