diff --git a/src/test/java/org/apache/maven/plugin/rar/RarMojoTest.java b/src/test/java/org/apache/maven/plugin/rar/RarMojoTest.java
index 742e77d..fbf36c3 100644
--- a/src/test/java/org/apache/maven/plugin/rar/RarMojoTest.java
+++ b/src/test/java/org/apache/maven/plugin/rar/RarMojoTest.java
@@ -202,6 +202,8 @@
         assertTrue( entries.hasMoreElements() );
 
         assertEquals( 0, getSizeOfExpectedFiles( entries, expectedFiles ) );
+
+        rar.close();
     }
 
     public void testBasicRarWithManifest()
@@ -275,9 +277,11 @@
         assertTrue( entries.hasMoreElements() );
 
         assertEquals( 0, getSizeOfExpectedFiles( entries, expectedFiles ) );
+        
+        rar.close();
     }
 
-    private int getSizeOfExpectedFiles( Enumeration<? extends ZipEntry> entries, List expectedFiles )
+    private int getSizeOfExpectedFiles( Enumeration<? extends ZipEntry> entries, List<String> expectedFiles )
     {
         while ( entries.hasMoreElements() )
         {
@@ -296,7 +300,7 @@
         return expectedFiles.size();
     }
 
-    private int getSizeOfExpectedFiles( List fileList, List expectedFiles )
+    private int getSizeOfExpectedFiles( List<String> fileList, List<String> expectedFiles )
     {
         for (Object aFileList : fileList) {
             String fileName = (String) aFileList;
diff --git a/src/test/java/org/apache/maven/plugin/rar/stubs/RarArtifactStub.java b/src/test/java/org/apache/maven/plugin/rar/stubs/RarArtifactStub.java
index 8ac5458..c9d358a 100644
--- a/src/test/java/org/apache/maven/plugin/rar/stubs/RarArtifactStub.java
+++ b/src/test/java/org/apache/maven/plugin/rar/stubs/RarArtifactStub.java
@@ -43,8 +43,6 @@
 
     private File file;
 
-    private ArtifactHandler artifactHandler;
-
     public String getArtifactId()
     {
         return artifactId;
diff --git a/src/test/java/org/apache/maven/plugin/rar/stubs/RarMavenProjectStub.java b/src/test/java/org/apache/maven/plugin/rar/stubs/RarMavenProjectStub.java
index f5eb9d3..db66f2c 100644
--- a/src/test/java/org/apache/maven/plugin/rar/stubs/RarMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugin/rar/stubs/RarMavenProjectStub.java
@@ -40,7 +40,7 @@
 public class RarMavenProjectStub
     extends MavenProject
 {
-    private List attachedArtifacts;
+    private List<Artifact> attachedArtifacts;
 
     public RarMavenProjectStub()
     {
@@ -120,9 +120,9 @@
         return artifact;
     }
 
-    public Set getArtifacts()
+    public Set<Artifact> getArtifacts()
     {
-        Set artifacts = new HashSet();
+        Set<Artifact> artifacts = new HashSet<Artifact>();
 
         artifacts.add( createArtifact( "org.apache.maven.test", "maven-artifact01", "1.0-SNAPSHOT", false ) );
         artifacts.add( createArtifact( "org.apache.maven.test", "maven-artifact02", "1.0-SNAPSHOT", false ) );
@@ -130,11 +130,11 @@
         return artifacts;
     }
 
-    public List getAttachedArtifacts()
+    public List<Artifact> getAttachedArtifacts()
     {
         if ( attachedArtifacts == null )
         {
-            attachedArtifacts = new ArrayList();
+            attachedArtifacts = new ArrayList<Artifact>();
         }
         return attachedArtifacts;
     }
