diff --git a/maven-plugin-testing-tools/src/main/java/org/apache/maven/shared/test/plugin/BuildTool.java b/maven-plugin-testing-tools/src/main/java/org/apache/maven/shared/test/plugin/BuildTool.java
index b41c83d..3539278 100644
--- a/maven-plugin-testing-tools/src/main/java/org/apache/maven/shared/test/plugin/BuildTool.java
+++ b/maven-plugin-testing-tools/src/main/java/org/apache/maven/shared/test/plugin/BuildTool.java
@@ -45,7 +45,7 @@
  * @author jdcasey
  * @version $Id$
  */
-@Component(role=BuildTool.class)
+@Component( role = BuildTool.class )
 public class BuildTool
     implements Initializable, Disposable
 {
@@ -68,7 +68,7 @@
      *   resulting from the Maven invocation.
      * @throws TestToolsException if any
      */
-    public InvocationResult executeMaven( File pom, Properties properties, List goals, File buildLogFile )
+    public InvocationResult executeMaven( File pom, Properties properties, List<String> goals, File buildLogFile )
         throws TestToolsException
     {
         InvocationRequest request = createBasicInvocationRequest( pom, properties, goals, buildLogFile );
@@ -132,7 +132,7 @@
     }
 
     /**
-     * If we're logging output to a logfile using standard output handlers, make sure these are
+     * If we're logging output to a log file using standard output handlers, make sure these are
      * closed.
      *
      * @param request
@@ -169,7 +169,7 @@
      * @return The standardized InvocationRequest for the test build, ready for any necessary
      *   customizations.
      */
-    public InvocationRequest createBasicInvocationRequest( File pom, Properties properties, List goals,
+    public InvocationRequest createBasicInvocationRequest( File pom, Properties properties, List<String> goals,
                                                            File buildLogFile )
     {
         InvocationRequest request = new DefaultInvocationRequest();
diff --git a/maven-plugin-testing-tools/src/main/java/org/apache/maven/shared/test/plugin/ProjectTool.java b/maven-plugin-testing-tools/src/main/java/org/apache/maven/shared/test/plugin/ProjectTool.java
index d51076b..7d3697e 100644
--- a/maven-plugin-testing-tools/src/main/java/org/apache/maven/shared/test/plugin/ProjectTool.java
+++ b/maven-plugin-testing-tools/src/main/java/org/apache/maven/shared/test/plugin/ProjectTool.java
@@ -225,7 +225,7 @@
 
         Properties properties = new Properties();
 
-        List goals = new ArrayList();
+        List<String> goals = new ArrayList<String>();
         goals.add( "package" );
 
         File buildLog = logFile == null ? pomInfo.getBuildLogFile() : logFile;
@@ -390,12 +390,10 @@
 
             if ( skipUnitTests )
             {
-                List plugins = build.getPlugins();
+                List<Plugin> plugins = build.getPlugins();
                 Plugin plugin = null;
-                for ( Iterator iter = plugins.iterator(); iter.hasNext(); )
+                for ( Plugin plug : plugins )
                 {
-                    Plugin plug = (Plugin) iter.next();
-
                     if ( "maven-surefire-plugin".equals( plug.getArtifactId() ) )
                     {
                         plugin = plug;
diff --git a/maven-plugin-testing-tools/src/test/java/org/apache/maven/shared/test/plugin/ProjectToolTest.java b/maven-plugin-testing-tools/src/test/java/org/apache/maven/shared/test/plugin/ProjectToolTest.java
index 1dc6728..b1bbbf0 100644
--- a/maven-plugin-testing-tools/src/test/java/org/apache/maven/shared/test/plugin/ProjectToolTest.java
+++ b/maven-plugin-testing-tools/src/test/java/org/apache/maven/shared/test/plugin/ProjectToolTest.java
@@ -96,14 +96,12 @@
         assertEquals( "maven-plugin", artifact.getType() );
         assertTrue( "Missing " + artifact.getFile(), artifact.getFile().exists() );
 
-        Collection metadata = artifact.getMetadataList();
+        Collection<ArtifactMetadata> metadata = artifact.getMetadataList();
 
         boolean foundPomMetadata = false;
 
-        for ( Iterator it = metadata.iterator(); it.hasNext(); )
+        for ( ArtifactMetadata metadataItem : metadata )
         {
-            ArtifactMetadata metadataItem = (ArtifactMetadata) it.next();
-
             if ( metadataItem instanceof ProjectArtifactMetadata )
             {
                 foundPomMetadata = true;
