diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/build.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/build.xml
index ec74550..974f667 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/build.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/build.xml
@@ -47,11 +47,11 @@
     </target>
 
     <target name="usage">
-	<echo>
-		Usage:
-			ant all (Executes all the ejb-sfsb tests)
-			ant passivateactivate (Executes the ejb-sfsb-passivateactivate test)
-			ant cacheNPE (Executes the ejb-sfsb-cacheNPE test)
-	</echo>
+    <echo>
+        Usage:
+            ant all (Executes all the ejb-sfsb tests)
+            ant passivateactivate (Executes the ejb-sfsb-passivateactivate test)
+            ant cacheNPE (Executes the ejb-sfsb-cacheNPE test)
+    </echo>
     </target>
 </project>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/build.properties b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/build.properties
index a8845e4..6cad404 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/build.properties
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/build.properties
@@ -15,21 +15,21 @@
     SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 
 -->
- 
+
 
 <property name="module" value="ejb-sfsb-cacheNPE"/>
-<property name="appname" value="${module}"/>         
+<property name="appname" value="${module}"/>        \u0020
 <property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client" 
-	value="Client"/>
+<property name="test.client"\u0020
+    value="Client"/>
 <property name="application.xml" value="descriptor/application.xml"/>
 <property name="sun-application.xml" value="descriptor/sun-application.xml"/>
 <property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
 <property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
-<property name="application-client.xml" 
-	value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml" 
-	value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>         
+<property name="application-client.xml"\u0020
+    value="descriptor/application-client.xml"/>
+<property name="sun-application-client.xml"\u0020
+    value="descriptor/sun-application-client.xml"/>
+<property name="appclientjar.files" value="${build.classes.dir}"/>        \u0020
 <property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
 <property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/build.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/build.xml
index 971f9c6..5fd9a47 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/build.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/build.xml
@@ -36,7 +36,7 @@
     <target name="clean" depends="init-common">
       <antcall  target="clean-common"/>
     </target>
- 
+
     <target name="compile" depends="clean">
         <antcall target="compile-common">
             <param name="src" value="ejb"/>
@@ -48,13 +48,13 @@
 
     <target name="build" depends="compile">
         <antcall target="build-ear-common">
-            <param name="ejbjar.classes" 
+            <param name="ejbjar.classes"
               value="**/**.class" />
-            <param name="appclientjar.classes" 
+            <param name="appclientjar.classes"
               value="**/*Client*.class, **/*SFSB*.class" />
         </antcall>
-    </target> 
-    
+    </target>
+
     <target name="deploy" depends="init-common">
 <!--
         <antcall target="execute-ejb-sql-common">
@@ -71,7 +71,7 @@
         </antcall>
     -->
     </target>
-    
+
     <target name="delete-resources" depends="init-common">
     <!--
         <antcall target="asadmin-batch-common">
@@ -89,18 +89,18 @@
         </antcall>
         <antcall target="runclient-common"/>
     </target>
- 
- 
+
+
     <target name="undeploy" depends="init-common">
         <antcall target="undeploy-common"/>
         <antcall target="execute-ejb-sql-common">
             <param name="sql.file" value="sql/drop_pointbase.sql"/>
         </antcall>
-    </target>   
+    </target>
 
     <target name="usage">
         <antcall target="usage-common"/>
-        <echo>         
+        <echo>
           ant create-resources Create all destinations and connection factories
           ant delete-resources Delete all destinations and connection factories
         </echo>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/client/Client.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/client/Client.java
index 7cf5e8e..5b6948d 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/client/Client.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/client/Client.java
@@ -34,8 +34,8 @@
     public static String kTestNotRun    = "TEST NOT RUN";
     public static String kTestPassed    = "TEST PASSED";
     public static String kTestFailed    = "TEST FAILED";
-    
-    private static SimpleReporterAdapter stat = 
+
+    private static SimpleReporterAdapter stat =
         new SimpleReporterAdapter("appserv-tests");
 
     private ArrayList sfsbList = new ArrayList();
@@ -50,13 +50,13 @@
         client.doTest();
         System.out.println("[cacheNPEClient] DONE doTest()...");
         stat.printSummary("cacheNPE");
-    }  
-    
+    }
+
     public Client (String[] args) {
     }
-    
+
     public void doTest() {
-        initSFSBList(0,4);     //create SFSBs 
+        initSFSBList(0,4);     //create SFSBs
 
         for( int j = 0; j < 400; j++) {
             accessSFSB(0,3,5);
@@ -67,13 +67,13 @@
         } catch (Exception ex ) {
             System.out.println ( "Exception caught : " + ex );
             ex.printStackTrace();
-        } 
+        }
 
         removeSFSB(3);
         removeSFSB(2);
         accessSFSB(1,4,5);
 
-        initSFSBList(5,20);     //create SFSBs 
+        initSFSBList(5,20);     //create SFSBs
 
     }
 
@@ -109,7 +109,7 @@
             for (; i < MAXSFSBS; i=i+step) {
                 SFSB sfsb = (SFSB) sfsbList.get(i);
                 String sfsbName = sfsb.getName();
-                
+
                 boolean sessionCtxTest = sfsb.checkSessionContext();
                 boolean initialCtxTest = sfsb.checkInitialContext();
                 boolean entityHomeTest = sfsb.checkEntityHome();
@@ -120,11 +120,11 @@
                 boolean handleTest = sfsb.checkHandle();
                 boolean utTest = sfsb.checkUserTransaction();
 
-                System.out.println("In accessSFSB: for bean -> " + sfsbName 
+                System.out.println("In accessSFSB: for bean -> " + sfsbName
                     + "; " + sessionCtxTest + "; " + initialCtxTest
                     + "; " + entityHomeTest + "; " + entityLocalHomeTest
                     + "; " + entityRemoteTest + "; " + entityLocalTest
-                    + "; " + homeHandleTest + "; " + handleTest 
+                    + "; " + homeHandleTest + "; " + handleTest
                     + "; " + utTest);
 
                 passed = sessionCtxTest && initialCtxTest
@@ -136,7 +136,7 @@
                     break;
                 }
             }
