diff --git a/maven.xml b/maven.xml
index 5a0b993..d72e047 100644
--- a/maven.xml
+++ b/maven.xml
@@ -1,78 +1,78 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project default="jar"
-	xmlns:j="jelly:core"
-    xmlns:maven="jelly:maven"
-    xmlns:deploy="deploy"
-    xmlns:ant="jelly:ant">
-    
+         xmlns:j="jelly:core"
+         xmlns:maven="jelly:maven"
+         xmlns:deploy="deploy"
+         xmlns:ant="jelly:ant">
+
     <goal name="setclasspath">
         <path id="test.classpath">
             <path refid="maven.dependency.classpath"/>
         </path>
     </goal>
-    
+
     <postGoal name="jar">
-    	<ant:mkdir dir="${basedir}/target/lib"/>
-    	<deploy:copy-deps todir="${basedir}/target/lib"/>
+        <ant:mkdir dir="${basedir}/target/lib"/>
+        <deploy:copy-deps todir="${basedir}/target/lib"/>
     </postGoal>
-    
+
     <preGoal name="java:compile">
-    <mkdir dir="${maven.build.dir}/stubs/src"/>
-    
-    	<ant:echo>+----------------------------------------+</ant:echo>
-        <ant:echo>| Code Generating For WS-Coordination    |</ant:echo>
+        <mkdir dir="${maven.build.dir}/stubs/src"/>
+
         <ant:echo>+----------------------------------------+</ant:echo>
-    	<java classname="org.apache.axis2.wsdl.WSDL2Java"
-    		failonerror="true" fork="yes">
-    		<classpath>
-    			<path refid="maven.dependency.classpath"/>
-    		</classpath> 
-    		<arg value="-ss"/>
-    		<arg value="-uri"/>
-    		<arg value="${basedir}/schema/wscoor.wsdl"/>   		
-    		<arg value="-o"/>
-    		<arg value="${maven.build.dir}/stubs/src/wscoor"/>   
-    	</java>
- 
- 		<ant:echo>+------------------------------------------+</ant:echo>
+        <ant:echo>| Code Generating For WS-Coordination |</ant:echo>
+        <ant:echo>+----------------------------------------+</ant:echo>
+        <java classname="org.apache.axis2.wsdl.WSDL2Java"
+              failonerror="true" fork="yes">
+            <classpath>
+                <path refid="maven.dependency.classpath"/>
+            </classpath>
+            <arg value="-ss"/>
+            <arg value="-uri"/>
+            <arg value="${basedir}/schema/wscoor.wsdl"/>
+            <arg value="-o"/>
+            <arg value="${maven.build.dir}/stubs/src/wscoor"/>
+        </java>
+
+        <ant:echo>+------------------------------------------+</ant:echo>
         <ant:echo>| Code Generating For WS-AtomicTransaction |</ant:echo>
-        <ant:echo>+------------------------------------------+ </ant:echo>
-    	<java classname="org.apache.axis2.wsdl.WSDL2Java"
-    		failonerror="true" fork="yes">
-    		<classpath>
-    			<path refid="maven.dependency.classpath"/>
-    		</classpath>    		
-    		<arg value="-uri"/>
-    		<arg value="${basedir}/schema/wsat.wsdl"/>   		
-    		<arg value="-o"/>
-    		<arg value="${maven.build.dir}/stubs/src/wsat"/>  
-    	</java>
-		
+        <ant:echo>+------------------------------------------+</ant:echo>
+        <java classname="org.apache.axis2.wsdl.WSDL2Java"
+              failonerror="true" fork="yes">
+            <classpath>
+                <path refid="maven.dependency.classpath"/>
+            </classpath>
+            <arg value="-uri"/>
+            <arg value="${basedir}/schema/wsat.wsdl"/>
+            <arg value="-o"/>
+            <arg value="${maven.build.dir}/stubs/src/wsat"/>
+        </java>
+
         <ant:echo>Copying generated *Class(.class)* file + it's resources to Classpath</ant:echo>
-		<mkdir dir="${maven.build.dir}/classes/schema/system/foo"/>
+        <mkdir dir="${maven.build.dir}/classes/schema/system/foo"/>
         <copy todir="${maven.build.dir}/classes/schema/system/foo">
             <fileset dir="${maven.build.dir}/stubs/src/wscoor/schema/system/foo">
                 <include name="*.*"/>
             </fileset>
         </copy>
