Code cleanup
diff --git a/src/main/java/org/testng/Converter.java b/src/main/java/org/testng/Converter.java
index 294de1a..b009b54 100644
--- a/src/main/java/org/testng/Converter.java
+++ b/src/main/java/org/testng/Converter.java
@@ -90,9 +90,9 @@
   }
 
   private void writeFile(File newFile, String content) throws IOException {
-    FileWriter bw = new FileWriter(newFile);
-    bw.write(content);
-    bw.close();
+    try (FileWriter bw = new FileWriter(newFile)) {
+      bw.write(content);
+    }
     System.out.println("Wrote " + newFile);
   }
 }
diff --git a/src/main/java/org/testng/TestNG.java b/src/main/java/org/testng/TestNG.java
index d40c980..1925690 100644
--- a/src/main/java/org/testng/TestNG.java
+++ b/src/main/java/org/testng/TestNG.java
@@ -351,31 +351,31 @@
 
       Utils.log("TestNG", 2, "Trying to open jar file:" + jarFile);
 
-      JarFile jf = new JarFile(jarFile);
-//      System.out.println("   result: " + jf);
-      Enumeration<JarEntry> entries = jf.entries();
-      List<String> classes = Lists.newArrayList();
       boolean foundTestngXml = false;
-      while (entries.hasMoreElements()) {
-        JarEntry je = entries.nextElement();
-        if (je.getName().equals(m_xmlPathInJar)) {
-          Parser parser = getParser(jf.getInputStream(je));
-          Collection<XmlSuite> suites = parser.parse();
-          for (XmlSuite suite : suites) {
-            // If test names were specified, only run these test names
-            if (m_testNames != null) {
-              m_suites.add(extractTestNames(suite, m_testNames));
-            } else {
-              m_suites.add(suite);
+      List<String> classes = Lists.newArrayList();
+      try (JarFile jf = new JarFile(jarFile)) {
+//      System.out.println("   result: " + jf);
+        Enumeration<JarEntry> entries = jf.entries();
+        while (entries.hasMoreElements()) {
+          JarEntry je = entries.nextElement();
+          if (je.getName().equals(m_xmlPathInJar)) {
+            Parser parser = getParser(jf.getInputStream(je));
+            Collection<XmlSuite> suites = parser.parse();
+            for (XmlSuite suite : suites) {
+              // If test names were specified, only run these test names
+              if (m_testNames != null) {
+                m_suites.add(extractTestNames(suite, m_testNames));
+              } else {
+                m_suites.add(suite);
+              }
             }
-          }
 
-          foundTestngXml = true;
-          break;
-        }
-        else if (je.getName().endsWith(".class")) {
-          int n = je.getName().length() - ".class".length();
-          classes.add(je.getName().replace("/", ".").substring(0, n));
+            foundTestngXml = true;
+            break;
+          } else if (je.getName().endsWith(".class")) {
+            int n = je.getName().length() - ".class".length();
+            classes.add(je.getName().replace("/", ".").substring(0, n));
+          }
         }
       }
       if (! foundTestngXml) {
@@ -882,9 +882,7 @@
     }
   }
   private void addReporter(Class<? extends IReporter> r) {
-    if (! m_reporters.contains(r)) {
-      m_reporters.add(ClassHelper.newInstance(r));
-    }
+    m_reporters.add(ClassHelper.newInstance(r));
   }
 
   private void initializeDefaultListeners() {
@@ -1484,7 +1482,7 @@
         String[] sel = Utils.split(cls, ":");
         try {
           if (sel.length == 2) {
-            addMethodSelector(sel[0], Integer.valueOf(sel[1]));
+            addMethodSelector(sel[0], Integer.parseInt(sel[1]));
           } else {
             error("Method selector value was not in the format org.example.Selector:4");
           }
diff --git a/src/main/java/org/testng/TestRunner.java b/src/main/java/org/testng/TestRunner.java
index cce5662..ce10e28 100644
--- a/src/main/java/org/testng/TestRunner.java
+++ b/src/main/java/org/testng/TestRunner.java
@@ -45,7 +45,6 @@
 import org.testng.internal.annotations.AnnotationHelper;
 import org.testng.internal.annotations.IAnnotationFinder;
 import org.testng.internal.annotations.IListeners;
-import org.testng.internal.thread.ThreadUtil;
 import org.testng.internal.thread.graph.GraphThreadPoolExecutor;
 import org.testng.internal.thread.graph.IThreadWorkerFactory;
 import org.testng.internal.thread.graph.IWorker;
@@ -251,7 +250,7 @@
     addConfigurationListener(m_confListener);
   }
 
-  private class ListenerHolder {
+  private static class ListenerHolder {
     private List<Class<? extends ITestNGListener>> listenerClasses;
     private Class<? extends ITestNGListenerFactory> listenerFactoryClass;
   }
@@ -673,7 +672,7 @@
     // so it can be eager => failure
     workers.add(new IWorker<ITestNGMethod>() {
       /**
-       * @see org.testng.internal.IMethodWorker#getMaxTimeOut()
+       * @see TestMethodWorker#getTimeOut()
        */
       @Override
       public long getTimeOut() {
@@ -725,7 +724,7 @@
       }
     });
 
-    runWorkers(workers, "" /* JUnit does not support parallel */, null);
+    runWorkers(workers);
     m_allTestMethods= runMethods.toArray(new ITestNGMethod[runMethods.size()]);
   }
 
@@ -996,34 +995,13 @@
   private static final EnumSet<XmlSuite.ParallelMode> WORKERS_PARALLEL_MODES
       = EnumSet.of(XmlSuite.ParallelMode.METHODS, XmlSuite.ParallelMode.TRUE,
                    XmlSuite.ParallelMode.CLASSES);
-  private void runWorkers(List<? extends IWorker<ITestNGMethod>> workers, String parallelMode,
-      ListMultiMap<Integer, TestMethodWorker> sequentialWorkers) {
-    if (WORKERS_PARALLEL_MODES.contains(parallelMode))
-    {
-      //
-      // Parallel run
-      //
-      // Default timeout for individual methods:  same as the test global-time-out, but
-      // overridden if a method defines its own.
-      long maxTimeOut = m_xmlTest.getTimeOut(XmlTest.DEFAULT_TIMEOUT_MS);
-      for (IWorker<ITestNGMethod> tmw : workers) {
-        long mt = tmw.getTimeOut();
-        if (mt > maxTimeOut) {
-          maxTimeOut= mt;
-        }
-      }
-
-      ThreadUtil.execute(workers, m_xmlTest.getThreadCount(), maxTimeOut, false);
-//      ThreadUtil.execute(sequentialWorkers);
-    }
-    else {
+  private void runWorkers(List<? extends IWorker<ITestNGMethod>> workers) {
       //
       // Sequential run
       //
       for (IWorker<ITestNGMethod> tmw : workers) {
         tmw.run();
       }
-    }
   }
 
   private void afterRun() {
@@ -1483,7 +1461,7 @@
     return m_verbose;
   }
 
-  public void setVerbose(int n) {
+  public static void setVerbose(int n) {
     m_verbose = n;
   }
 
diff --git a/src/main/java/org/testng/internal/ClassHelper.java b/src/main/java/org/testng/internal/ClassHelper.java
index a348da3..cf4aa74 100644
--- a/src/main/java/org/testng/internal/ClassHelper.java
+++ b/src/main/java/org/testng/internal/ClassHelper.java
@@ -552,13 +552,12 @@
     //
     if (-1 != m_lastGoodRootIndex) {
 
-      // TODO use a SringBuffer here
-      String className = segments[m_lastGoodRootIndex];
+      StringBuilder className = new StringBuilder(segments[m_lastGoodRootIndex]);
       for (int i = m_lastGoodRootIndex + 1; i < segments.length; i++) {
-        className += "." + segments[i];
+        className.append(".").append(segments[i]);
       }
 
-      result = ClassHelper.forName(className);
+      result = ClassHelper.forName(className.toString());
 
       if (null != result) {
         return result;
diff --git a/src/main/java/org/testng/internal/MethodHelper.java b/src/main/java/org/testng/internal/MethodHelper.java
index b7545e8..ce7c0c9 100644
--- a/src/main/java/org/testng/internal/MethodHelper.java
+++ b/src/main/java/org/testng/internal/MethodHelper.java
@@ -5,6 +5,7 @@
 import java.util.Iterator;

 import java.util.List;

 import java.util.Map;

+import java.util.NoSuchElementException;

 import java.util.Set;

 import java.util.concurrent.ConcurrentHashMap;

 import java.util.regex.Pattern;

@@ -351,7 +352,11 @@
 

   @Override

   public Object[] next() {

-    return m_objects[m_count++];

+    if (m_count < m_objects.length) {

+      return m_objects[m_count++];

+    } else {

+      throw new NoSuchElementException();

+    }

   }

 

   @Override

diff --git a/src/main/java/org/testng/internal/ResultMap.java b/src/main/java/org/testng/internal/ResultMap.java
index f9931e6..ae37ee4 100755
--- a/src/main/java/org/testng/internal/ResultMap.java
+++ b/src/main/java/org/testng/internal/ResultMap.java
@@ -28,9 +28,9 @@
   public Set<ITestResult> getResults(ITestNGMethod method) {
     Set<ITestResult> result = new HashSet<>();
 
-    for (ITestResult tr : m_map.keySet()) {
-      if (m_map.get(tr).equals(method)) {
-        result.add(tr);
+    for (Map.Entry<ITestResult, ITestNGMethod> entry : m_map.entrySet()) {
+      if (entry.getValue().equals(method)) {
+        result.add(entry.getKey());
       }
     }
 
diff --git a/src/main/java/org/testng/internal/TestNGClassFinder.java b/src/main/java/org/testng/internal/TestNGClassFinder.java
index 8920c7d..f027f2c 100644
--- a/src/main/java/org/testng/internal/TestNGClassFinder.java
+++ b/src/main/java/org/testng/internal/TestNGClassFinder.java
@@ -205,10 +205,9 @@
     //
     // Add all the instances we found to their respective IClasses
     //
-    for(Class c : m_instanceMap.keySet()) {
-      List<Object> instances= m_instanceMap.get(c);
-      for(Object instance : instances) {
-        IClass ic= getIClass(c);
+    for(Map.Entry<Class, List<Object>> entry : m_instanceMap.entrySet()) {
+      for(Object instance : entry.getValue()) {
+        IClass ic= getIClass(entry.getKey());
         if(null != ic) {
           ic.addInstance(instance);
         }
diff --git a/src/main/java/org/testng/internal/Utils.java b/src/main/java/org/testng/internal/Utils.java
index b98163c..5ef536f 100644
--- a/src/main/java/org/testng/internal/Utils.java
+++ b/src/main/java/org/testng/internal/Utils.java
@@ -748,23 +748,20 @@
   }
 
   public static void copyFile(File from, File to) {
-    try{
-      InputStream in = new FileInputStream(from);
+    try (InputStream in = new FileInputStream(from)) {
 
       //For Append the file.
 //        OutputStream out = new FileOutputStream(f2,true);
 
       //For Overwrite the file.
       to.getParentFile().mkdirs();
-      OutputStream out = new FileOutputStream(to);
-
-      byte[] buf = new byte[1024];
-      int len;
-      while ((len = in.read(buf)) > 0){
-        out.write(buf, 0, len);
+      try (OutputStream out = new FileOutputStream(to)) {
+        byte[] buf = new byte[1024];
+        int len;
+        while ((len = in.read(buf)) > 0) {
+          out.write(buf, 0, len);
+        }
       }
-      in.close();
-      out.close();
     } catch(IOException e){
       e.printStackTrace();
     }
diff --git a/src/main/java/org/testng/internal/Yaml.java b/src/main/java/org/testng/internal/Yaml.java
index 331e83b..11ecd25 100644
--- a/src/main/java/org/testng/internal/Yaml.java
+++ b/src/main/java/org/testng/internal/Yaml.java
@@ -151,10 +151,10 @@
     if (mg.size() > 0) {
       result.append(sp2).append("metaGroups: { ");
       boolean first = true;
-      for (String group : mg.keySet()) {
+      for (Map.Entry<String, List<String>> entry : mg.entrySet()) {
         if (! first) result.append(", ");
-        result.append(group).append(": [ ")
-        .append(Utils.join(mg.get(group), ",")).append(" ] ");
+        result.append(entry.getKey()).append(": [ ")
+        .append(Utils.join(entry.getValue(), ",")).append(" ] ");
         first = false;
       }
       result.append(" }\n");
diff --git a/src/main/java/org/testng/internal/annotations/AnnotationHelper.java b/src/main/java/org/testng/internal/annotations/AnnotationHelper.java
index 182e528..f08490b 100755
--- a/src/main/java/org/testng/internal/annotations/AnnotationHelper.java
+++ b/src/main/java/org/testng/internal/annotations/AnnotationHelper.java
@@ -164,7 +164,7 @@
     result.setTimeOut(bs.getTimeOut());
   }
 
-  private static Class[] ALL_ANNOTATIONS = new Class[] {
+  private static final Class[] ALL_ANNOTATIONS = new Class[] {
     ITestAnnotation.class, IConfigurationAnnotation.class,
     IBeforeClass.class, IAfterClass.class,
     IBeforeMethod.class, IAfterMethod.class,
@@ -175,7 +175,7 @@
     IBeforeGroups.class, IAfterGroups.class
   };
 
-  public static Class[] CONFIGURATION_CLASSES = new Class[] {
+  public static final Class[] CONFIGURATION_CLASSES = new Class[] {
     IConfigurationAnnotation.class,
     IBeforeSuite.class, IAfterSuite.class,
     IBeforeTest.class, IAfterTest.class,
diff --git a/src/main/java/org/testng/internal/annotations/Converter.java b/src/main/java/org/testng/internal/annotations/Converter.java
index ee98c15..206bd6b 100755
--- a/src/main/java/org/testng/internal/annotations/Converter.java
+++ b/src/main/java/org/testng/internal/annotations/Converter.java
@@ -26,7 +26,7 @@
   public static int getInt(String tagValue, int def) {
     int result = def;
     if (tagValue != null) {
-      result = new Integer(tagValue);
+      result = Integer.parseInt(tagValue);
     }
     return result;
   }
@@ -42,7 +42,7 @@
   public static long getLong(String tagValue, long def) {
     long result = def;
     if (tagValue != null) {
-      result = new Long(tagValue);
+      result = Long.parseLong(tagValue);
     }
     return result;
   }
diff --git a/src/main/java/org/testng/remote/strprotocol/BaseMessageSender.java b/src/main/java/org/testng/remote/strprotocol/BaseMessageSender.java
index d1bbea3..2a86bff 100644
--- a/src/main/java/org/testng/remote/strprotocol/BaseMessageSender.java
+++ b/src/main/java/org/testng/remote/strprotocol/BaseMessageSender.java
@@ -24,7 +24,7 @@
   protected Socket m_clientSocket;
   private String m_host;
   private int m_port;
-  protected Object m_ackLock = new Object();
+  protected final Object m_ackLock = new Object();
 
   private boolean m_requestStopReceiver;
   /** Outgoing message stream. */
diff --git a/src/main/java/org/testng/remote/strprotocol/GenericMessage.java b/src/main/java/org/testng/remote/strprotocol/GenericMessage.java
index 8c23ea0..db30e6c 100755
--- a/src/main/java/org/testng/remote/strprotocol/GenericMessage.java
+++ b/src/main/java/org/testng/remote/strprotocol/GenericMessage.java
@@ -37,25 +37,6 @@
     m_testCount = testCount;
   }
 
-//  public GenericMessage(final int type, Map props) {
-//    m_messageType = type;
-//    m_properties = props;
-//  }
-
-//  public GenericMessage addProperty(final String propName, final Object propValue) {
-//    m_properties.put(propName, propValue);
-//
-//    return this;
-//  }
-
-  public GenericMessage addProperty(final String propName, final int propValue) {
-    return addProperty(propName, propValue);
-  }
-
-//  public String getProperty(final String propName) {
-//    return (String) m_properties.get(propName);
-//  }
-
   @Override
   public String getMessageAsString() {
     StringBuffer buf = new StringBuffer();
@@ -64,17 +45,6 @@
     buf.append(MessageHelper.DELIMITER).append("testCount").append(getTestCount())
         .append(MessageHelper.DELIMITER).append("suiteCount").append(getSuiteCount());
 
-//        for(Iterator it = m_properties.entrySet().iterator(); it.hasNext(); ) {
-//          Map.Entry entry = (Map.Entry) it.next();
-//
-//          buf.append(MessageHelper.DELIMITER)
-//              .append(entry.getKey())
-//              .append(MessageHelper.DELIMITER)
-//              .append(entry.getValue())
-//              ;
-//        }
-
-
     return buf.toString();
   }
 
diff --git a/src/main/java/org/testng/reporters/EmailableReporter.java b/src/main/java/org/testng/reporters/EmailableReporter.java
index 308bee7..8b1b630 100755
--- a/src/main/java/org/testng/reporters/EmailableReporter.java
+++ b/src/main/java/org/testng/reporters/EmailableReporter.java
@@ -488,7 +488,7 @@
 
   // ~ Inner Classes --------------------------------------------------------
   /** Arranges methods by classname and method name */
-  private class TestSorter implements Comparator<IInvokedMethod> {
+  private static class TestSorter implements Comparator<IInvokedMethod> {
     // ~ Methods -------------------------------------------------------------
 
     /** Arranges methods by classname and method name */
diff --git a/src/main/java/org/testng/reporters/FileStringBuffer.java b/src/main/java/org/testng/reporters/FileStringBuffer.java
index af2e98b..6c980ca 100644
--- a/src/main/java/org/testng/reporters/FileStringBuffer.java
+++ b/src/main/java/org/testng/reporters/FileStringBuffer.java
@@ -116,12 +116,9 @@
       }
     }
 
-    FileWriter fw;
-    try {
-      p("Size " + m_sb.length() + ", flushing to " + m_file);
-      fw = new FileWriter(m_file, true /* append */);
+    p("Size " + m_sb.length() + ", flushing to " + m_file);
+    try (FileWriter fw = new FileWriter(m_file, true /* append */)) {
       fw.append(m_sb);
-      fw.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
@@ -152,9 +149,9 @@
 
   private static void save(File expected, String s) throws IOException {
     expected.delete();
-    FileWriter expectedWriter = new FileWriter(expected);
-    expectedWriter.append(s);
-    expectedWriter.close();
+    try (FileWriter expectedWriter = new FileWriter(expected)) {
+      expectedWriter.append(s);
+    }
   }
 
   public static void main(String[] args) throws IOException {
diff --git a/src/main/java/org/testng/reporters/JUnitReportReporter.java b/src/main/java/org/testng/reporters/JUnitReportReporter.java
index 95c3b19..7de5f91 100644
--- a/src/main/java/org/testng/reporters/JUnitReportReporter.java
+++ b/src/main/java/org/testng/reporters/JUnitReportReporter.java
@@ -20,6 +20,7 @@
 import java.net.UnknownHostException;
 import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
+import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
@@ -81,12 +82,14 @@
 //      afters.put(es.getKey(), es.getValue().iterator());
 //    }
 
+    SimpleDateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm:ss");
     for (Map.Entry<Class<?>, Set<ITestResult>> entry : results.entrySet()) {
       Class<?> cls = entry.getKey();
       Properties p1 = new Properties();
       p1.setProperty("name", cls.getName());
       Date timeStamp = Calendar.getInstance().getTime();
-      p1.setProperty(XMLConstants.ATTR_TIMESTAMP, timeStamp.toGMTString());
+      String timestampStr = df.format(timeStamp) + " GMT";
+      p1.setProperty(XMLConstants.ATTR_TIMESTAMP, timestampStr);
 
       List<TestTag> testCases = Lists.newArrayList();
       int failures = 0;
@@ -244,7 +247,7 @@
     return result;
   }
 
-  class TestTag {
+  static class TestTag {
     public Properties properties;
     public String message;
     public String type;
diff --git a/src/main/java/org/testng/reporters/XMLReporter.java b/src/main/java/org/testng/reporters/XMLReporter.java
index b532514..0afd2c0 100755
--- a/src/main/java/org/testng/reporters/XMLReporter.java
+++ b/src/main/java/org/testng/reporters/XMLReporter.java
@@ -177,7 +177,7 @@
    */
   public static void addDurationAttributes(XMLReporterConfig config, Properties attributes,
       Date minStartDate, Date maxEndDate) {
-    SimpleDateFormat format = new SimpleDateFormat(XMLReporterConfig.getTimestampFormat());
+    SimpleDateFormat format = new SimpleDateFormat(config.getTimestampFormat());
     TimeZone utc = TimeZone.getTimeZone("UTC");
     format.setTimeZone(utc);
     String startTime = format.format(minStartDate);
diff --git a/src/main/java/org/testng/reporters/XMLReporterConfig.java b/src/main/java/org/testng/reporters/XMLReporterConfig.java
index f48186c..af25cfe 100755
--- a/src/main/java/org/testng/reporters/XMLReporterConfig.java
+++ b/src/main/java/org/testng/reporters/XMLReporterConfig.java
@@ -105,16 +105,6 @@
   // intricacies of ISO-8601.
   static final String FMT_DEFAULT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
 
-  public static long convertDate(String date) {
-    SimpleDateFormat format = new SimpleDateFormat(getTimestampFormat());
-    try {
-      long result = format.parse(date).getTime();
-      return result;
-    } catch (ParseException e) {
-      return -1;
-    }
-  }
-
   /**
    * Indicates the way that the file fragmentation should be performed. Set this
    * property to one of the FF_LEVEL_* values for the desired output structure
@@ -169,7 +159,7 @@
   /**
    * The output format for timestamps
    */
-  private static String timestampFormat = FMT_DEFAULT;
+  private String timestampFormat = FMT_DEFAULT;
 
   public int getFileFragmentationLevel() {
     return fileFragmentationLevel;
@@ -211,7 +201,7 @@
     this.splitClassAndPackageNames = splitClassAndPackageNames;
   }
 
-  public static String getTimestampFormat() {
+  public String getTimestampFormat() {
     return timestampFormat;
   }
 
diff --git a/src/main/java/org/testng/reporters/jq/ResultsByClass.java b/src/main/java/org/testng/reporters/jq/ResultsByClass.java
index 6864b05..de242fe 100644
--- a/src/main/java/org/testng/reporters/jq/ResultsByClass.java
+++ b/src/main/java/org/testng/reporters/jq/ResultsByClass.java
@@ -9,7 +9,7 @@
 import java.util.List;
 
 public class ResultsByClass {
-  public static Comparator<ITestResult> METHOD_NAME_COMPARATOR =
+  public static final Comparator<ITestResult> METHOD_NAME_COMPARATOR =
       new Comparator<ITestResult>() {
 
     @Override
diff --git a/src/main/java/org/testng/xml/TestNGContentHandler.java b/src/main/java/org/testng/xml/TestNGContentHandler.java
index 004e455..a4bf2fb 100755
--- a/src/main/java/org/testng/xml/TestNGContentHandler.java
+++ b/src/main/java/org/testng/xml/TestNGContentHandler.java
@@ -150,7 +150,7 @@
 
       String verbose = attributes.getValue("verbose");
       if (null != verbose) {
-        m_currentSuite.setVerbose(new Integer(verbose));
+        m_currentSuite.setVerbose(Integer.parseInt(verbose));
       }
       String jUnit = attributes.getValue("junit");
       if (null != jUnit) {
@@ -433,7 +433,7 @@
       if (priority == null) {
         priority = "0";
       }
-      m_currentSelector.setPriority(new Integer(priority));
+      m_currentSelector.setPriority(Integer.parseInt(priority));
     }
     else {
       // do nothing
@@ -608,7 +608,7 @@
     }
   }
 
-  private class Include {
+  private static class Include {
     String name;
     String invocationNumbers;
     String description;
diff --git a/src/main/java/org/testng/xml/XmlClass.java b/src/main/java/org/testng/xml/XmlClass.java
index c588965..e1e062f 100755
--- a/src/main/java/org/testng/xml/XmlClass.java
+++ b/src/main/java/org/testng/xml/XmlClass.java
@@ -288,8 +288,8 @@
     for (Map.Entry<String, String> parameter : parameters.entrySet()) {
       result.put(parameter.getKey(), parameter.getValue());
     }
-    for (String key : m_parameters.keySet()) {
-      result.put(key, m_parameters.get(key));
+    for (Map.Entry<String, String> entry  : m_parameters.entrySet()) {
+      result.put(entry.getKey(), entry.getValue());
     }
     return result;
   }
diff --git a/src/main/java/org/testng/xml/XmlSuite.java b/src/main/java/org/testng/xml/XmlSuite.java
index fe3b4f7..678a926 100755
--- a/src/main/java/org/testng/xml/XmlSuite.java
+++ b/src/main/java/org/testng/xml/XmlSuite.java
@@ -61,32 +61,32 @@
   private String m_name = DEFAULT_SUITE_NAME;
 
   /** The suite verbose flag. (0 to 10)*/
-  public static Integer DEFAULT_VERBOSE = 1;
+  public static final Integer DEFAULT_VERBOSE = 1;
   private Integer m_verbose = null;
 
-  public static ParallelMode DEFAULT_PARALLEL = ParallelMode.FALSE;
+  public static final ParallelMode DEFAULT_PARALLEL = ParallelMode.FALSE;
   private ParallelMode m_parallel = DEFAULT_PARALLEL;
 
   private String m_parentModule = "";
   private String m_guiceStage = "";
 
   /** Whether to SKIP or CONTINUE to re-attempt failed configuration methods. */
-  public static String DEFAULT_CONFIG_FAILURE_POLICY = SKIP;
+  public static final String DEFAULT_CONFIG_FAILURE_POLICY = SKIP;
   private String m_configFailurePolicy = DEFAULT_CONFIG_FAILURE_POLICY;
 
   /** JUnit compatibility flag. */
-  public static Boolean DEFAULT_JUNIT = Boolean.FALSE;
+  public static final Boolean DEFAULT_JUNIT = Boolean.FALSE;
   private Boolean m_isJUnit = DEFAULT_JUNIT;
 
   /** mixed mode flag. */
-  public static Boolean DEFAULT_MIXED = Boolean.FALSE;
+  public static final Boolean DEFAULT_MIXED = Boolean.FALSE;
   private Boolean m_isMixed = DEFAULT_MIXED;
 
-  public static Boolean DEFAULT_SKIP_FAILED_INVOCATION_COUNTS = Boolean.FALSE;
+  public static final Boolean DEFAULT_SKIP_FAILED_INVOCATION_COUNTS = Boolean.FALSE;
   private Boolean m_skipFailedInvocationCounts = DEFAULT_SKIP_FAILED_INVOCATION_COUNTS;
 
   /** The thread count. */
-  public static Integer DEFAULT_THREAD_COUNT = 5;
+  public static final Integer DEFAULT_THREAD_COUNT = 5;
   private int m_threadCount = DEFAULT_THREAD_COUNT;
 
   /** Thread count for the data provider pool */
@@ -97,7 +97,7 @@
   public static final Boolean DEFAULT_GROUP_BY_INSTANCES = false;
   private Boolean m_groupByInstances = DEFAULT_GROUP_BY_INSTANCES;
 
-  public static Boolean DEFAULT_ALLOW_RETURN_VALUES = Boolean.FALSE;
+  public static final Boolean DEFAULT_ALLOW_RETURN_VALUES = Boolean.FALSE;
   private Boolean m_allowReturnValues = DEFAULT_ALLOW_RETURN_VALUES;
 
   /** The packages containing test classes. */
@@ -135,7 +135,7 @@
 
   private static final long serialVersionUID = 4999962288272750226L;
 
-  public static String DEFAULT_PRESERVE_ORDER = "true";
+  public static final String DEFAULT_PRESERVE_ORDER = "true";
   private String m_preserveOrder = DEFAULT_PRESERVE_ORDER;
 
   private List<String> m_includedGroups = Lists.newArrayList();
@@ -677,7 +677,7 @@
   public long getTimeOut(long def) {
     long result = def;
     if (m_timeOut != null) {
-        result = new Long(m_timeOut);
+        result = Long.parseLong(m_timeOut);
     }
     
     return result;
diff --git a/src/main/java/org/testng/xml/XmlTest.java b/src/main/java/org/testng/xml/XmlTest.java
index f5a4b91..7ac0740 100755
--- a/src/main/java/org/testng/xml/XmlTest.java
+++ b/src/main/java/org/testng/xml/XmlTest.java
@@ -23,7 +23,7 @@
 public class XmlTest implements Serializable, Cloneable {
   private static final long serialVersionUID = 6533504325942417606L;
 
-  public static int DEFAULT_TIMEOUT_MS = Integer.MAX_VALUE;
+  public static final int DEFAULT_TIMEOUT_MS = Integer.MAX_VALUE;
 
   private XmlSuite m_suite;
   private String m_name;
@@ -360,8 +360,8 @@
     for (Map.Entry<String, String> parameter : parameters.entrySet()) {
       result.put(parameter.getKey(), parameter.getValue());
     }
-    for (String key : m_parameters.keySet()) {
-      result.put(key, m_parameters.get(key));
+    for (Map.Entry<String, String> entry  : m_parameters.entrySet()) {
+      result.put(entry.getKey(), entry.getValue());
     }
     return result;
   }
@@ -420,7 +420,7 @@
   public long getTimeOut(long def) {
     long result = def;
     if (getTimeOut() != null) {
-        result = new Long(getTimeOut());
+        result = Long.parseLong(getTimeOut());
     }
 
     return result;
@@ -506,13 +506,16 @@
       xsb.push("groups");
 
       // define
-      for (String metaGroupName: m_metaGroups.keySet()) {
+      for (Map.Entry<String, List<String>> entry: m_metaGroups.entrySet()) {
+        String metaGroupName = entry.getKey();
+        List<String> groupNames = entry.getValue();
+
         Properties metaGroupProp= new Properties();
         metaGroupProp.setProperty("name",  metaGroupName);
 
         xsb.push("define", metaGroupProp);
 
-        for (String groupName: m_metaGroups.get(metaGroupName)) {
+        for (String groupName: groupNames) {
           Properties includeProps = new Properties();
           includeProps.setProperty("name", groupName);
 
@@ -582,21 +585,18 @@
   @Override
   public String toString() {
 //    return toXml("");
-    StringBuffer result = new StringBuffer("[Test: \"" + m_name + "\"")
-      .append(" verbose:" + m_verbose);
+    StringBuilder result = new StringBuilder("[Test: \"" + m_name + "\"").append(" verbose:").append(m_verbose);
 
     result.append("[parameters:");
-    for (String k : m_parameters.keySet()) {
-      String v = m_parameters.get(k);
-      result.append(k + "=>" + v);
+    for (Map.Entry<String, String> entry : m_parameters.entrySet()) {
+      result.append(entry.getKey()).append("=>").append(entry.getValue());
     }
 
     result.append("]");
     result.append("[metagroups:");
-    for (String g : m_metaGroups.keySet()) {
-      List<String> mg = m_metaGroups.get(g);
-      result.append(g).append("=");
-      for (String n : mg) {
+    for (Map.Entry<String, List<String>> entry : m_metaGroups.entrySet()) {
+      result.append(entry.getKey()).append("=");
+      for (String n : entry.getValue()) {
         result.append(n).append(",");
       }
     }