diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/TestProgressObjectImpl.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/TestProgressObjectImpl.java
index eac4b10..20178cf 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/TestProgressObjectImpl.java
+++ b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/TestProgressObjectImpl.java
@@ -36,7 +36,7 @@
 /**
  *Makes sure that the ProgressObjectImpl class functions correctly.
  *<p>
- *In particular, bug 4977764 reported that the ProgressObjectImpl class was susceptible to 
+ *In particular, bug 4977764 reported that the ProgressObjectImpl class was susceptible to
  *concurrent update failures in the vector that holds registered progress listeners.  The
  *fireProgressEvent method worked with the vector of listeners itself rather than a clone of the vector.
  *One of the listeners unregistered itself from the progress object, so when the iterator tried to
@@ -48,22 +48,22 @@
 public class TestProgressObjectImpl {
 
     private static final String here = "devtests/deployment/jsr88/misc";
-    
+
     /**
      *Provides a concrete implementation of the progress object for testing.  Note that the behavior being
      *tested is actually that of the superclass ProgressObjectImpl.
      */
     public class MyProgressObjectImpl extends ProgressObjectImpl {
-       
+
         public MyProgressObjectImpl(TargetImpl target) {
             super(target);
         }
-        
+
         /**
          *Required by the abstract class definition but not used during testing.
          */
         public void run() {}
-        
+
         /**
          *Stands in as an operation that fires an event to registered listeners.
          */
@@ -76,13 +76,13 @@
             fireProgressEvent(StateType.COMPLETED, "done");
         }
     }
-    
+
     /**
      *Adds a new listener during the event handling.
      */
     public class MeddlingListenerAdder implements ProgressListener {
-        
-    
+
+
         public void handleProgressEvent(javax.enterprise.deploy.spi.status.ProgressEvent progressEvent) {
             /*
              *Meddle in the listener list by adding a new listener to the list.  This should trigger the error
@@ -90,15 +90,15 @@
              */
             TestProgressObjectImpl.this.theProgressObjectImpl.addProgressListener(new TestProgressObjectImpl.MeddlingListenerRemover());
         }
-        
+
     }
-    
+
     /**
      *Removes itself as a listener during the event handling.
      */
     public class MeddlingListenerRemover implements ProgressListener {
-        
-    
+
+
         public void handleProgressEvent(javax.enterprise.deploy.spi.status.ProgressEvent progressEvent) {
             /*
              *Meddle in the listener list by removing itself from the list.  This should trigger the error
@@ -106,16 +106,16 @@
              */
             TestProgressObjectImpl.this.theProgressObjectImpl.removeProgressListener(this);
         }
-        
+
     }
-    
+
     /* Local progress object implementation to be tested. */
     private MyProgressObjectImpl theProgressObjectImpl;
-        
+
     /** Creates a new instance of TestProgressObjectImpl */
     public TestProgressObjectImpl() {
     }
-    
+
     /**
      * @param args the command line arguments
      */
@@ -129,13 +129,13 @@
             test.fail();
         }
     }
-    
+
     public void run(String[] args) {
         addNewListenerDuringEventHandling();
     }
 
     /**
-     * Tamper with the listener list by adding a new listener during event handling.  
+     * Tamper with the listener list by adding a new listener during event handling.
      */
     private void addNewListenerDuringEventHandling() {
         /*
@@ -146,17 +146,17 @@
         theProgressObjectImpl = new MyProgressObjectImpl(target);
         TestProgressObjectImpl.MeddlingListenerAdder meddlingListener1 = new TestProgressObjectImpl.MeddlingListenerAdder();
         TestProgressObjectImpl.MeddlingListenerAdder meddlingListener2 = new TestProgressObjectImpl.MeddlingListenerAdder();
-        
+
         theProgressObjectImpl.addProgressListener(meddlingListener1);
         theProgressObjectImpl.addProgressListener(meddlingListener2);
-        
+
         /*
          *Fire an event that will change the listener set.
          */
         theProgressObjectImpl.act();
-        
+
     }
-    
+
     private void log(String message) {
         System.out.println("[TestProgressObjectImpl]:: " + message);
     }