-    	<ant:path
-    		id="stubs.src.wscoor.dir"
-    		location="${maven.build.dir}/stubs/src/wscoor"/> 
-    	<ant:path
-    		id="stubs.src.wsat.dir"
-    		location="${maven.build.dir}/stubs/src/wsat"/>  
-    	
-    	<maven:addPath
-    		id="maven.compile.src.set"
-    		refid="stubs.src.wscoor.dir"/>  
-    	<maven:addPath
-    		id="maven.compile.src.set"
-    		refid="stubs.src.wsat.dir"/> 	
+        <ant:path
+                id="stubs.src.wscoor.dir"
+                location="${maven.build.dir}/stubs/src/wscoor"/>
+        <ant:path
+                id="stubs.src.wsat.dir"
+                location="${maven.build.dir}/stubs/src/wsat"/>
+
+        <maven:addPath
+                id="maven.compile.src.set"
+                refid="stubs.src.wscoor.dir"/>
+        <maven:addPath
+                id="maven.compile.src.set"
+                refid="stubs.src.wsat.dir"/>
     </preGoal>
-   
+
     <!--
     <goal name="build-samples">
-    	<ant:ant antfile="build.xml" inheritall="true" inheritrefs="true" dir="src/samples/"/>
+        <ant:ant antfile="build.xml" inheritall="true" inheritrefs="true" dir="src/samples/"/>
     </goal>
     -->
 </project>
diff --git a/test-resources/testing-repository/axis2.xml b/test-resources/testing-repository/axis2.xml
index 46621f3..a0d529c 100644
--- a/test-resources/testing-repository/axis2.xml
+++ b/test-resources/testing-repository/axis2.xml
@@ -12,11 +12,10 @@
     <parameter name="userName" locked="xsd:false">admin</parameter>
     <parameter name="password" locked="xsd:false">axis2</parameter>
 
-<!--    The way of adding listener to the system-->
-<!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-<!--        <parameter name="RSS_URL" locked="xsd:false">http://127.0.0.1/rss</parameter>-->
-<!--    </listener>-->
-
+    <!--    The way of adding listener to the system-->
+    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
+    <!--        <parameter name="RSS_URL" locked="xsd:false">http://127.0.0.1/rss</parameter>-->
+    <!--    </listener>-->
 
 
     <!-- ================================================= -->
diff --git a/test/org/apache/kandula/coordinator/CoordinatorImplTest.java b/test/org/apache/kandula/coordinator/CoordinatorImplTest.java
index 725226c..bd5aecc 100644
--- a/test/org/apache/kandula/coordinator/CoordinatorImplTest.java
+++ b/test/org/apache/kandula/coordinator/CoordinatorImplTest.java
@@ -21,8 +21,8 @@
 import org.apache.kandula.KandulaException;
 import org.apache.kandula.Status;
 import org.apache.kandula.context.ActivityContext;
+import org.apache.kandula.context.coordination.CoordinationContext;
 import org.apache.kandula.context.at.ATActivityContext;