-            
+
 
             if (passed) {
                 stat.addStatus("ejbclient accessSFSBs", stat.PASS);
@@ -159,7 +159,7 @@
             ex.printStackTrace();
             stat.addStatus("ejbclient removeSFSBs", stat.FAIL);
             return;
-        } 
+        }
 
         stat.addStatus("ejbclient removeSFSBs", stat.PASS);
 
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSB.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSB.java
index f9de77c..42a41a4 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSB.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSB.java
@@ -23,35 +23,35 @@
     extends EJBObject
 {
 
-	public String getName()
+    public String getName()
         throws RemoteException;
 
-	public String getMessage()
+    public String getMessage()
         throws RemoteException;
 
     public boolean checkSessionContext()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkInitialContext()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityHome()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityLocalHome()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityRemoteRef()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityLocalRef()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkHomeHandle()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkHandle()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkUserTransaction()
         throws RemoteException;
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSBEJB.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSBEJB.java
index 10ce354..3c21b3f 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSBEJB.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSBEJB.java
@@ -30,7 +30,7 @@
 import java.rmi.RemoteException;
 
 public class SFSBEJB
-    implements SessionBean 
+    implements SessionBean
 {
     private Context envCtx;
     private Context envSubCtx;
@@ -64,7 +64,7 @@
 
             homeHandle = entityHome.getHomeHandle();
             handle = entityRemote.getHandle();
-            
+
             userTransaction1 = sessionCtx.getUserTransaction();
             userTransaction2 = (UserTransaction) new InitialContext().
                 lookup("java:comp/UserTransaction");
@@ -173,7 +173,7 @@
     public boolean checkUserTransaction() {
         boolean status =
             ((userTransaction1 != null) && (userTransaction2 != null));
-        
+
         try {
             if( status ) {
                 userTransaction1.begin();
@@ -205,7 +205,7 @@
             }
             if (ok) {
                 fieldName = "java:";
-                ok = ( (javaCtx != null) && 
+                ok = ( (javaCtx != null) &&
                        javaCtx.getNameInNamespace().equals(fieldName) );
             }
             if (ok) {
@@ -217,7 +217,7 @@
                 fieldName = "java:comp/env";
                 ok = ( (envCtx != null) &&
                        envCtx.getNameInNamespace().equals(fieldName) );
-                
+
             }
             if (ok) {
                 fieldName = "java:comp/env/ejb";
@@ -226,7 +226,7 @@
             }
             if (ok) {
                 fieldName = "env-entry";
-          
+
                 String value1 = (String)
                     initialCtx.lookup("java:comp/env/TagValue");
                 String value2 = (String) envCtx.lookup("TagValue");
@@ -238,9 +238,9 @@
             ex.printStackTrace();
             ok = false;
         }
-        
+
         this.message = (ok) ? null : (fieldName + " not restored properly");
-        
+
         return ok;
     }
 
@@ -268,7 +268,7 @@
     public void ejbRemove() {
         System.out.println ("\n\tIn SFSB.ejbRemove() for name -> " + sfsbName);
         try {
-            entityRemote.remove(); 
+            entityRemote.remove();
         } catch (Exception ex) {
             ex.printStackTrace();
         }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSBHome.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSBHome.java
index 2a457eb..bb3fd4c 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSBHome.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SFSBHome.java
@@ -23,6 +23,6 @@
 public interface SFSBHome
     extends EJBHome
 {
-	public SFSB create(String sfsbName)
+    public SFSB create(String sfsbName)
         throws CreateException, RemoteException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SimpleEntityBean.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SimpleEntityBean.java
index b9a73d0..1251f92 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SimpleEntityBean.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/ejb/SimpleEntityBean.java
@@ -56,8 +56,8 @@
         Connection c = null;
         PreparedStatement ps = null;
         try {
-	        c = ds.getConnection();
-     	    ps = c.prepareStatement(
+            c = ds.getConnection();
+             ps = c.prepareStatement(
                 "INSERT INTO SimpleEntity (keyid, name) VALUES (?,?)");
             ps.setString(1, key);
             ps.setString(2, name);
@@ -68,7 +68,7 @@
             this.name = name;
         } catch (SQLException e)  {
             throw new CreateException("SQL exception " + e);
-        } finally { 
+        } finally {
             try {
                 if (ps != null)
                     ps.close();
@@ -94,10 +94,10 @@
         throws FinderException
     {
         Connection c = null;
-     	PreparedStatement ps = null;
-	    try {
-	        c = ds.getConnection();
-     	    ps = c.prepareStatement(
+         PreparedStatement ps = null;
+        try {
+            c = ds.getConnection();
+             ps = c.prepareStatement(
                 "SELECT keyid from SimpleEntity where keyid = ?");
             ps.setString(1, key);
             ResultSet rs = ps.executeQuery();
@@ -107,7 +107,7 @@
             return key;
         } catch (SQLException e)  {
             throw new FinderException("SQL exception " + e);
-        } finally { 
+        } finally {
             try {
                 if (ps != null)
                     ps.close();
@@ -125,68 +125,68 @@
             ps = c.prepareStatement(
                 "SELECT name from SimpleEntity where keyid = ?");
             ps.setString(1, key);
-	    ResultSet rs = ps.executeQuery();
-	    if (!rs.next())
-	       throw new NoSuchEntityException("No cust for " + key);
-	    this.name = rs.getString(1);
-	} catch (SQLException e)  {
-	    throw new NoSuchEntityException("SQL exception " + e);
-	} finally { 
-	    try {
-		if (ps != null)
-		    ps.close();
-		if (c != null)
-		    c.close();
-	    } catch (Exception e) {}
-	}
+        ResultSet rs = ps.executeQuery();
+        if (!rs.next())
+           throw new NoSuchEntityException("No cust for " + key);
+        this.name = rs.getString(1);
+    } catch (SQLException e)  {
+        throw new NoSuchEntityException("SQL exception " + e);
+    } finally {
+        try {
+        if (ps != null)
+            ps.close();
+        if (c != null)
+            c.close();
+        } catch (Exception e) {}
+    }
     }
 
     public void ejbStore() {
-	Connection c = null;
-     	PreparedStatement ps = null;
-	try {
-	    c = ds.getConnection();
-     	    ps = c.prepareStatement(
-		"UPDATE SimpleEntity SET name = ? WHERE keyid = ?");
-	    ps.setString(1, name);
-	    ps.setString(2, key);
-	    if (ps.executeUpdate() != 1)
-		throw new EJBException("Didnt store ejb");
-	} catch (SQLException e)  {
-	    throw new EJBException("SQL exception " + e);
-	} finally { 
-	    try {
-		if (ps != null)
-		    ps.close();
-		if (c != null)
-		    c.close();
-	    } catch (Exception e) {}
-	}
+    Connection c = null;
+         PreparedStatement ps = null;
+    try {
+        c = ds.getConnection();
+             ps = c.prepareStatement(
+        "UPDATE SimpleEntity SET name = ? WHERE keyid = ?");
+        ps.setString(1, name);
+        ps.setString(2, key);
+        if (ps.executeUpdate() != 1)
+        throw new EJBException("Didnt store ejb");
+    } catch (SQLException e)  {
+        throw new EJBException("SQL exception " + e);
+    } finally {
+        try {
+        if (ps != null)
+            ps.close();
+        if (c != null)
+            c.close();
+        } catch (Exception e) {}
+    }
     }
 
     public void ejbRemove() throws RemoveException {
-	Connection c = null;
-     	PreparedStatement ps = null;
-	try {
+    Connection c = null;
+         PreparedStatement ps = null;
+    try {
             System.out.println("[**SimpleEntityBean**] ejbRemove called for key = " + this.key);
-	    c = ds.getConnection();
-     	    ps = c.prepareStatement(
-		"DELETE FROM SimpleEntity WHERE keyid = ?");
-	    ps.setString(1, name);
-	    if (ps.executeUpdate() != 1)
-		throw new RemoveException("Didnt remove ejb");
-            System.out.println("[**SimpleEntityBean**] ejbRemove for key = " 
+        c = ds.getConnection();
+             ps = c.prepareStatement(
+        "DELETE FROM SimpleEntity WHERE keyid = ?");
+        ps.setString(1, name);
+        if (ps.executeUpdate() != 1)
+        throw new RemoveException("Didnt remove ejb");
+            System.out.println("[**SimpleEntityBean**] ejbRemove for key = "
                 + this.key + " succeeded");
-	} catch (SQLException e)  {
-	    throw new RemoveException("SQL exception " + e);
-	} finally { 
-	    try {
-		if (ps != null)
-		    ps.close();
-		if (c != null)
-		    c.close();
-	    } catch (Exception e) {}
-	}
+    } catch (SQLException e)  {
+        throw new RemoveException("SQL exception " + e);
+    } finally {
+        try {
+        if (ps != null)
+            ps.close();
+        if (c != null)
+            c.close();
+        } catch (Exception e) {}
+    }
     }
 
     public void ejbActivate() {
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/sql/create_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/sql/create_pointbase.sql
index b14c736..74b1686 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/sql/create_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/sql/create_pointbase.sql
@@ -1,7 +1,7 @@
-Drop table SimpleEntity;
-
-CREATE TABLE SimpleEntity (
-    keyid     char(20) not null,
-    name    char(20)
-);
-
+Drop table SimpleEntity;
+
+CREATE TABLE SimpleEntity (
+    keyid     char(20) not null,
+    name    char(20)
+);
+
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/sql/drop_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/sql/drop_pointbase.sql
index 935c4a6..3f21aeb 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/sql/drop_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/cacheNPE/sql/drop_pointbase.sql
@@ -1 +1 @@
-Drop table SimpleEntity;
+Drop table SimpleEntity;
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/build.properties b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/build.properties
index d741a6b..f84594d 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/build.properties
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/build.properties
@@ -15,21 +15,21 @@
     SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 
 -->
- 
+
 
 <property name="module" value="ejb-sfsb-keepstate"/>
-<property name="appname" value="${module}"/>         
+<property name="appname" value="${module}"/>        \u0020
 <property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client" 
-	value="Client"/>
+<property name="test.client"\u0020
+    value="Client"/>
 <property name="application.xml" value="descriptor/application.xml"/>
 <property name="sun-application.xml" value="descriptor/sun-application.xml"/>
 <property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
 <property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
-<property name="application-client.xml" 
-	value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml" 
-	value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>         
+<property name="application-client.xml"\u0020
+    value="descriptor/application-client.xml"/>
+<property name="sun-application-client.xml"\u0020
+    value="descriptor/sun-application-client.xml"/>
+<property name="appclientjar.files" value="${build.classes.dir}"/>        \u0020
 <property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
 <property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/build.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/build.xml
index 4cd7f27..200d3ce 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/build.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/build.xml
@@ -36,7 +36,7 @@
     <target name="clean" depends="init-common">
       <antcall  target="clean-common"/>
     </target>
- 
+
     <target name="compile" depends="clean">
         <antcall target="compile-common">
             <param name="src" value="ejb"/>
@@ -48,13 +48,13 @@
 
     <target name="build" depends="compile">
         <antcall target="build-ear-common">
-            <param name="ejbjar.classes" 
+            <param name="ejbjar.classes"
               value="**/**.class" />
-            <param name="appclientjar.classes" 
+            <param name="appclientjar.classes"
               value="**/*Client*.class, **/*SFSB*.class" />
         </antcall>
-    </target> 
-    
+    </target>
+
     <target name="deploy" depends="init-common">
         <antcall target="execute-ejb-sql-common">
             <param name="sql.file" value="sql/create_pointbase.sql"/>
@@ -69,7 +69,7 @@
         </antcall>
     -->
     </target>
-    
+
     <target name="delete-resources" depends="init-common">
     <!--
         <antcall target="asadmin-batch-common">
@@ -81,17 +81,17 @@
     <target name="run" depends="init-common">
         <antcall target="runclient-common"/>
     </target>
- 
+
     <target name="undeploy" depends="init-common">
         <antcall target="undeploy-common"/>
            <antcall target="execute-ejb-sql-common">
             <param name="sql.file" value="sql/drop_pointbase.sql"/>
         </antcall>
-    </target>   
+    </target>
 
     <target name="usage">
         <antcall target="usage-common"/>
-        <echo>         
+        <echo>
           ant create-resources Create all destinations and connection factories
           ant delete-resources Delete all destinations and connection factories
         </echo>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/client/Client.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/client/Client.java
index 02d4cec..0e02d51 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/client/Client.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/client/Client.java
@@ -34,8 +34,8 @@
     public static String kTestNotRun    = "TEST NOT RUN";
     public static String kTestPassed    = "TEST PASSED";
     public static String kTestFailed    = "TEST FAILED";
-    
-    private static SimpleReporterAdapter stat = 
+
+    private static SimpleReporterAdapter stat =
         new SimpleReporterAdapter("appserv-tests");
 
     private static final int    MAX_SFSBS = 40;
@@ -53,23 +53,23 @@
         client.doTest();
         System.out.println("[keepstateClient] DONE doTest()...");
         stat.printSummary("keepstate");
-    }  
-    
+    }
+
     public Client (String[] args) {
     }
-    
+
     public void doTest() {
-        initSFSBList();     //create SFSBs 
-	    System.out.println("Waiting for 15 seconds before accessing...");
-	    for (int i=0; i<15; i++) {
-		System.out.println("" + (15 - i) + " seconds left...");
-		try {
-		    Thread.currentThread().sleep(1*1000);
-		} catch (Exception ex) {
-		}
-	    }
+        initSFSBList();     //create SFSBs
+        System.out.println("Waiting for 15 seconds before accessing...");
+        for (int i=0; i<15; i++) {
+        System.out.println("" + (15 - i) + " seconds left...");
+        try {
+            Thread.currentThread().sleep(1*1000);
+        } catch (Exception ex) {
+        }
+        }
         accessSFSB();       //access the SFBS
-	removeTest();
+    removeTest();
     }
 
     private void initSFSBList() {
@@ -99,21 +99,21 @@
 
     public void accessSFSB() {
         try {
-	    System.out.println("Waiting for 10 seconds before accessing...");
-	    for (int i=0; i<10; i++) {
-		System.out.println("" + (10 - i) + " seconds left...");
-		try {
-		    Thread.currentThread().sleep(1*1000);
-		} catch (Exception ex) {
-		}
-	    }
+        System.out.println("Waiting for 10 seconds before accessing...");
+        for (int i=0; i<10; i++) {
+        System.out.println("" + (10 - i) + " seconds left...");
+        try {
+            Thread.currentThread().sleep(1*1000);
+        } catch (Exception ex) {
+        }
+        }
 
             boolean passed = true;
             for (int i=0; i < MAX_SFSBS; i++) {
                 SFSB sfsb = (SFSB) sfsbList.get(i);
                 String sfsbName = _sfsbPrefix+i;
-		String retrievedName = sfsb.getName();
-                
+        String retrievedName = sfsb.getName();
+
                 boolean sessionCtxTest = sfsb.checkSessionContext();
                 boolean initialCtxTest = sfsb.checkInitialContext();
                 boolean entityHomeTest = sfsb.checkEntityHome();
@@ -123,33 +123,33 @@
                 boolean homeHandleTest = sfsb.checkHomeHandle();
                 boolean handleTest = sfsb.checkHandle();
                 boolean utTest = sfsb.checkUserTransaction();
-		boolean activationTest = (sfsb.getActivationCount() != 0);
-		boolean passivationTest = (sfsb.getPassivationCount() != 0);
+        boolean activationTest = (sfsb.getActivationCount() != 0);
+        boolean passivationTest = (sfsb.getPassivationCount() != 0);
 
-		int actCount = sfsb.getActivationCount();
-		int pasCount = sfsb.getPassivationCount();
+        int actCount = sfsb.getActivationCount();
+        int pasCount = sfsb.getPassivationCount();
 
                 System.out.println("SFSB[" + i + "/" + MAX_SFSBS + "]: " + sessionCtxTest + "; " + initialCtxTest
                     + "; " + entityHomeTest + "; " + entityLocalHomeTest
                     + "; " + entityRemoteTest + "; " + entityLocalTest
-                    + "; " + homeHandleTest + "; " + handleTest 
+                    + "; " + homeHandleTest + "; " + handleTest
                     + "; " + utTest
-		    + "; " + activationTest + " (" + actCount + ")"
-		    + "; " + passivationTest + " (" + pasCount + ")"
-		);
+            + "; " + activationTest + " (" + actCount + ")"
+            + "; " + passivationTest + " (" + pasCount + ")"
+        );
 
                 passed = sessionCtxTest && initialCtxTest
                     && entityHomeTest && entityLocalHomeTest
                     && entityRemoteTest && entityLocalTest
                     && homeHandleTest && handleTest && utTest
-		    && activationTest && passivationTest;
+            && activationTest && passivationTest;
 
 /*
                 if (! passed) {
                     break;
                 }
 */
-		sfsb.sleepForSeconds(2);
+        sfsb.sleepForSeconds(2);
             }
 
             if (passed) {
@@ -163,44 +163,44 @@
                 String sfsbName = _sfsbPrefix+i;
 
                 sfsb.makeStateNonSerializable();
-	    }
+        }
 
-	    //Creating these many SFSBs should force passivation of the above
-	    //	non-serializable beans
+        //Creating these many SFSBs should force passivation of the above
+        //    non-serializable beans
             for (int i=0; i < MAX_SFSBS; i++) {
-		home.create(_sfsbPrefix + (i+1)*1000);
-	    }
+        home.create(_sfsbPrefix + (i+1)*1000);
+        }
 
-	    System.out.println("Waiting for 10 seconds for passivation to complete...");
+        System.out.println("Waiting for 10 seconds for passivation to complete...");
 
-	    for (int i=0; i<10; i++) {
-		System.out.println("" + (10 - i) + " seconds left...");
-		try {
-		    Thread.currentThread().sleep(1*1000);
-		} catch (Exception ex) {
-		}
-	    }
+        for (int i=0; i<10; i++) {
+        System.out.println("" + (10 - i) + " seconds left...");
+        try {
+            Thread.currentThread().sleep(1*1000);
+        } catch (Exception ex) {
+        }
+        }
 
             for (int i=0; i < MAX_SFSBS; i++) {
                 SFSB sfsb = (SFSB) sfsbList.get(i);
                 String sfsbName = _sfsbPrefix+i;
 
                 try {
-		    System.out.print("Expecting exception for: " + sfsbName);
-		    String nm = sfsb.getName();
-		    System.out.println("ERROR. Didn't get expected exception. "
-			    + "Got: " + nm);
-		    passed = false;
-		    break;
-		} catch (Exception ex) {
-		    System.out.println("[**Got Exception**]");
-		}
-	    }
-	    if (passed) {
-		stat.addStatus("ejbclient non-serializable-state", stat.PASS);
-	    } else {
-		stat.addStatus("ejbclient non-serializable-state", stat.FAIL);
-	    }
+            System.out.print("Expecting exception for: " + sfsbName);
+            String nm = sfsb.getName();
+            System.out.println("ERROR. Didn't get expected exception. "
+                + "Got: " + nm);
+            passed = false;
+            break;
+        } catch (Exception ex) {
+            System.out.println("[**Got Exception**]");
+        }
+        }
+        if (passed) {
+        stat.addStatus("ejbclient non-serializable-state", stat.PASS);
+        } else {
+        stat.addStatus("ejbclient non-serializable-state", stat.FAIL);
+        }
         } catch (Exception ex) {
             stat.addStatus("ejbclient accessSFSB", stat.FAIL);
 
@@ -209,26 +209,26 @@
 
 
     public void removeTest() {
-	SFSB sfsb = null;
-	try {
-	    String myName = "_2_" + _sfsbPrefix + "_2_";
-	    sfsb = (SFSB) home.create(myName);
-	    String retrievedName = sfsb.getName();
-	    boolean nameOK = myName.equalsIgnoreCase(retrievedName);
-	    boolean gotException = false;
-	    sfsb.remove();
-	    try {
-		sfsb.getName();
-		gotException = false;	    //Expecting an exception
-	    } catch (Exception ex) {
-		gotException = true;
-	    }
+    SFSB sfsb = null;
+    try {
+        String myName = "_2_" + _sfsbPrefix + "_2_";
+        sfsb = (SFSB) home.create(myName);
+        String retrievedName = sfsb.getName();
+        boolean nameOK = myName.equalsIgnoreCase(retrievedName);
+        boolean gotException = false;
+        sfsb.remove();
+        try {
+        sfsb.getName();
+        gotException = false;        //Expecting an exception
+        } catch (Exception ex) {
+        gotException = true;
+        }
 
-	    String resultStr = "(" + nameOK + " @@@ " + gotException + ")";
+        String resultStr = "(" + nameOK + " @@@ " + gotException + ")";
             if (nameOK && gotException) {
                 stat.addStatus("ejbclient removeTest " + resultStr, stat.PASS);
             } else {
-		stat.addStatus("ejbclient removeTest " + resultStr, stat.FAIL);
+        stat.addStatus("ejbclient removeTest " + resultStr, stat.FAIL);
             }
 
         } catch (Exception ex) {
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/descriptor/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/descriptor/sun-ejb-jar.xml
index 478d449..1f0bbdd 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/descriptor/sun-ejb-jar.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/descriptor/sun-ejb-jar.xml
@@ -29,7 +29,7 @@
         </ejb-ref>
         <bean-cache>
             <max-cache-size>8</max-cache-size>
-	    <resize-quantity>4</resize-quantity>
+        <resize-quantity>4</resize-quantity>
         </bean-cache>
      </ejb>
      <ejb>
@@ -47,10 +47,10 @@
             <res-ref-name>jdbc/DataSource</res-ref-name>
             <jndi-name>jdbc/__default</jndi-name>
         </resource-ref>
-	<bean-pool>
-	    <steady-pool-size>4</steady-pool-size>
-	    <max-pool-size>17</max-pool-size>
-	</bean-pool>
+    <bean-pool>
+        <steady-pool-size>4</steady-pool-size>
+        <max-pool-size>17</max-pool-size>
+    </bean-pool>
      </ejb>
    </enterprise-beans>
 </sun-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSB.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSB.java
index 5e697cd..32ca8ba 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSB.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSB.java
@@ -24,37 +24,37 @@
 {
 
     public String getName()
-	throws RemoteException;
+    throws RemoteException;
 
-    public void createSFSBChild() 
-	throws RemoteException;
+    public void createSFSBChild()
+    throws RemoteException;
 
     public String getMessage()
-	throws RemoteException;
+    throws RemoteException;
 
     public boolean checkSessionContext()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkInitialContext()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityHome()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityLocalHome()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityRemoteRef()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityLocalRef()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkHomeHandle()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkHandle()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkUserTransaction()
         throws RemoteException;
@@ -63,17 +63,17 @@
         throws RemoteException;
 
     public int getActivationCount()
-	throws RemoteException;
+    throws RemoteException;
 
     public int getPassivationCount()
-	throws RemoteException;
+    throws RemoteException;
 
     public void makeStateNonSerializable()
-	throws RemoteException;
+    throws RemoteException;
 
     public void sleepForSeconds(int sec)
-	throws RemoteException;
+    throws RemoteException;
 
     public void unusedMethod()
-	throws RemoteException;
+    throws RemoteException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBEJB.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBEJB.java
index 6f06dec..42f4fd2 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBEJB.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBEJB.java
@@ -30,7 +30,7 @@
 import java.rmi.RemoteException;
 
 public class SFSBEJB
-    implements SessionBean 
+    implements SessionBean
 {
 
     private static final String LOCAL_CHILD_SUFFIX = "_childLocal";
@@ -51,7 +51,7 @@
     private SimpleEntityLocalHome       entityLocalHome;
     private SimpleEntityLocal           entityLocal;
     private SFSBHome                    sfsbHome;
-    private SFSB                        sfsbRemote;    
+    private SFSB                        sfsbRemote;
     private SFSBLocalHome               sfsbLocalHome;
     private SFSBLocal                   sfsbLocal;
 
@@ -60,9 +60,9 @@
     private UserTransaction             userTransaction1;
     private UserTransaction             userTransaction2;
 
-    private int				activationCount;
-    private int				passivationCount;
-    private Object			nonSerializableState;
+    private int                activationCount;
+    private int                passivationCount;
+    private Object            nonSerializableState;
 
     public void ejbCreate(String sfsbName) {
         System.out.println ("In SFSB.ejbCreate() for name -> " + sfsbName);
@@ -75,10 +75,10 @@
 
             sfsbHome = (SFSBHome) sessionCtx.getEJBHome();
             sfsbLocalHome = (SFSBLocalHome) sessionCtx.getEJBLocalHome();
-            
+
             homeHandle = entityHome.getHomeHandle();
             handle = entityRemote.getHandle();
-            
+
             userTransaction1 = sessionCtx.getUserTransaction();
             userTransaction2 = (UserTransaction) new InitialContext().
                 lookup("java:comp/UserTransaction");
@@ -98,15 +98,15 @@
             sfsbRemote = sfsbHome.create(sfsbName + " _child");
             sfsbLocal = sfsbLocalHome.create(sfsbName + LOCAL_CHILD_SUFFIX);
         } catch(Exception e) {
-	    EJBException ex = new EJBException(e.getMessage());
-	    ex.initCause(e);
+        EJBException ex = new EJBException(e.getMessage());
+        ex.initCause(e);
             throw ex;
         }
     }
 
     public boolean checkSFSBChild() {
         String childName = sfsbLocal.getName();
-        boolean status = childName.equals(sfsbName + LOCAL_CHILD_SUFFIX);       
+        boolean status = childName.equals(sfsbName + LOCAL_CHILD_SUFFIX);
         return status;
     }
 
@@ -203,7 +203,7 @@
     public boolean checkUserTransaction() {
         boolean status =
             ((userTransaction1 != null) && (userTransaction2 != null));
-        
+
         try {
             if( status ) {
                 userTransaction1.begin();
@@ -235,7 +235,7 @@
             }
             if (ok) {
                 fieldName = "java:";
-                ok = ( (javaCtx != null) && 
+                ok = ( (javaCtx != null) &&
                        javaCtx.getNameInNamespace().equals(fieldName) );
             }
             if (ok) {
@@ -247,7 +247,7 @@
                 fieldName = "java:comp/env";
                 ok = ( (envCtx != null) &&
                        envCtx.getNameInNamespace().equals(fieldName) );
-                
+
             }
             if (ok) {
                 fieldName = "java:comp/env/ejb";
@@ -256,7 +256,7 @@
             }
             if (ok) {
                 fieldName = "env-entry";
-          
+
                 String value1 = (String)
                     initialCtx.lookup("java:comp/env/TagValue");
                 String value2 = (String) envCtx.lookup("TagValue");
@@ -268,9 +268,9 @@
             ex.printStackTrace();
             ok = false;
         }
-        
+
         this.message = (ok) ? null : (fieldName + " not restored properly");
-        
+
         return ok;
     }
 
@@ -279,22 +279,22 @@
     }
 
     public int getActivationCount() {
-	return this.activationCount;
+    return this.activationCount;
     }
 
     public int getPassivationCount() {
-	return this.passivationCount;
+    return this.passivationCount;
     }
 
     public void makeStateNonSerializable() {
-	nonSerializableState = new Object();
+    nonSerializableState = new Object();
     }
 
     public void sleepForSeconds(int sec) {
-	try {
-	    Thread.currentThread().sleep(sec * 1000);
-	} catch (Exception ex) {
-	}
+    try {
+        Thread.currentThread().sleep(sec * 1000);
+    } catch (Exception ex) {
+    }
     }
 
     public void unusedMethod() {
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBHome.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBHome.java
index fa34638..a40e68d 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBHome.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBHome.java
@@ -23,6 +23,6 @@
 public interface SFSBHome
     extends EJBHome
 {
-	public SFSB create(String sfsbName)
+    public SFSB create(String sfsbName)
         throws CreateException, RemoteException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBLocal.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBLocal.java
index 76ce881..8defae6 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBLocal.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBLocal.java
@@ -21,5 +21,5 @@
 public interface SFSBLocal
     extends EJBLocalObject
 {
-    public String getName();	
+    public String getName();
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBLocalHome.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBLocalHome.java
index 0502a12..477c836 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBLocalHome.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SFSBLocalHome.java
@@ -22,6 +22,6 @@
 public interface SFSBLocalHome
     extends EJBLocalHome
 {
-	public SFSBLocal create(String sfsbName)
+    public SFSBLocal create(String sfsbName)
             throws CreateException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SimpleEntityBean.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SimpleEntityBean.java
index 4e5612c..841378b 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SimpleEntityBean.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/ejb/SimpleEntityBean.java
@@ -56,8 +56,8 @@
         Connection c = null;
         PreparedStatement ps = null;
         try {
-	        c = ds.getConnection();
-     	    ps = c.prepareStatement(
+            c = ds.getConnection();
+             ps = c.prepareStatement(
                 "INSERT INTO SimpleEntity (keyid, name) VALUES (?,?)");
             ps.setString(1, key);
             ps.setString(2, name);
@@ -68,7 +68,7 @@
             this.name = name;
         } catch (SQLException e)  {
             throw new CreateException("SQL exception " + e);
-        } finally { 
+        } finally {
             try {
                 if (ps != null)
                     ps.close();
@@ -94,10 +94,10 @@
         throws FinderException
     {
         Connection c = null;
-     	PreparedStatement ps = null;
-	    try {
-	        c = ds.getConnection();
-     	    ps = c.prepareStatement(
+         PreparedStatement ps = null;
+        try {
+            c = ds.getConnection();
+             ps = c.prepareStatement(
                 "SELECT keyid from SimpleEntity where keyid = ?");
             ps.setString(1, key);
             ResultSet rs = ps.executeQuery();
@@ -107,7 +107,7 @@
             return key;
         } catch (SQLException e)  {
             throw new FinderException("SQL exception " + e);
-        } finally { 
+        } finally {
             try {
                 if (ps != null)
                     ps.close();
@@ -125,65 +125,65 @@
             ps = c.prepareStatement(
                 "SELECT name from SimpleEntity where keyid = ?");
             ps.setString(1, key);
-	    ResultSet rs = ps.executeQuery();
-	    if (!rs.next())
-	       throw new NoSuchEntityException("No cust for " + key);
-	    this.name = rs.getString(1);
-	} catch (SQLException e)  {
-	    throw new NoSuchEntityException("SQL exception " + e);
-	} finally { 
-	    try {
-		if (ps != null)
-		    ps.close();
-		if (c != null)
-		    c.close();
-	    } catch (Exception e) {}
-	}
+        ResultSet rs = ps.executeQuery();
+        if (!rs.next())
+           throw new NoSuchEntityException("No cust for " + key);
+        this.name = rs.getString(1);
+    } catch (SQLException e)  {
+        throw new NoSuchEntityException("SQL exception " + e);
+    } finally {
+        try {
+        if (ps != null)
+            ps.close();
+        if (c != null)
+            c.close();
+        } catch (Exception e) {}
+    }
     }
 
     public void ejbStore() {
-	Connection c = null;
-     	PreparedStatement ps = null;
-	try {
-	    c = ds.getConnection();
-     	    ps = c.prepareStatement(
-		"UPDATE SimpleEntity SET name = ? WHERE keyid = ?");
-	    ps.setString(1, name);
-	    ps.setString(2, key);
-	    if (ps.executeUpdate() != 1)
-		throw new EJBException("Didnt store ejb");
-	} catch (SQLException e)  {
-	    throw new EJBException("SQL exception " + e);
-	} finally { 
-	    try {
-		if (ps != null)
-		    ps.close();
-		if (c != null)
-		    c.close();
-	    } catch (Exception e) {}
-	}
+    Connection c = null;
+         PreparedStatement ps = null;
+    try {
+        c = ds.getConnection();
+             ps = c.prepareStatement(
+        "UPDATE SimpleEntity SET name = ? WHERE keyid = ?");
+        ps.setString(1, name);
+        ps.setString(2, key);
+        if (ps.executeUpdate() != 1)
+        throw new EJBException("Didnt store ejb");
+    } catch (SQLException e)  {
+        throw new EJBException("SQL exception " + e);
+    } finally {
+        try {
+        if (ps != null)
+            ps.close();
+        if (c != null)
+            c.close();
+        } catch (Exception e) {}
+    }
     }
 
     public void ejbRemove() throws RemoveException {
-	Connection c = null;
-     	PreparedStatement ps = null;
-	try {
-	    c = ds.getConnection();
-     	    ps = c.prepareStatement(
-		"DELETE FROM SimpleEntity WHERE keyid = ?");
-	    ps.setString(1, name);
-	    if (ps.executeUpdate() != 1)
-		throw new RemoveException("Didnt remove ejb");
-	} catch (SQLException e)  {
-	    throw new RemoveException("SQL exception " + e);
-	} finally { 
-	    try {
-		if (ps != null)
-		    ps.close();
-		if (c != null)
-		    c.close();
-	    } catch (Exception e) {}
-	}
+    Connection c = null;
+         PreparedStatement ps = null;
+    try {
+        c = ds.getConnection();
+             ps = c.prepareStatement(
+        "DELETE FROM SimpleEntity WHERE keyid = ?");
+        ps.setString(1, name);
+        if (ps.executeUpdate() != 1)
+        throw new RemoveException("Didnt remove ejb");
+    } catch (SQLException e)  {
+        throw new RemoveException("SQL exception " + e);
+    } finally {
+        try {
+        if (ps != null)
+            ps.close();
+        if (c != null)
+            c.close();
+        } catch (Exception e) {}
+    }
     }
 
     public void ejbActivate() {
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/build.properties b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/build.properties
index d708719..41387ac 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/build.properties
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/build.properties
@@ -15,21 +15,21 @@
     SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 
 -->
- 
+
 
 <property name="module" value="ejb-sfsb-lifecycle"/>
-<property name="appname" value="${module}"/>         
+<property name="appname" value="${module}"/>        \u0020
 <property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client" 
-	value="Client"/>
+<property name="test.client"\u0020
+    value="Client"/>
 <property name="application.xml" value="descriptor/application.xml"/>
 <property name="sun-application.xml" value="descriptor/sun-application.xml"/>
 <property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
 <property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
-<property name="application-client.xml" 
-	value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml" 
-	value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>         
+<property name="application-client.xml"\u0020
+    value="descriptor/application-client.xml"/>
+<property name="sun-application-client.xml"\u0020
+    value="descriptor/sun-application-client.xml"/>
+<property name="appclientjar.files" value="${build.classes.dir}"/>        \u0020
 <property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
 <property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/build.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/build.xml
index 9a14c5a..746ba95 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/build.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/build.xml
@@ -36,7 +36,7 @@
     <target name="clean" depends="init-common">
       <antcall  target="clean-common"/>
     </target>
- 
+
     <target name="compile" depends="clean">
         <antcall target="compile-common">
             <param name="src" value="ejb"/>
@@ -48,13 +48,13 @@
 
     <target name="build" depends="compile">
         <antcall target="build-ear-common">
-            <param name="ejbjar.classes" 
+            <param name="ejbjar.classes"
               value="**/**.class" />
-            <param name="appclientjar.classes" 
+            <param name="appclientjar.classes"
               value="**/*Client*.class, **/*SFSB*.class" />
         </antcall>
-    </target> 
-    
+    </target>
+
     <target name="deploy" depends="init-common">
         <antcall target="execute-ejb-sql-common">
             <param name="sql.file" value="sql/create_pointbase.sql"/>
@@ -69,7 +69,7 @@
         </antcall>
     -->
     </target>
-    
+
     <target name="delete-resources" depends="init-common">
     <!--
         <antcall target="asadmin-batch-common">
@@ -81,17 +81,17 @@
     <target name="run" depends="init-common">
         <antcall target="runclient-common"/>
     </target>
- 
+
     <target name="undeploy" depends="init-common">
         <antcall target="undeploy-common"/>
            <antcall target="execute-ejb-sql-common">
             <param name="sql.file" value="sql/drop_pointbase.sql"/>
         </antcall>
-    </target>   
+    </target>
 
     <target name="usage">
         <antcall target="usage-common"/>
-        <echo>         
+        <echo>
           ant create-resources Create all destinations and connection factories
           ant delete-resources Delete all destinations and connection factories
         </echo>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/client/Client.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/client/Client.java
index 4f182ae..9ee7706 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/client/Client.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/client/Client.java
@@ -33,8 +33,8 @@
     public static String kTestNotRun    = "TEST NOT RUN";
     public static String kTestPassed    = "TEST PASSED";
     public static String kTestFailed    = "TEST FAILED";
-    
-    private static SimpleReporterAdapter stat = 
+
+    private static SimpleReporterAdapter stat =
         new SimpleReporterAdapter("appserv-tests");
 
     private static final int    MAX_SFSBS = 24;
@@ -52,15 +52,15 @@
         client.doTest();
         System.out.println("[lfTraditional] DONE doTest()...");
         stat.printSummary("passivateactivate");
-    }  
-    
+    }
+
     public Client (String[] args) {
     }
-    
+
     public void doTest() {
-        initSFSBList();     //create SFSBs 
+        initSFSBList();     //create SFSBs
         accessSFSB();       //access the SFBS
-	removeTest();
+    removeTest();
     }
 
     private void initSFSBList() {
@@ -90,47 +90,47 @@
 
     public void accessSFSB() {
         try {
-	    System.out.println("Waiting for 10 seconds before accessing...");
-	    for (int i=0; i<10; i++) {
-		System.out.println("" + (10 - i) + " seconds left...");
-		try {
-		    Thread.currentThread().sleep(1*1000);
-		} catch (Exception ex) {
-		}
-	    }
+        System.out.println("Waiting for 10 seconds before accessing...");
+        for (int i=0; i<10; i++) {
+        System.out.println("" + (10 - i) + " seconds left...");
+        try {
+            Thread.currentThread().sleep(1*1000);
+        } catch (Exception ex) {
+        }
+        }
 
             boolean passed = true;
             for (int i=0; i < MAX_SFSBS; i++) {
                 try {
-		SFSB sfsb = (SFSB) sfsbList.get(i);
+        SFSB sfsb = (SFSB) sfsbList.get(i);
                 String sfsbName = _sfsbPrefix+i;
-		String retrievedName = sfsb.getName();
-                
-                boolean ok = sfsb.isOK(sfsbName);
-		int actCount = sfsb.getActivationCount();
-		int pasCount = sfsb.getPassivationCount();
+        String retrievedName = sfsb.getName();
 
-		boolean activationTest = (actCount != 0);
-		boolean passivationTest = (pasCount != 0);
+                boolean ok = sfsb.isOK(sfsbName);
+        int actCount = sfsb.getActivationCount();
+        int pasCount = sfsb.getPassivationCount();
+
+        boolean activationTest = (actCount != 0);
+        boolean passivationTest = (pasCount != 0);
 
                 System.out.println("Bean[" + i + "/" + MAX_SFSBS + "] name: " + sfsbName
-		    + "; retrievedName: " + retrievedName
-		    + "; ok: " + ok
-		    + "; " + activationTest + " (" + actCount + ")"
-		    + "; " + passivationTest + " (" + pasCount + ")"
-		);
+            + "; retrievedName: " + retrievedName
+            + "; ok: " + ok
+            + "; " + activationTest + " (" + actCount + ")"
+            + "; " + passivationTest + " (" + pasCount + ")"
+        );
 
                 passed = passed & sfsbName.equals(retrievedName)
                     && ok
-		    && activationTest && passivationTest;
+            && activationTest && passivationTest;
 
                 if (! passed) {
                     //break;
                 }
-		sfsb.sleepForSeconds(1);
-		} catch (Exception ex) {
-		    System.out.println("Bean[" + i + "] Got exception: " + ex);
-		}
+        sfsb.sleepForSeconds(1);
+        } catch (Exception ex) {
+            System.out.println("Bean[" + i + "] Got exception: " + ex);
+        }
             }
 
             if (passed) {
@@ -144,44 +144,44 @@
                 String sfsbName = _sfsbPrefix+i;
 
                 sfsb.makeStateNonSerializable();
-	    }
+        }
 
-	    //Creating these many SFSBs should force passivation of the above
-	    //	non-serializable beans
+        //Creating these many SFSBs should force passivation of the above
+        //    non-serializable beans
             for (int i=0; i < MAX_SFSBS; i++) {
-		home.create(_sfsbPrefix + (i+1)*1000);
-	    }
+        home.create(_sfsbPrefix + (i+1)*1000);
+        }
 
-	    System.out.println("Waiting for 10 seconds for passivation to complete...");
+        System.out.println("Waiting for 10 seconds for passivation to complete...");
 
-	    for (int i=0; i<10; i++) {
-		System.out.println("" + (10 - i) + " seconds left...");
-		try {
-		    Thread.currentThread().sleep(1*1000);
-		} catch (Exception ex) {
-		}
-	    }
+        for (int i=0; i<10; i++) {
+        System.out.println("" + (10 - i) + " seconds left...");
+        try {
+            Thread.currentThread().sleep(1*1000);
+        } catch (Exception ex) {
+        }
+        }
 
             for (int i=0; i < MAX_SFSBS; i++) {
                 SFSB sfsb = (SFSB) sfsbList.get(i);
                 String sfsbName = _sfsbPrefix+i;
 
                 try {
-		    System.out.print("Expecting exception for: " + sfsbName);
-		    String nm = sfsb.getName();
-		    System.out.println("ERROR. Didn't get expected exception. "
-			    + "Got: " + nm);
-		    passed = false;
-		    break;
-		} catch (Exception ex) {
-		    System.out.println("[**Got Exception**]");
-		}
-	    }
-	    if (passed) {
-		stat.addStatus("ejbclient non-serializable-state", stat.PASS);
-	    } else {
-		stat.addStatus("ejbclient non-serializable-state", stat.FAIL);
-	    }
+            System.out.print("Expecting exception for: " + sfsbName);
+            String nm = sfsb.getName();
+            System.out.println("ERROR. Didn't get expected exception. "
+                + "Got: " + nm);
+            passed = false;
+            break;
+        } catch (Exception ex) {
+            System.out.println("[**Got Exception**]");
+        }
+        }
+        if (passed) {
+        stat.addStatus("ejbclient non-serializable-state", stat.PASS);
+        } else {
+        stat.addStatus("ejbclient non-serializable-state", stat.FAIL);
+        }
         } catch (Exception ex) {
             stat.addStatus("ejbclient accessSFSB", stat.FAIL);
 
@@ -190,28 +190,28 @@
 
 
     public void removeTest() {
-	SFSB sfsb = null;
-	try {
-	    String myName = "_2_" + _sfsbPrefix + "_2_";
-	    sfsb = (SFSB) home.create(myName);
-	    String retrievedName = sfsb.getName();
-	    boolean nameOK = myName.equalsIgnoreCase(retrievedName);
-	    boolean gotException = false;
-	    sfsb.remove();
-	    Exception excep = null;
-	    try {
-		sfsb.getName();
-		gotException = false;	    //Expecting an exception
-	    } catch (Exception ex) {
-		gotException = true;
-		excep = ex;
-	    }
+    SFSB sfsb = null;
+    try {
+        String myName = "_2_" + _sfsbPrefix + "_2_";
+        sfsb = (SFSB) home.create(myName);
+        String retrievedName = sfsb.getName();
+        boolean nameOK = myName.equalsIgnoreCase(retrievedName);
+        boolean gotException = false;
+        sfsb.remove();
+        Exception excep = null;
+        try {
+        sfsb.getName();
+        gotException = false;        //Expecting an exception
+        } catch (Exception ex) {
+        gotException = true;
+        excep = ex;
+        }
 
-	    String resultStr = "(" + nameOK + " @@@ " + gotException + ")";
+        String resultStr = "(" + nameOK + " @@@ " + gotException + ")";
             if (nameOK && gotException) {
                 stat.addStatus("ejbclient removeTest " + resultStr, stat.PASS);
             } else {
-		stat.addStatus("ejbclient removeTest " + resultStr, stat.FAIL);
+        stat.addStatus("ejbclient removeTest " + resultStr, stat.FAIL);
             }
 
         } catch (Exception ex) {
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/descriptor/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/descriptor/sun-ejb-jar.xml
index 9ecf001..3f6e1a9 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/descriptor/sun-ejb-jar.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/descriptor/sun-ejb-jar.xml
@@ -25,7 +25,7 @@
         <jndi-name>ejb/ejb_sfsb_lifecycle_SFSB</jndi-name>
         <bean-cache>
             <max-cache-size>8</max-cache-size>
-	    <resize-quantity>4</resize-quantity>
+        <resize-quantity>4</resize-quantity>
         </bean-cache>
      </ejb>
    </enterprise-beans>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSB.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSB.java
index 9a11488..2bf9fff 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSB.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSB.java
@@ -24,23 +24,23 @@
 {
 
     public String getName()
-	throws RemoteException;
+    throws RemoteException;
 
     public int getActivationCount()
-	throws RemoteException;
+    throws RemoteException;
 
     public int getPassivationCount()
-	throws RemoteException;
+    throws RemoteException;
 
     public void makeStateNonSerializable()
-	throws RemoteException;
+    throws RemoteException;
 
     public void sleepForSeconds(int sec)
-	throws RemoteException;
+    throws RemoteException;
 
     public boolean isOK(String name)
-	throws RemoteException;
+    throws RemoteException;
 
     public void unusedMethod()
-	throws RemoteException;
+    throws RemoteException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBEJB.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBEJB.java
index 838a5af..8e86033 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBEJB.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBEJB.java
@@ -32,7 +32,7 @@
 @CallbackListener("com.sun.s1asdev.ejb.ejb30.sfsb.lifecycle.ejb.LifecycleListener")
 @Stateful
 public class SFSBEJB
-    implements SessionBean 
+    implements SessionBean
 {
 
     private Context envCtx;
@@ -48,7 +48,7 @@
     private String                      sfsbName;
     private String                      envEntryTagValue;
     private SFSBHome                    sfsbHome;
-    private SFSB                        sfsbRemote;    
+    private SFSB                        sfsbRemote;
     private SFSBLocalHome               sfsbLocalHome;
     private SFSBLocal                   sfsbLocal;
 
@@ -57,9 +57,9 @@
     private UserTransaction             userTransaction1;
     private UserTransaction             userTransaction2;
 
-    private int				activationCount;
-    private int				passivationCount;
-    private Object			nonSerializableState;
+    private int                activationCount;
+    private int                passivationCount;
+    private Object            nonSerializableState;
 
     public void ejbCreate(String sfsbName) {
         System.out.println ("In SFSB.ejbCreate() for name -> " + sfsbName);
@@ -68,13 +68,13 @@
         try {
             sfsbHome = (SFSBHome) sessionCtx.getEJBHome();
             sfsbLocalHome = (SFSBLocalHome) sessionCtx.getEJBLocalHome();
-            
+
             homeHandle = sfsbHome.getHomeHandle();
             handle = sessionCtx.getEJBObject().getHandle();
-            
+
             userTransaction1 = sessionCtx.getUserTransaction();
             userTransaction2 = (UserTransaction) new InitialContext().
-	    lookup("java:comp/UserTransaction");
+        lookup("java:comp/UserTransaction");
         } catch (Exception ex) {
             ex.printStackTrace();
             //TODO
@@ -133,7 +133,7 @@
     public boolean checkUserTransaction() {
         boolean status =
             ((userTransaction1 != null) && (userTransaction2 != null));
-        
+
         try {
             if( status ) {
                 userTransaction1.begin();
@@ -184,9 +184,9 @@
             ex.printStackTrace();
             ok = false;
         }
-        
+
         this.message = (ok) ? null : (fieldName + " not restored properly");
-        
+
         return ok;
     }
 
@@ -195,22 +195,22 @@
     }
 
     public int getActivationCount() {
-	return this.activationCount;
+    return this.activationCount;
     }
 
     public int getPassivationCount() {
-	return this.passivationCount;
+    return this.passivationCount;
     }
 
     public void makeStateNonSerializable() {
-	nonSerializableState = new Object();
+    nonSerializableState = new Object();
     }
 
     public void sleepForSeconds(int sec) {
-	try {
-	    Thread.currentThread().sleep(sec * 1000);
-	} catch (Exception ex) {
-	}
+    try {
+        Thread.currentThread().sleep(sec * 1000);
+    } catch (Exception ex) {
+    }
     }
 
     public void unusedMethod() {
@@ -232,7 +232,7 @@
     public void ejbRemove() {}
 
     public void ejbActivate() {
-	throw new EJBException("Container called ejbActivate?????");
+    throw new EJBException("Container called ejbActivate?????");
     }
 
     void postActivate() {
@@ -240,7 +240,7 @@
     }
 
     public void ejbPassivate() {
-	throw new EJBException("Container called ejbPassivate?????");
+    throw new EJBException("Container called ejbPassivate?????");
     }
 
     @PrePassivate
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBLocal.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBLocal.java
index 87715be..b2340b2 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBLocal.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBLocal.java
@@ -21,5 +21,5 @@
 public interface SFSBLocal
     extends EJBLocalObject
 {
-    public String getName();	
+    public String getName();
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBLocalHome.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBLocalHome.java
index b88dc2d..4150ba7 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBLocalHome.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/ejb/SFSBLocalHome.java
@@ -22,6 +22,6 @@
 public interface SFSBLocalHome
     extends EJBLocalHome
 {
-	public SFSBLocal create(String sfsbName)
+    public SFSBLocal create(String sfsbName)
             throws CreateException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/sql/create_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/sql/create_pointbase.sql
index 66c4b12..83fb28c 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/sql/create_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/sql/create_pointbase.sql
@@ -1,7 +1,7 @@
-Drop table SimpleEntity;
-
-CREATE TABLE SimpleEntity (
-    key     char(128) not null,
-    name    char(128)
-);
-
+Drop table SimpleEntity;
+
+CREATE TABLE SimpleEntity (
+    key     char(128) not null,
+    name    char(128)
+);
+
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/sql/drop_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/sql/drop_pointbase.sql
index 935c4a6..3f21aeb 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/sql/drop_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/listener/sql/drop_pointbase.sql
@@ -1 +1 @@
-Drop table SimpleEntity;
+Drop table SimpleEntity;
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/sql/create_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/sql/create_pointbase.sql
index 1ad6187..59bf79e 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/sql/create_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/sql/create_pointbase.sql
@@ -1,7 +1,7 @@
-Drop table SimpleEntity;
-
-CREATE TABLE SimpleEntity (
-    keyid     char(128) not null,
-    name    char(128)
-);
-
+Drop table SimpleEntity;
+
+CREATE TABLE SimpleEntity (
+    keyid     char(128) not null,
+    name    char(128)
+);
+
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/sql/drop_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/sql/drop_pointbase.sql
index 935c4a6..3f21aeb 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/sql/drop_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/keepstate/sql/drop_pointbase.sql
@@ -1 +1 @@
-Drop table SimpleEntity;
+Drop table SimpleEntity;
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/build.properties b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/build.properties
index 2a6b8a4..9e961fb 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/build.properties
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/build.properties
@@ -15,21 +15,21 @@
     SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 
 -->
- 
+
 
 <property name="module" value="ejb-sfsb-passivateactivate"/>
-<property name="appname" value="${module}"/>         
+<property name="appname" value="${module}"/>        \u0020
 <property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client" 
-	value="Client"/>
+<property name="test.client"\u0020
+    value="Client"/>
 <property name="application.xml" value="descriptor/application.xml"/>
 <property name="sun-application.xml" value="descriptor/sun-application.xml"/>
 <property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
 <property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
-<property name="application-client.xml" 
-	value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml" 
-	value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>         
+<property name="application-client.xml"\u0020
+    value="descriptor/application-client.xml"/>
+<property name="sun-application-client.xml"\u0020
+    value="descriptor/sun-application-client.xml"/>
+<property name="appclientjar.files" value="${build.classes.dir}"/>        \u0020
 <property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
 <property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/build.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/build.xml
index 2f868ca..d3a6767 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/build.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/build.xml
@@ -36,7 +36,7 @@
     <target name="clean" depends="init-common">
       <antcall  target="clean-common"/>
     </target>
- 
+
     <target name="compile" depends="clean">
         <antcall target="compile-common">
             <param name="src" value="ejb"/>
@@ -48,13 +48,13 @@
 
     <target name="build" depends="compile">
         <antcall target="build-ear-common">
-            <param name="ejbjar.classes" 
+            <param name="ejbjar.classes"
               value="**/**.class" />
-            <param name="appclientjar.classes" 
+            <param name="appclientjar.classes"
               value="**/*Client*.class, **/*SFSB*.class" />
         </antcall>
-    </target> 
-    
+    </target>
+
     <target name="deploy" depends="init-common">
         <antcall target="execute-ejb-sql-common">
             <param name="sql.file" value="sql/create_pointbase.sql"/>
@@ -69,7 +69,7 @@
         </antcall>
     -->
     </target>
-    
+
     <target name="delete-resources" depends="init-common">
     <!--
         <antcall target="asadmin-batch-common">
@@ -81,17 +81,17 @@
     <target name="run" depends="init-common">
         <antcall target="runclient-common"/>
     </target>
- 
+
     <target name="undeploy" depends="init-common">
         <antcall target="undeploy-common"/>
            <antcall target="execute-ejb-sql-common">
             <param name="sql.file" value="sql/drop_pointbase.sql"/>
         </antcall>
-    </target>   
+    </target>
 
     <target name="usage">
         <antcall target="usage-common"/>
-        <echo>         
+        <echo>
           ant create-resources Create all destinations and connection factories
           ant delete-resources Delete all destinations and connection factories
         </echo>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/client/Client.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/client/Client.java
index 8c22956..3b3f5c6 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/client/Client.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/client/Client.java
@@ -33,8 +33,8 @@
     public static String kTestNotRun    = "TEST NOT RUN";
     public static String kTestPassed    = "TEST PASSED";
     public static String kTestFailed    = "TEST FAILED";
-    
-    private static SimpleReporterAdapter stat = 
+
+    private static SimpleReporterAdapter stat =
         new SimpleReporterAdapter("appserv-tests");
 
     private static final int    MAX_SFSBS = 40;
@@ -52,15 +52,15 @@
         client.doTest();
         System.out.println("[passivateactivateClient] DONE doTest()...");
         stat.printSummary("passivateactivate");
-    }  
-    
+    }
+
     public Client (String[] args) {
     }
-    
+
     public void doTest() {
-        initSFSBList();     //create SFSBs 
+        initSFSBList();     //create SFSBs
         accessSFSB();       //access the SFBS
-	removeTest();
+    removeTest();
     }
 
     private void initSFSBList() {
@@ -90,21 +90,21 @@
 
     public void accessSFSB() {
         try {
-	    System.out.println("Waiting for 10 seconds before accessing...");
-	    for (int i=0; i<10; i++) {
-		System.out.println("" + (10 - i) + " seconds left...");
-		try {
-		    Thread.currentThread().sleep(1*1000);
-		} catch (Exception ex) {
-		}
-	    }
+        System.out.println("Waiting for 10 seconds before accessing...");
+        for (int i=0; i<10; i++) {
+        System.out.println("" + (10 - i) + " seconds left...");
+        try {
+            Thread.currentThread().sleep(1*1000);
+        } catch (Exception ex) {
+        }
+        }
 
             boolean passed = true;
             for (int i=0; i < MAX_SFSBS; i++) {
                 SFSB sfsb = (SFSB) sfsbList.get(i);
                 String sfsbName = _sfsbPrefix+i;
-		String retrievedName = sfsb.getName();
-                
+        String retrievedName = sfsb.getName();
+
                 boolean sessionCtxTest = sfsb.checkSessionContext();
                 boolean initialCtxTest = sfsb.checkInitialContext();
                 boolean entityHomeTest = sfsb.checkEntityHome();
@@ -114,32 +114,32 @@
                 boolean homeHandleTest = sfsb.checkHomeHandle();
                 boolean handleTest = sfsb.checkHandle();
                 boolean utTest = sfsb.checkUserTransaction();
-		boolean activationTest = (sfsb.getActivationCount() != 0);
-		boolean passivationTest = (sfsb.getPassivationCount() != 0);
+        boolean activationTest = (sfsb.getActivationCount() != 0);
+        boolean passivationTest = (sfsb.getPassivationCount() != 0);
 
-		int actCount = sfsb.getActivationCount();
-		int pasCount = sfsb.getPassivationCount();
+        int actCount = sfsb.getActivationCount();
+        int pasCount = sfsb.getPassivationCount();
 
                 System.out.println(sessionCtxTest + "; " + initialCtxTest
                     + "; " + entityHomeTest + "; " + entityLocalHomeTest
                     + "; " + entityRemoteTest + "; " + entityLocalTest
-                    + "; " + homeHandleTest + "; " + handleTest 
+                    + "; " + homeHandleTest + "; " + handleTest
                     + "; " + utTest
-		    + "; " + activationTest + " (" + actCount + ")"
-		    + "; " + passivationTest + " (" + pasCount + ")"
-		);
+            + "; " + activationTest + " (" + actCount + ")"
+            + "; " + passivationTest + " (" + pasCount + ")"
+        );
 
                 passed = sessionCtxTest && initialCtxTest
                     && entityHomeTest && entityLocalHomeTest
                     && entityRemoteTest && entityLocalTest
                     && homeHandleTest && handleTest && utTest
-		    && activationTest && passivationTest;
+            && activationTest && passivationTest;
 
                 if (! passed) {
                     break;
                 }
 
-		sfsb.sleepForSeconds(2);
+        sfsb.sleepForSeconds(2);
             }
 
             if (passed) {
@@ -153,44 +153,44 @@
                 String sfsbName = _sfsbPrefix+i;
 
                 sfsb.makeStateNonSerializable();
-	    }
+        }
 
-	    //Creating these many SFSBs should force passivation of the above
-	    //	non-serializable beans
+        //Creating these many SFSBs should force passivation of the above
+        //    non-serializable beans
             for (int i=0; i < MAX_SFSBS; i++) {
-		home.create(_sfsbPrefix + (i+1)*1000);
-	    }
+        home.create(_sfsbPrefix + (i+1)*1000);
+        }
 
-	    System.out.println("Waiting for 10 seconds for passivation to complete...");
+        System.out.println("Waiting for 10 seconds for passivation to complete...");
 
-	    for (int i=0; i<10; i++) {
-		System.out.println("" + (10 - i) + " seconds left...");
-		try {
-		    Thread.currentThread().sleep(1*1000);
-		} catch (Exception ex) {
-		}
-	    }
+        for (int i=0; i<10; i++) {
+        System.out.println("" + (10 - i) + " seconds left...");
+        try {
+            Thread.currentThread().sleep(1*1000);
+        } catch (Exception ex) {
+        }
+        }
 
             for (int i=0; i < MAX_SFSBS; i++) {
                 SFSB sfsb = (SFSB) sfsbList.get(i);
                 String sfsbName = _sfsbPrefix+i;
 
                 try {
-		    System.out.print("Expecting exception for: " + sfsbName);
-		    String nm = sfsb.getName();
-		    System.out.println("ERROR. Didn't get expected exception. "
-			    + "Got: " + nm);
-		    passed = false;
-		    break;
-		} catch (Exception ex) {
-		    System.out.println("[**Got Exception**]");
-		}
-	    }
-	    if (passed) {
-		stat.addStatus("ejbclient non-serializable-state", stat.PASS);
-	    } else {
-		stat.addStatus("ejbclient non-serializable-state", stat.FAIL);
-	    }
+            System.out.print("Expecting exception for: " + sfsbName);
+            String nm = sfsb.getName();
+            System.out.println("ERROR. Didn't get expected exception. "
+                + "Got: " + nm);
+            passed = false;
+            break;
+        } catch (Exception ex) {
+            System.out.println("[**Got Exception**]");
+        }
+        }
+        if (passed) {
+        stat.addStatus("ejbclient non-serializable-state", stat.PASS);
+        } else {
+        stat.addStatus("ejbclient non-serializable-state", stat.FAIL);
+        }
         } catch (Exception ex) {
             stat.addStatus("ejbclient accessSFSB", stat.FAIL);
 
@@ -199,33 +199,33 @@
 
 
     public void removeTest() {
-	SFSB sfsb = null;
-	try {
-	    String myName = "_2_" + _sfsbPrefix + "_2_";
-	    sfsb = (SFSB) home.create(myName);
-	    String retrievedName = sfsb.getName();
-	    boolean nameOK = myName.equalsIgnoreCase(retrievedName);
-	    boolean gotException = false;
+    SFSB sfsb = null;
+    try {
+        String myName = "_2_" + _sfsbPrefix + "_2_";
+        sfsb = (SFSB) home.create(myName);
+        String retrievedName = sfsb.getName();
+        boolean nameOK = myName.equalsIgnoreCase(retrievedName);
+        boolean gotException = false;
 
             // Test BMT SFSB remove called in a transaction
-            jakarta.transaction.UserTransaction ut = (jakarta.transaction.UserTransaction) 
+            jakarta.transaction.UserTransaction ut = (jakarta.transaction.UserTransaction)
                      (new InitialContext()).lookup("java:comp/UserTransaction");
             ut.begin();
-	    sfsb.remove();
+        sfsb.remove();
             ut.commit();
-	    try {
-		sfsb.getName();
-		gotException = false;	    //Expecting an exception
-	    } catch (Exception ex) {
-		gotException = true;
-	    }
+        try {
+        sfsb.getName();
+        gotException = false;        //Expecting an exception
+        } catch (Exception ex) {
+        gotException = true;
+        }
 
-	    String resultStr = "(" + nameOK + " @@@ " + gotException + ")";
+        String resultStr = "(" + nameOK + " @@@ " + gotException + ")";
             if (nameOK && gotException) {
                 stat.addStatus("ejbclient removeTest " + resultStr, stat.PASS);
             } else {
                 System.err.println("======> FAIL because: nameOK: " + nameOK + " gotException: " + gotException);
-		stat.addStatus("ejbclient removeTest " + resultStr, stat.FAIL);
+        stat.addStatus("ejbclient removeTest " + resultStr, stat.FAIL);
             }
 
         } catch (Exception ex) {
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/descriptor/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/descriptor/sun-ejb-jar.xml
index 31c971b..c29af31 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/descriptor/sun-ejb-jar.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/descriptor/sun-ejb-jar.xml
@@ -29,7 +29,7 @@
         </ejb-ref>
         <bean-cache>
             <max-cache-size>8</max-cache-size>
-	    <resize-quantity>4</resize-quantity>
+        <resize-quantity>4</resize-quantity>
         </bean-cache>
      </ejb>
      <ejb>
@@ -47,10 +47,10 @@
             <res-ref-name>jdbc/DataSource</res-ref-name>
             <jndi-name>jdbc/__default</jndi-name>
         </resource-ref>
-	<bean-pool>
-	    <steady-pool-size>4</steady-pool-size>
-	    <max-pool-size>17</max-pool-size>
-	</bean-pool>
+    <bean-pool>
+        <steady-pool-size>4</steady-pool-size>
+        <max-pool-size>17</max-pool-size>
+    </bean-pool>
      </ejb>
    </enterprise-beans>
 </sun-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSB.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSB.java
index 2b4a211..d602aca 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSB.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSB.java
@@ -24,37 +24,37 @@
 {
 
     public String getName()
-	throws RemoteException;
+    throws RemoteException;
 
-    public void createSFSBChild() 
-	throws RemoteException;
+    public void createSFSBChild()
+    throws RemoteException;
 
     public String getMessage()
-	throws RemoteException;
+    throws RemoteException;
 
     public boolean checkSessionContext()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkInitialContext()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityHome()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityLocalHome()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityRemoteRef()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkEntityLocalRef()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkHomeHandle()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkHandle()
-        throws RemoteException;       
+        throws RemoteException;
 
     public boolean checkUserTransaction()
         throws RemoteException;
@@ -63,17 +63,17 @@
         throws RemoteException;
 
     public int getActivationCount()
-	throws RemoteException;
+    throws RemoteException;
 
     public int getPassivationCount()
-	throws RemoteException;
+    throws RemoteException;
 
     public void makeStateNonSerializable()
-	throws RemoteException;
+    throws RemoteException;
 
     public void sleepForSeconds(int sec)
-	throws RemoteException;
+    throws RemoteException;
 
     public void unusedMethod()
-	throws RemoteException;
+    throws RemoteException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBEJB.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBEJB.java
index df1a46d..d87ed81 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBEJB.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBEJB.java
@@ -30,7 +30,7 @@
 import java.rmi.RemoteException;
 
 public class SFSBEJB
-    implements SessionBean 
+    implements SessionBean
 {
 
     private static final String LOCAL_CHILD_SUFFIX = "_childLocal";
@@ -51,7 +51,7 @@
     private SimpleEntityLocalHome       entityLocalHome;
     private SimpleEntityLocal           entityLocal;
     private SFSBHome                    sfsbHome;
-    private SFSB                        sfsbRemote;    
+    private SFSB                        sfsbRemote;
     private SFSBLocalHome               sfsbLocalHome;
     private SFSBLocal                   sfsbLocal;
 
@@ -60,9 +60,9 @@
     private UserTransaction             userTransaction1;
     private UserTransaction             userTransaction2;
 
-    private int				activationCount;
-    private int				passivationCount;
-    private Object			nonSerializableState;
+    private int                activationCount;
+    private int                passivationCount;
+    private Object            nonSerializableState;
 
     public void ejbCreate(String sfsbName) {
         System.out.println ("In SFSB.ejbCreate() for name -> " + sfsbName);
@@ -75,10 +75,10 @@
 
             sfsbHome = (SFSBHome) sessionCtx.getEJBHome();
             sfsbLocalHome = (SFSBLocalHome) sessionCtx.getEJBLocalHome();
-            
+
             homeHandle = entityHome.getHomeHandle();
             handle = entityRemote.getHandle();
-            
+
             userTransaction1 = sessionCtx.getUserTransaction();
             userTransaction2 = (UserTransaction) new InitialContext().
                 lookup("java:comp/UserTransaction");
@@ -98,15 +98,15 @@
             sfsbRemote = sfsbHome.create(sfsbName + " _child");
             sfsbLocal = sfsbLocalHome.create(sfsbName + LOCAL_CHILD_SUFFIX);
         } catch(Exception e) {
-	    EJBException ex = new EJBException(e.getMessage());
-	    ex.initCause(e);
+        EJBException ex = new EJBException(e.getMessage());
+        ex.initCause(e);
             throw ex;
         }
     }
 
     public boolean checkSFSBChild() {
         String childName = sfsbLocal.getName();
-        boolean status = childName.equals(sfsbName + LOCAL_CHILD_SUFFIX);       
+        boolean status = childName.equals(sfsbName + LOCAL_CHILD_SUFFIX);
         return status;
     }
 
@@ -203,7 +203,7 @@
     public boolean checkUserTransaction() {
         boolean status =
             ((userTransaction1 != null) && (userTransaction2 != null));
-        
+
         try {
             if( status ) {
                 userTransaction1.begin();
@@ -235,7 +235,7 @@
             }
             if (ok) {
                 fieldName = "java:";
-                ok = ( (javaCtx != null) && 
+                ok = ( (javaCtx != null) &&
                        javaCtx.getNameInNamespace().equals(fieldName) );
             }
             if (ok) {
@@ -247,7 +247,7 @@
                 fieldName = "java:comp/env";
                 ok = ( (envCtx != null) &&
                        envCtx.getNameInNamespace().equals(fieldName) );
-                
+
             }
             if (ok) {
                 fieldName = "java:comp/env/ejb";
@@ -256,7 +256,7 @@
             }
             if (ok) {
                 fieldName = "env-entry";
-          
+
                 String value1 = (String)
                     initialCtx.lookup("java:comp/env/TagValue");
                 String value2 = (String) envCtx.lookup("TagValue");
@@ -268,9 +268,9 @@
             ex.printStackTrace();
             ok = false;
         }
-        
+
         this.message = (ok) ? null : (fieldName + " not restored properly");
-        
+
         return ok;
     }
 
@@ -279,22 +279,22 @@
     }
 
     public int getActivationCount() {
-	return this.activationCount;
+    return this.activationCount;
     }
 
     public int getPassivationCount() {
-	return this.passivationCount;
+    return this.passivationCount;
     }
 
     public void makeStateNonSerializable() {
-	nonSerializableState = new Object();
+    nonSerializableState = new Object();
     }
 
     public void sleepForSeconds(int sec) {
-	try {
-	    Thread.currentThread().sleep(sec * 1000);
-	} catch (Exception ex) {
-	}
+    try {
+        Thread.currentThread().sleep(sec * 1000);
+    } catch (Exception ex) {
+    }
     }
 
     public void unusedMethod() {
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBHome.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBHome.java
index 4c636b3..4ea2ead 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBHome.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBHome.java
@@ -23,6 +23,6 @@
 public interface SFSBHome
     extends EJBHome
 {
-	public SFSB create(String sfsbName)
+    public SFSB create(String sfsbName)
         throws CreateException, RemoteException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBLocal.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBLocal.java
index b54aca7..ac8a749 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBLocal.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBLocal.java
@@ -21,5 +21,5 @@
 public interface SFSBLocal
     extends EJBLocalObject
 {
-    public String getName();	
+    public String getName();
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBLocalHome.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBLocalHome.java
index c91cb9d..4afb68a 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBLocalHome.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SFSBLocalHome.java
@@ -22,6 +22,6 @@
 public interface SFSBLocalHome
     extends EJBLocalHome
 {
-	public SFSBLocal create(String sfsbName)
+    public SFSBLocal create(String sfsbName)
             throws CreateException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SimpleEntityBean.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SimpleEntityBean.java
index c9e4eca..70bd692 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SimpleEntityBean.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/ejb/SimpleEntityBean.java
@@ -56,8 +56,8 @@
         Connection c = null;
         PreparedStatement ps = null;
         try {
-	        c = ds.getConnection();
-     	    ps = c.prepareStatement(
+            c = ds.getConnection();
+             ps = c.prepareStatement(
                 "INSERT INTO SimpleEntity (keyid, name) VALUES (?,?)");
             ps.setString(1, key);
             ps.setString(2, name);
@@ -68,7 +68,7 @@
             this.name = name;
         } catch (SQLException e)  {
             throw new CreateException("SQL exception " + e);
-        } finally { 
+        } finally {
             try {
                 if (ps != null)
                     ps.close();
@@ -94,10 +94,10 @@
         throws FinderException
     {
         Connection c = null;
-     	PreparedStatement ps = null;
-	    try {
-	        c = ds.getConnection();
-     	    ps = c.prepareStatement(
+         PreparedStatement ps = null;
+        try {
+            c = ds.getConnection();
+             ps = c.prepareStatement(
                 "SELECT keyid from SimpleEntity where keyid = ?");
             ps.setString(1, key);
             ResultSet rs = ps.executeQuery();
@@ -107,7 +107,7 @@
             return key;
         } catch (SQLException e)  {
             throw new FinderException("SQL exception " + e);
-        } finally { 
+        } finally {
             try {
                 if (ps != null)
                     ps.close();
@@ -125,65 +125,65 @@
             ps = c.prepareStatement(
                 "SELECT name from SimpleEntity where keyid = ?");
             ps.setString(1, key);
-	    ResultSet rs = ps.executeQuery();
-	    if (!rs.next())
-	       throw new NoSuchEntityException("No cust for " + key);
-	    this.name = rs.getString(1);
-	} catch (SQLException e)  {
-	    throw new NoSuchEntityException("SQL exception " + e);
-	} finally { 
-	    try {
-		if (ps != null)
-		    ps.close();
-		if (c != null)
-		    c.close();
-	    } catch (Exception e) {}
-	}
+        ResultSet rs = ps.executeQuery();
+        if (!rs.next())
+           throw new NoSuchEntityException("No cust for " + key);
+        this.name = rs.getString(1);
+    } catch (SQLException e)  {
+        throw new NoSuchEntityException("SQL exception " + e);
+    } finally {
+        try {
+        if (ps != null)
+            ps.close();
+        if (c != null)
+            c.close();
+        } catch (Exception e) {}
+    }
     }
 
     public void ejbStore() {
-	Connection c = null;
-     	PreparedStatement ps = null;
-	try {
-	    c = ds.getConnection();
-     	    ps = c.prepareStatement(
-		"UPDATE SimpleEntity SET name = ? WHERE keyid = ?");
-	    ps.setString(1, name);
-	    ps.setString(2, key);
-	    if (ps.executeUpdate() != 1)
-		throw new EJBException("Didnt store ejb");
-	} catch (SQLException e)  {
-	    throw new EJBException("SQL exception " + e);
-	} finally { 
-	    try {
-		if (ps != null)
-		    ps.close();
-		if (c != null)
-		    c.close();
-	    } catch (Exception e) {}
-	}
+    Connection c = null;
+         PreparedStatement ps = null;
+    try {
+        c = ds.getConnection();
+             ps = c.prepareStatement(
+        "UPDATE SimpleEntity SET name = ? WHERE keyid = ?");
+        ps.setString(1, name);
+        ps.setString(2, key);
+        if (ps.executeUpdate() != 1)
+        throw new EJBException("Didnt store ejb");
+    } catch (SQLException e)  {
+        throw new EJBException("SQL exception " + e);
+    } finally {
+        try {
+        if (ps != null)
+            ps.close();
+        if (c != null)
+            c.close();
+        } catch (Exception e) {}
+    }
     }
 
     public void ejbRemove() throws RemoveException {
-	Connection c = null;
-     	PreparedStatement ps = null;
-	try {
-	    c = ds.getConnection();
-     	    ps = c.prepareStatement(
-		"DELETE FROM SimpleEntity WHERE keyid = ?");
-	    ps.setString(1, name);
-	    if (ps.executeUpdate() != 1)
-		throw new RemoveException("Didnt remove ejb");
-	} catch (SQLException e)  {
-	    throw new RemoveException("SQL exception " + e);
-	} finally { 
-	    try {
-		if (ps != null)
-		    ps.close();
-		if (c != null)
-		    c.close();
-	    } catch (Exception e) {}
-	}
+    Connection c = null;
+         PreparedStatement ps = null;
+    try {
+        c = ds.getConnection();
+             ps = c.prepareStatement(
+        "DELETE FROM SimpleEntity WHERE keyid = ?");
+        ps.setString(1, name);
+        if (ps.executeUpdate() != 1)
+        throw new RemoveException("Didnt remove ejb");
+    } catch (SQLException e)  {
+        throw new RemoveException("SQL exception " + e);
+    } finally {
+        try {
+        if (ps != null)
+            ps.close();
+        if (c != null)
+            c.close();
+        } catch (Exception e) {}
+    }
     }
 
     public void ejbActivate() {
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/build.properties b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/build.properties
index d708719..41387ac 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/build.properties
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/build.properties
@@ -15,21 +15,21 @@
     SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 
 -->
- 
+
 
 <property name="module" value="ejb-sfsb-lifecycle"/>
-<property name="appname" value="${module}"/>         
+<property name="appname" value="${module}"/>        \u0020
 <property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client" 
-	value="Client"/>
+<property name="test.client"\u0020
+    value="Client"/>
 <property name="application.xml" value="descriptor/application.xml"/>
 <property name="sun-application.xml" value="descriptor/sun-application.xml"/>
 <property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
 <property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
-<property name="application-client.xml" 
-	value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml" 
-	value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>         
+<property name="application-client.xml"\u0020
+    value="descriptor/application-client.xml"/>
+<property name="sun-application-client.xml"\u0020
+    value="descriptor/sun-application-client.xml"/>
+<property name="appclientjar.files" value="${build.classes.dir}"/>        \u0020
 <property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
 <property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/build.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/build.xml
index 9a14c5a..746ba95 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/build.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/build.xml
@@ -36,7 +36,7 @@
     <target name="clean" depends="init-common">
       <antcall  target="clean-common"/>
     </target>
- 
+
     <target name="compile" depends="clean">
         <antcall target="compile-common">
             <param name="src" value="ejb"/>
@@ -48,13 +48,13 @@
 
     <target name="build" depends="compile">
         <antcall target="build-ear-common">
-            <param name="ejbjar.classes" 
+            <param name="ejbjar.classes"
               value="**/**.class" />
-            <param name="appclientjar.classes" 
+            <param name="appclientjar.classes"
               value="**/*Client*.class, **/*SFSB*.class" />
         </antcall>
-    </target> 
-    
+    </target>
+
     <target name="deploy" depends="init-common">
         <antcall target="execute-ejb-sql-common">
             <param name="sql.file" value="sql/create_pointbase.sql"/>
@@ -69,7 +69,7 @@
         </antcall>
     -->
     </target>
-    
+
     <target name="delete-resources" depends="init-common">
     <!--
         <antcall target="asadmin-batch-common">
@@ -81,17 +81,17 @@
     <target name="run" depends="init-common">
         <antcall target="runclient-common"/>
     </target>
- 
+
     <target name="undeploy" depends="init-common">
         <antcall target="undeploy-common"/>
            <antcall target="execute-ejb-sql-common">
             <param name="sql.file" value="sql/drop_pointbase.sql"/>
         </antcall>
-    </target>   
+    </target>
 
     <target name="usage">
         <antcall target="usage-common"/>
-        <echo>         
+        <echo>
           ant create-resources Create all destinations and connection factories
           ant delete-resources Delete all destinations and connection factories
         </echo>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/client/Client.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/client/Client.java
index 6c1c63a..058bc78 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/client/Client.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/client/Client.java
@@ -34,8 +34,8 @@
     public static String kTestNotRun    = "TEST NOT RUN";
     public static String kTestPassed    = "TEST PASSED";
     public static String kTestFailed    = "TEST FAILED";
-    
-    private static SimpleReporterAdapter stat = 
+
+    private static SimpleReporterAdapter stat =
         new SimpleReporterAdapter("appserv-tests");
 
     private static final int    MAX_SFSBS = 24;
@@ -53,15 +53,15 @@
         client.doTest();
         System.out.println("[lfTraditional] DONE doTest()...");
         stat.printSummary("passivateactivate");
-    }  
-    
+    }
+
     public Client (String[] args) {
     }
-    
+
     public void doTest() {
-        initSFSBList();     //create SFSBs 
+        initSFSBList();     //create SFSBs
         accessSFSB();       //access the SFBS
-	removeTest();
+    removeTest();
     }
 
     private void initSFSBList() {
@@ -91,47 +91,47 @@
 
     public void accessSFSB() {
         try {
-	    System.out.println("Waiting for 10 seconds before accessing...");
-	    for (int i=0; i<10; i++) {
-		System.out.println("" + (10 - i) + " seconds left...");
-		try {
-		    Thread.currentThread().sleep(1*1000);
-		} catch (Exception ex) {
-		}
-	    }
+        System.out.println("Waiting for 10 seconds before accessing...");
+        for (int i=0; i<10; i++) {
+        System.out.println("" + (10 - i) + " seconds left...");
+        try {
+            Thread.currentThread().sleep(1*1000);
+        } catch (Exception ex) {
+        }
+        }
 
             boolean passed = true;
             for (int i=0; i < MAX_SFSBS; i++) {
                 try {
-		SFSB sfsb = (SFSB) sfsbList.get(i);
+        SFSB sfsb = (SFSB) sfsbList.get(i);
                 String sfsbName = _sfsbPrefix+i;
-		String retrievedName = sfsb.getName();
-                
-                boolean ok = sfsb.isOK(sfsbName);
-		int actCount = sfsb.getActivationCount();
-		int pasCount = sfsb.getPassivationCount();
+        String retrievedName = sfsb.getName();
 
-		boolean activationTest = (actCount != 0);
-		boolean passivationTest = (pasCount != 0);
+                boolean ok = sfsb.isOK(sfsbName);
+        int actCount = sfsb.getActivationCount();
+        int pasCount = sfsb.getPassivationCount();
+
+        boolean activationTest = (actCount != 0);
+        boolean passivationTest = (pasCount != 0);
 
                 System.out.println("Bean[" + i + "/" + MAX_SFSBS + "] name: " + sfsbName
-		    + "; retrievedName: " + retrievedName
-		    + "; ok: " + ok
-		    + "; " + activationTest + " (" + actCount + ")"
-		    + "; " + passivationTest + " (" + pasCount + ")"
-		);
+            + "; retrievedName: " + retrievedName
+            + "; ok: " + ok
+            + "; " + activationTest + " (" + actCount + ")"
+            + "; " + passivationTest + " (" + pasCount + ")"
+        );
 
                 passed = passed & sfsbName.equals(retrievedName)
                     && ok
-		    && activationTest && passivationTest;
+            && activationTest && passivationTest;
 
                 if (! passed) {
                     //break;
                 }
-		sfsb.sleepForSeconds(1);
-		} catch (Exception ex) {
-		    System.out.println("Bean[" + i + "] Got exception: " + ex);
-		}
+        sfsb.sleepForSeconds(1);
+        } catch (Exception ex) {
+            System.out.println("Bean[" + i + "] Got exception: " + ex);
+        }
             }
 
             if (passed) {
@@ -145,44 +145,44 @@
                 String sfsbName = _sfsbPrefix+i;
 
                 sfsb.makeStateNonSerializable();
-	    }
+        }
 
-	    //Creating these many SFSBs should force passivation of the above
-	    //	non-serializable beans
+        //Creating these many SFSBs should force passivation of the above
+        //    non-serializable beans
             for (int i=0; i < MAX_SFSBS; i++) {
-		home.create(_sfsbPrefix + (i+1)*1000);
-	    }
+        home.create(_sfsbPrefix + (i+1)*1000);
+        }
 
-	    System.out.println("Waiting for 10 seconds for passivation to complete...");
+        System.out.println("Waiting for 10 seconds for passivation to complete...");
 
-	    for (int i=0; i<10; i++) {
-		System.out.println("" + (10 - i) + " seconds left...");
-		try {
-		    Thread.currentThread().sleep(1*1000);
-		} catch (Exception ex) {
-		}
-	    }
+        for (int i=0; i<10; i++) {
+        System.out.println("" + (10 - i) + " seconds left...");
+        try {
+            Thread.currentThread().sleep(1*1000);
+        } catch (Exception ex) {
+        }
+        }
 
             for (int i=0; i < MAX_SFSBS; i++) {
                 SFSB sfsb = (SFSB) sfsbList.get(i);
                 String sfsbName = _sfsbPrefix+i;
 
                 try {
-		    System.out.print("Expecting exception for: " + sfsbName);
-		    String nm = sfsb.getName();
-		    System.out.println("ERROR. Didn't get expected exception. "
-			    + "Got: " + nm);
-		    passed = false;
-		    break;
-		} catch (Exception ex) {
-		    System.out.println("[**Got Exception**]");
-		}
-	    }
-	    if (passed) {
-		stat.addStatus("ejbclient non-serializable-state", stat.PASS);
-	    } else {
-		stat.addStatus("ejbclient non-serializable-state", stat.FAIL);
-	    }
+            System.out.print("Expecting exception for: " + sfsbName);
+            String nm = sfsb.getName();
+            System.out.println("ERROR. Didn't get expected exception. "
+                + "Got: " + nm);
+            passed = false;
+            break;
+        } catch (Exception ex) {
+            System.out.println("[**Got Exception**]");
+        }
+        }
+        if (passed) {
+        stat.addStatus("ejbclient non-serializable-state", stat.PASS);
+        } else {
+        stat.addStatus("ejbclient non-serializable-state", stat.FAIL);
+        }
         } catch (Exception ex) {
             stat.addStatus("ejbclient accessSFSB", stat.FAIL);
 
@@ -191,29 +191,29 @@
 
 
     public void removeTest() {
-	SFSB sfsb = null;
-	try {
-	    String myName = "_2_" + _sfsbPrefix + "_2_";
-	    sfsb = (SFSB) home.create(myName);
-	    String retrievedName = sfsb.getName();
-	    boolean nameOK = myName.equalsIgnoreCase(retrievedName);
-	    boolean gotException = false;
-	    sfsb.remove();
-	    Exception excep = null;
-	    try {
-		sfsb.getName();
-		gotException = false;	    //Expecting an exception
-	    } catch (Exception ex) {
-		gotException = true;
-		excep = ex;
-	    }
+    SFSB sfsb = null;
+    try {
+        String myName = "_2_" + _sfsbPrefix + "_2_";
+        sfsb = (SFSB) home.create(myName);
+        String retrievedName = sfsb.getName();
+        boolean nameOK = myName.equalsIgnoreCase(retrievedName);
+        boolean gotException = false;
+        sfsb.remove();
+        Exception excep = null;
+        try {
+        sfsb.getName();
+        gotException = false;        //Expecting an exception
+        } catch (Exception ex) {
+        gotException = true;
+        excep = ex;
+        }
 
-	    String resultStr = "(" + nameOK + " @@@ " + gotException + ")";
+        String resultStr = "(" + nameOK + " @@@ " + gotException + ")";
             if (nameOK && gotException) {
                 stat.addStatus("ejbclient removeTest " + resultStr, stat.PASS);
             } else {
                 System.err.println("======> FAIL 2 because: nameOK: " + nameOK + " gotException: " + gotException);
-		stat.addStatus("ejbclient removeTest " + resultStr, stat.FAIL);
+        stat.addStatus("ejbclient removeTest " + resultStr, stat.FAIL);
             }
 
         } catch (Exception ex) {
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/descriptor/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/descriptor/sun-ejb-jar.xml
index 9ecf001..3f6e1a9 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/descriptor/sun-ejb-jar.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/descriptor/sun-ejb-jar.xml
@@ -25,7 +25,7 @@
         <jndi-name>ejb/ejb_sfsb_lifecycle_SFSB</jndi-name>
         <bean-cache>
             <max-cache-size>8</max-cache-size>
-	    <resize-quantity>4</resize-quantity>
+        <resize-quantity>4</resize-quantity>
         </bean-cache>
      </ejb>
    </enterprise-beans>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSB.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSB.java
index 9a11488..2bf9fff 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSB.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSB.java
@@ -24,23 +24,23 @@
 {
 
     public String getName()
-	throws RemoteException;
+    throws RemoteException;
 
     public int getActivationCount()
-	throws RemoteException;
+    throws RemoteException;
 
     public int getPassivationCount()
-	throws RemoteException;
+    throws RemoteException;
 
     public void makeStateNonSerializable()
-	throws RemoteException;
+    throws RemoteException;
 
     public void sleepForSeconds(int sec)
-	throws RemoteException;
+    throws RemoteException;
 
     public boolean isOK(String name)
-	throws RemoteException;
+    throws RemoteException;
 
     public void unusedMethod()
-	throws RemoteException;
+    throws RemoteException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBEJB.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBEJB.java
index 838a5af..8e86033 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBEJB.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBEJB.java
@@ -32,7 +32,7 @@
 @CallbackListener("com.sun.s1asdev.ejb.ejb30.sfsb.lifecycle.ejb.LifecycleListener")
 @Stateful
 public class SFSBEJB
-    implements SessionBean 
+    implements SessionBean
 {
 
     private Context envCtx;
@@ -48,7 +48,7 @@
     private String                      sfsbName;
     private String                      envEntryTagValue;
     private SFSBHome                    sfsbHome;
-    private SFSB                        sfsbRemote;    
+    private SFSB                        sfsbRemote;
     private SFSBLocalHome               sfsbLocalHome;
     private SFSBLocal                   sfsbLocal;
 
@@ -57,9 +57,9 @@
     private UserTransaction             userTransaction1;
     private UserTransaction             userTransaction2;
 
-    private int				activationCount;
-    private int				passivationCount;
-    private Object			nonSerializableState;
+    private int                activationCount;
+    private int                passivationCount;
+    private Object            nonSerializableState;
 
     public void ejbCreate(String sfsbName) {
         System.out.println ("In SFSB.ejbCreate() for name -> " + sfsbName);
@@ -68,13 +68,13 @@
         try {
             sfsbHome = (SFSBHome) sessionCtx.getEJBHome();
             sfsbLocalHome = (SFSBLocalHome) sessionCtx.getEJBLocalHome();
-            
+
             homeHandle = sfsbHome.getHomeHandle();
             handle = sessionCtx.getEJBObject().getHandle();
-            
+
             userTransaction1 = sessionCtx.getUserTransaction();
             userTransaction2 = (UserTransaction) new InitialContext().
-	    lookup("java:comp/UserTransaction");
+        lookup("java:comp/UserTransaction");
         } catch (Exception ex) {
             ex.printStackTrace();
             //TODO
@@ -133,7 +133,7 @@
     public boolean checkUserTransaction() {
         boolean status =
             ((userTransaction1 != null) && (userTransaction2 != null));
-        
+
         try {
             if( status ) {
                 userTransaction1.begin();
@@ -184,9 +184,9 @@
             ex.printStackTrace();
             ok = false;
         }
-        
+
         this.message = (ok) ? null : (fieldName + " not restored properly");
-        
+
         return ok;
     }
 
@@ -195,22 +195,22 @@
     }
 
     public int getActivationCount() {
-	return this.activationCount;
+    return this.activationCount;
     }
 
     public int getPassivationCount() {
-	return this.passivationCount;
+    return this.passivationCount;
     }
 
     public void makeStateNonSerializable() {
-	nonSerializableState = new Object();
+    nonSerializableState = new Object();
     }
 
     public void sleepForSeconds(int sec) {
-	try {
-	    Thread.currentThread().sleep(sec * 1000);
-	} catch (Exception ex) {
-	}
+    try {
+        Thread.currentThread().sleep(sec * 1000);
+    } catch (Exception ex) {
+    }
     }
 
     public void unusedMethod() {
@@ -232,7 +232,7 @@
     public void ejbRemove() {}
 
     public void ejbActivate() {
-	throw new EJBException("Container called ejbActivate?????");
+    throw new EJBException("Container called ejbActivate?????");
     }
 
     void postActivate() {
@@ -240,7 +240,7 @@
     }
 
     public void ejbPassivate() {
-	throw new EJBException("Container called ejbPassivate?????");
+    throw new EJBException("Container called ejbPassivate?????");
     }
 
     @PrePassivate
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBLocal.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBLocal.java
index 87715be..b2340b2 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBLocal.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBLocal.java
@@ -21,5 +21,5 @@
 public interface SFSBLocal
     extends EJBLocalObject
 {
-    public String getName();	
+    public String getName();
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBLocalHome.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBLocalHome.java
index b88dc2d..4150ba7 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBLocalHome.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/ejb/SFSBLocalHome.java
@@ -22,6 +22,6 @@
 public interface SFSBLocalHome
     extends EJBLocalHome
 {
-	public SFSBLocal create(String sfsbName)
+    public SFSBLocal create(String sfsbName)
             throws CreateException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/sql/create_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/sql/create_pointbase.sql
index 66c4b12..83fb28c 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/sql/create_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/sql/create_pointbase.sql
@@ -1,7 +1,7 @@
-Drop table SimpleEntity;
-
-CREATE TABLE SimpleEntity (
-    key     char(128) not null,
-    name    char(128)
-);
-
+Drop table SimpleEntity;
+
+CREATE TABLE SimpleEntity (
+    key     char(128) not null,
+    name    char(128)
+);
+
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/sql/drop_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/sql/drop_pointbase.sql
index 935c4a6..3f21aeb 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/sql/drop_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/listener/sql/drop_pointbase.sql
@@ -1 +1 @@
-Drop table SimpleEntity;
+Drop table SimpleEntity;
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/sql/create_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/sql/create_pointbase.sql
index 1ad6187..59bf79e 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/sql/create_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/sql/create_pointbase.sql
@@ -1,7 +1,7 @@
-Drop table SimpleEntity;
-
-CREATE TABLE SimpleEntity (
-    keyid     char(128) not null,
-    name    char(128)
-);
-
+Drop table SimpleEntity;
+
+CREATE TABLE SimpleEntity (
+    keyid     char(128) not null,
+    name    char(128)
+);
+
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/sql/drop_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/sql/drop_pointbase.sql
index 935c4a6..3f21aeb 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/sql/drop_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/passivateactivate/sql/drop_pointbase.sql
@@ -1 +1 @@
-Drop table SimpleEntity;
+Drop table SimpleEntity;
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.properties b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.properties
index 1208446..983a545 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.properties
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.properties
@@ -15,22 +15,22 @@
     SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 
 -->
- 
+
 
 <property name="module" value="ejb-sfsb-stress"/>
-<property name="appname" value="${module}"/>         
+<property name="appname" value="${module}"/>        \u0020
 <property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client" 
-	value="Client"/>
+<property name="test.client"\u0020
+    value="Client"/>
 <property name="application.xml" value="descriptor/application.xml"/>
 <property name="sun-application.xml" value="descriptor/sun-application.xml"/>
 <property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
 <property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
-<property name="application-client.xml" 
-	value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml" 
-	value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>         
+<property name="application-client.xml"\u0020
+    value="descriptor/application-client.xml"/>
+<property name="sun-application-client.xml"\u0020
+    value="descriptor/sun-application-client.xml"/>
+<property name="appclientjar.files" value="${build.classes.dir}"/>        \u0020
 <property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
 <property name="app.type" value="application"/>
 <property name="loadgenerator.client" value="com.sun.s1asdev.ejb.sfsb.stress.client.LoadGenerator"/>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.xml
index 84132d0..cede30f 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.xml
@@ -36,7 +36,7 @@
     <target name="clean" depends="init-common">
       <antcall  target="clean-common"/>
     </target>
- 
+
     <target name="compile" depends="clean">
         <antcall target="compile-common">
             <param name="src" value="ejb"/>
@@ -48,13 +48,13 @@
 
     <target name="build" depends="compile">
         <antcall target="build-ear-common">
-            <param name="ejbjar.classes" 
+            <param name="ejbjar.classes"
               value="**/**.class" />
-            <param name="appclientjar.classes" 
+            <param name="appclientjar.classes"
               value="**/*Client*.class, **/*Load*.class **/*SFSB*.class" />
         </antcall>
-    </target> 
-    
+    </target>
+
     <target name="deploy" depends="build,init-common">
         <antcall target="execute-ejb-sql-common">
             <param name="sql.file" value="sql/create_pointbase.sql"/>
@@ -69,7 +69,7 @@
         </antcall>
     -->
     </target>
-    
+
     <target name="delete-resources" depends="init-common">
     <!--
         <antcall target="asadmin-batch-common">
@@ -81,13 +81,13 @@
     <target name="run" depends="init-common">
         <antcall target="runclient-common"/>
     </target>
- 
+
     <target name="undeploy" depends="init-common">
         <antcall target="undeploy-common"/>
            <antcall target="execute-ejb-sql-common">
             <param name="sql.file" value="sql/drop_pointbase.sql"/>
         </antcall>
-    </target>   
+    </target>
 
     <target name="runloadgenerator">
        <java  fork="true" failonerror="true"
@@ -97,7 +97,7 @@
            <arg value="ejb/ejb_sfsb_stress_StressSFSBHome"/>
            <arg value="${ictx.props}"/>
         </java>
-    </target>     
+    </target>
 
     <target name="run_cosnaming" depends="init-common">
         <antcall target="runloadgenerator">
@@ -108,7 +108,7 @@
 
     <target name="usage">
         <antcall target="usage-common"/>
-        <echo>         
+        <echo>
           ant create-resources Create all destinations and connection factories
           ant delete-resources Delete all destinations and connection factories
         </echo>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/Client.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/Client.java
index d61571b..e1fcf92 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/Client.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/Client.java
@@ -34,8 +34,8 @@
     public static String kTestNotRun    = "TEST NOT RUN";
     public static String kTestPassed    = "TEST PASSED";
     public static String kTestFailed    = "TEST FAILED";
-    
-    private static SimpleReporterAdapter stat = 
+
+    private static SimpleReporterAdapter stat =
         new SimpleReporterAdapter("appserv-tests");
 
     private static final int    MAX_SFSBS = 40;
@@ -50,13 +50,13 @@
         client.doTest();
         System.out.println("[stressClient] DONE doTest()...");
         stat.printSummary("stress");
-    }  
-    
+    }
+
     public Client (String[] args) {
     }
-    
+
     public void doTest() {
-        initSFSBList();     //create SFSBs 
+        initSFSBList();     //create SFSBs
         accessSFSB();       //access the SFBS
 
     }
@@ -92,7 +92,7 @@
             for (int i=0; i < MAX_SFSBS; i++) {
                 StressSFSB sfsb = (StressSFSB) sfsbList.get(i);
                 String sfsbName = "SFSB_"+i;
-                
+
 
                 passed = sfsb.doWork((long) 2000);
 
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/LoadGenerator.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/LoadGenerator.java
index 725d2c4..df25671 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/LoadGenerator.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/LoadGenerator.java
@@ -28,27 +28,27 @@
 
 public class LoadGenerator {
     private static SimpleReporterAdapter stat =
-        new SimpleReporterAdapter("appserv-tests");    
-    private static String propsFileName = 
-	"/export/home/s1as/cts/ws/appserv-tests/devtests/ejb/sfsb/stress/client/jndi.properties";
+        new SimpleReporterAdapter("appserv-tests");
+    private static String propsFileName =
+    "/export/home/s1as/cts/ws/appserv-tests/devtests/ejb/sfsb/stress/client/jndi.properties";
 
     private Context ctx;
     private StressSFSBHome home;
 
     public LoadGenerator(String[] args)
-	throws Exception
+    throws Exception
     {
-	String jndiName = args[0];
-	ctx = getContext(args[1]);    
+    String jndiName = args[0];
+    ctx = getContext(args[1]);
 
-	Object ref = ctx.lookup(jndiName);
-	this.home = (StressSFSBHome) 
-	    PortableRemoteObject.narrow(ref, StressSFSBHome.class);
-	System.out.println("LoadGenerator got home: " + home.getClass());
+    Object ref = ctx.lookup(jndiName);
+    this.home = (StressSFSBHome)
+        PortableRemoteObject.narrow(ref, StressSFSBHome.class);
+    System.out.println("LoadGenerator got home: " + home.getClass());
     }
 
     private InitialContext getContext(String propsFileName)
-	throws Exception
+    throws Exception
     {
         InitialContext ic;
 
@@ -66,21 +66,21 @@
 
 
     public void doTest() {
-	for (int i=0; i<10; i++) {
-	    System.out.println("Creating StressSFSBClient[" + i + "]");
-	    String clientName = "client-"+i;
-	    StressSFSBClient client = new StressSFSBClient(clientName,
-		    home, 10);
-	}
+    for (int i=0; i<10; i++) {
+        System.out.println("Creating StressSFSBClient[" + i + "]");
+        String clientName = "client-"+i;
+        StressSFSBClient client = new StressSFSBClient(clientName,
+            home, 10);
+    }
     }
 
 
     public static void main(String[] args) {
         try {
-	    stat.addDescription("ejb-sfsb-stress");
-	    LoadGenerator generator = new LoadGenerator(args);
-	    generator.doTest();
-	    stat.addStatus("ejb-sfsb-stress main", stat.PASS);
+        stat.addDescription("ejb-sfsb-stress");
+        LoadGenerator generator = new LoadGenerator(args);
+        generator.doTest();
+        stat.addStatus("ejb-sfsb-stress main", stat.PASS);
         } catch(Exception e) {
             e.printStackTrace();
             stat.addStatus("ejb-sfsb-stress main", stat.FAIL);
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/StressSFSBClient.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/StressSFSBClient.java
index c635849..bbfa5d0 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/StressSFSBClient.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/client/StressSFSBClient.java
@@ -33,41 +33,41 @@
     implements Runnable
 {
 
-    String	    name;
+    String        name;
     StressSFSBHome  home;
-    ArrayList	    list;
-    int		    maxActiveCount;
-    boolean	    success = true;
-    int		    maxIter = 5;
-    Thread	    thread;
+    ArrayList        list;
+    int            maxActiveCount;
+    boolean        success = true;
+    int            maxIter = 5;
+    Thread        thread;
 
     public StressSFSBClient(String name,
-	    StressSFSBHome home, int maxActiveCount)
+        StressSFSBHome home, int maxActiveCount)
     {
-	thread = new Thread(this, name);
-	this.name = name;
-	this.home = home;
-	this.maxActiveCount = maxActiveCount;
-	this.list = new ArrayList(maxActiveCount);
-	thread.start();
+    thread = new Thread(this, name);
+    this.name = name;
+    this.home = home;
+    this.maxActiveCount = maxActiveCount;
+    this.list = new ArrayList(maxActiveCount);
+    thread.start();
     }
 
     public void run() {
-	System.out.println("StressSFSBClient: " + name + " started....");
-	try {
-	    for (int i=0; i<maxActiveCount; i++) {
-		list.add(home.create(name+"-"+i));
-	    }
-	    for (int count = 0; count < maxIter; count++) {
-		for (int i=0; i<maxActiveCount; i++) {
-		    StressSFSB sfsb = (StressSFSB) list.get(i);
-		    sfsb.ping();
-		}
-	    }
-	} catch (Exception ex) {
-	    ex.printStackTrace();
-	    success = false;
-	}
+    System.out.println("StressSFSBClient: " + name + " started....");
+    try {
+        for (int i=0; i<maxActiveCount; i++) {
+        list.add(home.create(name+"-"+i));
+        }
+        for (int count = 0; count < maxIter; count++) {
+        for (int i=0; i<maxActiveCount; i++) {
+            StressSFSB sfsb = (StressSFSB) list.get(i);
+            sfsb.ping();
+        }
+        }
+    } catch (Exception ex) {
+        ex.printStackTrace();
+        success = false;
+    }
     }
 
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSB.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSB.java
index fa62bbf..d2dca4c 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSB.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSB.java
@@ -24,7 +24,7 @@
 {
 
     public String getName()
-	throws RemoteException;
+    throws RemoteException;
 
     public boolean hasSameName(String name)
         throws RemoteException;
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSBBean.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSBBean.java
index 63d8721..4679e33 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSBBean.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSBBean.java
@@ -30,7 +30,7 @@
 import java.rmi.RemoteException;
 
 public class StressSFSBBean
-    implements SessionBean 
+    implements SessionBean
 {
     private SessionContext              sessionCtx;
     private Context                     initialCtx;
@@ -52,7 +52,7 @@
     }
 
     public boolean doWork(long millis) {
-	return true;
+    return true;
     }
 
     public void setSessionContext(SessionContext sc) {
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSBHome.java b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSBHome.java
index 758c2aa..1ff92cd 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSBHome.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/ejb/StressSFSBHome.java
@@ -24,5 +24,5 @@
     extends EJBHome
 {
     public StressSFSB create(String sfsbName)
-	throws CreateException, RemoteException;
+    throws CreateException, RemoteException;
 }
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/sql/create_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/sql/create_pointbase.sql
index 8504c3e..58342d5 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/sql/create_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/sql/create_pointbase.sql
@@ -1,7 +1,7 @@
-Drop table StressEntity;
-
-CREATE TABLE StressEntity (
-    key     char(20) not null,
-    name    char(20)
-);
-
+Drop table StressEntity;
+
+CREATE TABLE StressEntity (
+    key     char(20) not null,
+    name    char(20)
+);
+
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/sql/drop_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/sql/drop_pointbase.sql
index ea05487..2a1817a 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/sql/drop_pointbase.sql
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/sql/drop_pointbase.sql
@@ -1 +1 @@
-Drop table StressEntity;
+Drop table StressEntity;
