diff --git a/appserver/tests/community/web/helloworld/src/java/HelloServlet.java b/appserver/tests/community/web/helloworld/src/java/HelloServlet.java
index 61f4288..8881a75 100644
--- a/appserver/tests/community/web/helloworld/src/java/HelloServlet.java
+++ b/appserver/tests/community/web/helloworld/src/java/HelloServlet.java
@@ -51,45 +51,45 @@
                       HttpServletResponse response)
       throws IOException, ServletException {
 
-	      System.out.println("Servlet processing do get..");
+          System.out.println("Servlet processing do get..");
 
-	response.setContentType("text/html");
-	PrintWriter writer = response.getWriter();
+    response.setContentType("text/html");
+    PrintWriter writer = response.getWriter();
 
-	writer.println("<html>");
-	writer.println("<head>");
-	writer.println("<title>Sample Application Servlet Page</title>");
-	writer.println("</head>");
-	writer.println("<body bgcolor=white>");
+    writer.println("<html>");
+    writer.println("<head>");
+    writer.println("<title>Sample Application Servlet Page</title>");
+    writer.println("</head>");
+    writer.println("<body bgcolor=white>");
 
-	writer.println("<table border=\"0\">");
-	writer.println("<tr>");
-	writer.println("<td>");
-	//writer.println("<img src=\"images/tomcat.gif\">");
-	writer.println("</td>");
-	writer.println("<td>");
-	writer.println("<h1>Sample Application Servlet</h1>");
-	writer.println("This is the output of a servlet that is part of");
-	writer.println("the Hello, World application.  It displays the");
-	writer.println("request headers from the request we are currently");
-	writer.println("processing.");
-	writer.println("</td>");
-	writer.println("</tr>");
-	writer.println("</table>");
+    writer.println("<table border=\"0\">");
+    writer.println("<tr>");
+    writer.println("<td>");
+    //writer.println("<img src=\"images/tomcat.gif\">");
+    writer.println("</td>");
+    writer.println("<td>");
+    writer.println("<h1>Sample Application Servlet</h1>");
+    writer.println("This is the output of a servlet that is part of");
+    writer.println("the Hello, World application.  It displays the");
+    writer.println("request headers from the request we are currently");
+    writer.println("processing.");
+    writer.println("</td>");
+    writer.println("</tr>");
+    writer.println("</table>");
 
-	writer.println("<table border=\"0\" width=\"100%\">");
-	Enumeration names = request.getHeaderNames();
-	while (names.hasMoreElements()) {
-	    String name = (String) names.nextElement();
-	    writer.println("<tr>");
-	    writer.println("  <th align=\"right\">" + name + ":</th>");
-	    writer.println("  <td>" + request.getHeader(name) + "</td>");
-	    writer.println("</tr>");
-	}
-	writer.println("</table>");
+    writer.println("<table border=\"0\" width=\"100%\">");
+    Enumeration names = request.getHeaderNames();
+    while (names.hasMoreElements()) {
+        String name = (String) names.nextElement();
+        writer.println("<tr>");
+        writer.println("  <th align=\"right\">" + name + ":</th>");
+        writer.println("  <td>" + request.getHeader(name) + "</td>");
+        writer.println("</tr>");
+    }
+    writer.println("</table>");
 
-	writer.println("</body>");
-	writer.println("</html>");
+    writer.println("</body>");
+    writer.println("</html>");
 
     }
 
diff --git a/appserver/tests/community/web/helloworld/src/test/HelloJSPTestNG.java b/appserver/tests/community/web/helloworld/src/test/HelloJSPTestNG.java
index b340dd1..b14e39c 100644
--- a/appserver/tests/community/web/helloworld/src/test/HelloJSPTestNG.java
+++ b/appserver/tests/community/web/helloworld/src/test/HelloJSPTestNG.java
@@ -34,13 +34,13 @@
 
     private static final String TEST_NAME =
         "simple-webapp-jspservlet-noresource";
-   
+
     private String strContextRoot="hellojsp";
 
     static String result = "";
     String host=System.getProperty("http.host");
     String port=System.getProperty("http.port");