-import org.apache.kandula.typemapping.CoordinationContext;
 import org.xmlsoap.schemas.ws.x2003.x09.wscoor.CoordinationContextType;
 
 /**
@@ -48,29 +48,29 @@
      * Class under test for ActivityContext createCoordinationContext(String, long)
      */
     public void testCreateCoordinationContextStringlong() throws KandulaException {
-        Coordinator coordinator =  new Coordinator();
-        ActivityContext context = coordinator.createCoordinationContext(Constants.WS_AT,3000);
+        Coordinator coordinator = new Coordinator();
+        ActivityContext context = coordinator.createCoordinationContext(Constants.WS_AT, 3000);
         assertTrue(ATActivityContext.class.isInstance(context));
         assertNotNull(context.getCoordinationContext());
-        assertTrue(context.getStatus()==Status.CoordinatorStatus.STATUS_ACTIVE);
+        assertTrue(context.getStatus() == Status.CoordinatorStatus.STATUS_ACTIVE);
     }
 
     /*
      * Class under test for ActivityContext createCoordinationContext(CoordinationContext)
      */
     public void testCreateCoordinationContextCoordinationContext() throws KandulaException {
-        Coordinator coordinator =  new Coordinator();
-        CoordinationContext coorContext =  CoordinationContext.Factory.newInstance();
+        Coordinator coordinator = new Coordinator();
+        CoordinationContext coorContext = CoordinationContext.Factory.newInstance();
         coorContext.setCoordinationType(Constants.WS_AT);
         coorContext.setExpires(3000);
         coorContext.setActivityID("uuid:29919219jdk02102021");
-       // coorContext.setRegistrationService()
+        // coorContext.setRegistrationService()
         ActivityContext context = coordinator.createCoordinationContext(coorContext);
         assertTrue(ATActivityContext.class.isInstance(context));
         assertNotNull(context.getCoordinationContext());
-        assertTrue(context.getStatus()==Status.CoordinatorStatus.STATUS_ACTIVE);
-        assertEquals(context.getCoordinationContext().getCoordinationType(),coorContext.getCoordinationType());
-        assertEquals(context.getCoordinationContext().getActivityID(),coorContext.getActivityID());
+        assertTrue(context.getStatus() == Status.CoordinatorStatus.STATUS_ACTIVE);
+        assertEquals(context.getCoordinationContext().getCoordinationType(), coorContext.getCoordinationType());
+        assertEquals(context.getCoordinationContext().getActivityID(), coorContext.getActivityID());
     }
 
     public void testRegisterParticipant() {
diff --git a/test/org/apache/kandula/coordinator/at/ATCoordinatorTest.java b/test/org/apache/kandula/coordinator/at/ATCoordinatorTest.java
index 27e00a1..cb1a53f 100644
--- a/test/org/apache/kandula/coordinator/at/ATCoordinatorTest.java
+++ b/test/org/apache/kandula/coordinator/at/ATCoordinatorTest.java
@@ -32,6 +32,7 @@
 
     /**
      * Constructor for ATCoordinatorTest.
+     *
      * @param arg0
      */
     public ATCoordinatorTest(String arg0) {
diff --git a/test/org/apache/kandula/coordinator/context/ActivityContextTest.java b/test/org/apache/kandula/coordinator/context/ActivityContextTest.java
index 713cc4e..886c4a2 100644
--- a/test/org/apache/kandula/coordinator/context/ActivityContextTest.java
+++ b/test/org/apache/kandula/coordinator/context/ActivityContextTest.java
@@ -14,7 +14,7 @@
  *  limitations under the License.
  *
  */
-package org.apache.kandula.coordinator.context;
+package org.apache.kandula.context;
 
 import junit.framework.TestCase;
 
diff --git a/test/org/apache/kandula/integration/CreateCoordinationContextTest.java b/test/org/apache/kandula/integration/CreateCoordinationContextTest.java
index a85788e..688a90c 100644
--- a/test/org/apache/kandula/integration/CreateCoordinationContextTest.java
+++ b/test/org/apache/kandula/integration/CreateCoordinationContextTest.java
@@ -20,10 +20,7 @@
  * @author <a href="mailto:thilina@opensource.lk">Thilina Gunarathne </a>
  */
 
-import java.io.File;
-
 import junit.framework.TestCase;
-
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.context.ConfigurationContext;
@@ -32,12 +29,14 @@
 import org.apache.kandula.Constants;
 import org.apache.kandula.initiator.TransactionManager;
 
+import java.io.File;
+
 public class CreateCoordinationContextTest extends TestCase {
 
     private String repository = "test-resources/testing-repository";
-    
+
     private SimpleHTTPServer server;
-    
+
     private boolean finish = false;
 
 
@@ -55,7 +54,7 @@
         if (!file.exists()) {
             throw new Exception(
                     "repository directory " + file.getAbsolutePath() +
-                    " does not exists");
+                            " does not exists");
         }
         ConfigurationContext er = erfac.buildConfigurationContext(
                 file.getAbsolutePath());
@@ -66,7 +65,7 @@
             server.start();
             System.out.print(
                     "Server started on port " + 8081 +
-                    ".....");
+                            ".....");
         } finally {
 
         }
@@ -85,7 +84,6 @@
     }
 
 
-   
     public void testEchoXMLSync() throws Exception {
         TransactionManager tm = new TransactionManager(Constants.WS_AT, new EndpointReference("http://localhost:8081/axis/services/ActivationCoordinator"));
         //Thread.sleep(100000);
