diff --git a/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java b/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java
index 2b62d29..c85e0e0 100644
--- a/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java
+++ b/src/main/java/org/apache/maven/plugin/ant/AntBuildWriter.java
@@ -172,7 +172,7 @@
         if ( project.getBuild().getResources() != null )
         {
             List<Resource> var = project.getBuild().getResources();
-            Resource[] array = (Resource[]) var.toArray(new Resource[var.size()]);
+            Resource[] array = var.toArray(new Resource[var.size()]);
             for ( int i = 0; i < array.length; i++ )
             {
                 addProperty( properties, "maven.build.resourceDir." + i, AntBuildWriterUtil.toRelative( project.getBasedir(),
@@ -199,7 +199,7 @@
         if ( project.getBuild().getTestResources() != null )
         {
             List<Resource> var = project.getBuild().getTestResources();
-            Resource[] array = (Resource[]) var.toArray(new Resource[var.size()]);
+            Resource[] array = var.toArray(new Resource[var.size()]);
             for ( int i = 0; i < array.length; i++ )
             {
                 addProperty( properties, "maven.build.testResourceDir." + i, AntBuildWriterUtil
@@ -476,7 +476,7 @@
 
         if ( project.getBuild().getResources() != null )
         {
-            Resource[] array = (Resource[]) project.getBuild().getResources().toArray( new Resource[0] );
+            Resource[] array = project.getBuild().getResources().toArray( new Resource[0] );
             for ( int i = 0; i < array.length; i++ )
             {
                 writer.startElement( "property" );
@@ -507,7 +507,7 @@
 
         if ( project.getBuild().getTestResources() != null )
         {
-            Resource[] array = (Resource[]) project.getBuild().getTestResources().toArray( new Resource[0] );
+            Resource[] array = project.getBuild().getTestResources().toArray( new Resource[0] );
             for ( int i = 0; i < array.length; i++ )
             {
                 writer.startElement( "property" );
@@ -635,8 +635,7 @@
         }
 
         for (Profile profile : project.getOriginalModel().getProfiles()) {
-            for (Iterator it = profile.getDependencies().iterator(); it.hasNext(); ) {
-                Dependency dependency = (Dependency) it.next();
+            for (Dependency dependency : profile.getDependencies()) {
                 if (managementKey.equals(dependency.getManagementKey())) {
                     return dependency.getSystemPath();
                 }
@@ -1308,8 +1307,8 @@
                     writer.endElement(); // mkdir
                 }
 
-                for (Iterator j = project.getRepositories().iterator(); j.hasNext(); ) {
-                    Repository repository = (Repository) j.next();
+                for (Object o1 : project.getRepositories()) {
+                    Repository repository = (Repository) o1;
                     String url = repository.getUrl();
 
                     String localDir = getProjectRepoDirectory(url, basedir);
diff --git a/src/main/java/org/apache/maven/plugin/ant/AntBuildWriterUtil.java b/src/main/java/org/apache/maven/plugin/ant/AntBuildWriterUtil.java
index de17e0c..2e51d05 100644
--- a/src/main/java/org/apache/maven/plugin/ant/AntBuildWriterUtil.java
+++ b/src/main/java/org/apache/maven/plugin/ant/AntBuildWriterUtil.java
@@ -26,7 +26,6 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