-           
+
     /*
      *If two asserts are mentioned in one method, then last assert is taken in
      *to account.
@@ -52,9 +52,9 @@
     @Test(groups ={ "pulse"} ) // test method
     //public void webtest(String host, String port, String contextroot) throws Exception{
     public void simpleJSPTestPage() throws Exception{
-        
+
         try{
-         
+
 
         String testurl = "http://" + host  + ":" + port + "/"+ strContextRoot + "/hello.jsp";
         System.out.println("URL is: "+testurl);
@@ -70,20 +70,20 @@
 
         String line = null;
         boolean result=false;
-        String testLine = null;        
-	String EXPECTED_RESPONSE ="JSP Test Page";
+        String testLine = null;
+    String EXPECTED_RESPONSE ="JSP Test Page";
         while ((line = input.readLine()) != null) {
             if(line.indexOf(EXPECTED_RESPONSE)!=-1){
                 result=true;
              testLine = line;
            System.out.println(testLine);
             }
-          
-        }        
-                
+
+        }
+
         Assert.assertEquals(result, true,"Unexpected HTML");
-               
-        
+
+
         }catch(Exception e){
             e.printStackTrace();
             throw new Exception(e);
@@ -93,9 +93,9 @@
 
     @Test(groups={"pulse"}) //test method for server
     public void testServerRunning() throws Exception{
-	    //Your server is up and running!
-	    //
-	String testurl = "http://" + host  + ":" + port;
+        //Your server is up and running!
+        //
+    String testurl = "http://" + host  + ":" + port;
         System.out.println("URL is: "+testurl);
         URL url = new URL(testurl);
         echo("Connecting to: " + url.toString());
@@ -103,12 +103,12 @@
         conn.connect();
         int responseCode = conn.getResponseCode();
 
-	InputStream is = conn.getInputStream();
+    InputStream is = conn.getInputStream();
         BufferedReader input = new BufferedReader(new InputStreamReader(is));
 
         String line = null;
         boolean result=false;
-        String testLine = null;        
+        String testLine = null;
         while ((line = input.readLine()) != null) {
         echo(line);
             if(line.indexOf("Your Application Server is now running")!=-1){
@@ -116,17 +116,17 @@
              testLine = line;
            echo(testLine);
             }
-          
-        }        
-                
+
+        }
+
         Assert.assertEquals(result, true,"Unexpected HTML");
     }
-    
-    
+
+
     @Test(groups ={ "pulse"} ) // test method
     public void staticHTMLPageTest() throws Exception{
          try{
-         
+
 
         String testurl = "http://" + host  + ":" + port + "/"+ strContextRoot + "/first.html";
         System.out.println("URL is: "+testurl);
@@ -143,30 +143,30 @@
 
         String line = null;
         boolean result=false;
-        String testLine = null;        
+        String testLine = null;
         while ((line = input.readLine()) != null) {
             if(line.indexOf("Welcome to HTML Test Program")!=-1){
                 result=true;
              testLine = line;
            System.out.println(testLine);
             }
-          
-        }        
-                
+
+        }
+
         Assert.assertEquals(result, true,"Unexpected HTML");
-               
-        
+
+
         }catch(Exception e){
             e.printStackTrace();
             throw new Exception(e);
         }
-        
+
     }
-    
+
     @Test(groups ={ "pulse"} ) // test method
     public void simpleServletTest() throws Exception{
          try{
-         
+
 
         String testurl = "http://" + host  + ":" + port + "/"+ strContextRoot + "/simpleservlet";
         System.out.println("URL is: "+testurl);
@@ -182,24 +182,24 @@
 
         String line = null;
         boolean result=false;
-        String testLine = null;        
+        String testLine = null;
         while ((line = input.readLine()) != null) {
             if(line.indexOf("Sample Application Servlet")!=-1){
                 result=true;
              testLine = line;
            echo(testLine);
             }
-          
-        }        
-                
+
+        }
+
         Assert.assertEquals(result, true,"Unexpected HTML");
-               
-        
+
+
         }catch(Exception e){
             e.printStackTrace();
             throw new Exception(e);
         }
-        
+
     }
 
     public static void echo(String msg) {
