diff --git a/modules/core/pom.xml b/modules/core/pom.xml
index e87d1c0..33bda77 100644
--- a/modules/core/pom.xml
+++ b/modules/core/pom.xml
@@ -34,8 +34,8 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <configuration>
-          <source>1.4</source>
-          <target>1.4</target>
+          <source>1.5</source>
+          <target>1.5</target>
         </configuration>
       </plugin>
       <plugin>
diff --git a/modules/core/src/main/java/org/apache/savan/SavanMessageContext.java b/modules/core/src/main/java/org/apache/savan/SavanMessageContext.java
index fa95583..3442488 100644
--- a/modules/core/src/main/java/org/apache/savan/SavanMessageContext.java
+++ b/modules/core/src/main/java/org/apache/savan/SavanMessageContext.java
@@ -38,17 +38,17 @@
     }
 
     public void setMessageType(int type) {
-        messageContext.setProperty(SavanConstants.MESSAGE_TYPE, new Integer(type));
+        messageContext.setProperty(SavanConstants.MESSAGE_TYPE, type);
     }
 
     public int getMessageType() {
         Integer typeInt = (Integer)messageContext.getProperty(SavanConstants.MESSAGE_TYPE);
         if (typeInt == null) {
-            typeInt = new Integer(SavanConstants.MessageTypes.UNKNOWN);
+            typeInt = SavanConstants.MessageTypes.UNKNOWN;
             messageContext.setProperty(SavanConstants.MESSAGE_TYPE, typeInt);
         }
 
-        return typeInt.intValue();
+        return typeInt;
     }
 
     public ConfigurationContext getConfigurationContext() {
diff --git a/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiverDeligater.java b/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiverDelegator.java
similarity index 98%
rename from modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiverDeligater.java
rename to modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiverDelegator.java
index 6f1d0f3..68a072c 100644
--- a/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiverDeligater.java
+++ b/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiverDelegator.java
@@ -33,7 +33,7 @@
 import org.apache.savan.SavanConstants;
 import org.apache.savan.SavanException;
 import org.apache.savan.SavanMessageContext;
-import org.apache.savan.messagereceiver.MessageReceiverDeligater;
+import org.apache.savan.messagereceiver.MessageReceiverDelegator;
 import org.apache.savan.storage.SubscriberStore;
 import org.apache.savan.subscribers.Subscriber;
 import org.apache.savan.util.CommonUtil;
@@ -46,7 +46,7 @@
 import java.util.Date;
 
 
-public class AtomMessageReceiverDeligater extends MessageReceiverDeligater {
+public class AtomMessageReceiverDelegator extends MessageReceiverDelegator {
     private SOAPEnvelope findOrCreateSoapEnvelope(SavanMessageContext subscriptionMessage,
                                                   MessageContext outMessage) throws AxisFault {
         MessageContext subscriptionMsgCtx = subscriptionMessage.getMessageContext();
diff --git a/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java b/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java
index 8562300..4261025 100644
--- a/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java
+++ b/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java
@@ -20,7 +20,7 @@
 import org.apache.axis2.context.MessageContext;
 import org.apache.savan.SavanConstants;
 import org.apache.savan.SavanMessageContext;
-import org.apache.savan.messagereceiver.MessageReceiverDeligater;
+import org.apache.savan.messagereceiver.MessageReceiverDelegator;
 import org.apache.savan.subscribers.Subscriber;
 import org.apache.savan.subscription.SubscriptionProcessor;
 import org.apache.savan.util.UtilFactory;
@@ -62,8 +62,8 @@
         return new AtomSubscriptionProcessor();
     }
 
-    public MessageReceiverDeligater createMessageReceiverDeligater() {
-        return new AtomMessageReceiverDeligater();
+    public MessageReceiverDelegator createMessageReceiverDelegator() {
+        return new AtomMessageReceiverDelegator();
     }
 
     public Subscriber createSubscriber() {
diff --git a/modules/core/src/main/java/org/apache/savan/eventing/EventingMessageReceiverDeligater.java b/modules/core/src/main/java/org/apache/savan/eventing/EventingMessageReceiverDelegator.java
similarity index 98%
rename from modules/core/src/main/java/org/apache/savan/eventing/EventingMessageReceiverDeligater.java
rename to modules/core/src/main/java/org/apache/savan/eventing/EventingMessageReceiverDelegator.java
index 851ad79..f0eb37e 100644
--- a/modules/core/src/main/java/org/apache/savan/eventing/EventingMessageReceiverDeligater.java
+++ b/modules/core/src/main/java/org/apache/savan/eventing/EventingMessageReceiverDelegator.java
@@ -31,7 +31,7 @@
 import org.apache.savan.SavanException;
 import org.apache.savan.SavanMessageContext;
 import org.apache.savan.eventing.subscribers.EventingSubscriber;
-import org.apache.savan.messagereceiver.MessageReceiverDeligater;
+import org.apache.savan.messagereceiver.MessageReceiverDelegator;
 import org.apache.savan.storage.SubscriberStore;
 import org.apache.savan.subscribers.Subscriber;
 import org.apache.savan.util.CommonUtil;
@@ -41,7 +41,7 @@
 import java.util.Date;
 
 
-public class EventingMessageReceiverDeligater extends MessageReceiverDeligater {
+public class EventingMessageReceiverDelegator extends MessageReceiverDelegator {
 
     public void doProtocolSpecificProcessing(SavanMessageContext inSavanMessage,
                                              MessageContext outMessage) throws SavanException {
diff --git a/modules/core/src/main/java/org/apache/savan/eventing/EventingUtilFactory.java b/modules/core/src/main/java/org/apache/savan/eventing/EventingUtilFactory.java
index 32076c5..3e793ed 100644
--- a/modules/core/src/main/java/org/apache/savan/eventing/EventingUtilFactory.java
+++ b/modules/core/src/main/java/org/apache/savan/eventing/EventingUtilFactory.java
@@ -21,7 +21,7 @@
 import org.apache.savan.SavanConstants;
 import org.apache.savan.SavanMessageContext;
 import org.apache.savan.eventing.subscribers.EventingSubscriber;
-import org.apache.savan.messagereceiver.MessageReceiverDeligater;
+import org.apache.savan.messagereceiver.MessageReceiverDelegator;
 import org.apache.savan.subscribers.Subscriber;
 import org.apache.savan.subscription.SubscriptionProcessor;
 import org.apache.savan.util.UtilFactory;
@@ -62,8 +62,8 @@
         return new EventingSubscriptionProcessor();
     }
 
-    public MessageReceiverDeligater createMessageReceiverDeligater() {
-        return new EventingMessageReceiverDeligater();
+    public MessageReceiverDelegator createMessageReceiverDelegator() {
+        return new EventingMessageReceiverDelegator();
     }
 
     public Subscriber createSubscriber() {
diff --git a/modules/core/src/main/java/org/apache/savan/messagereceiver/MessageReceiverDeligater.java b/modules/core/src/main/java/org/apache/savan/messagereceiver/MessageReceiverDelegator.java
similarity index 83%
rename from modules/core/src/main/java/org/apache/savan/messagereceiver/MessageReceiverDeligater.java
rename to modules/core/src/main/java/org/apache/savan/messagereceiver/MessageReceiverDelegator.java
index 2fa6fb6..465da47 100644
--- a/modules/core/src/main/java/org/apache/savan/messagereceiver/MessageReceiverDeligater.java
+++ b/modules/core/src/main/java/org/apache/savan/messagereceiver/MessageReceiverDelegator.java
@@ -31,7 +31,7 @@
 import org.apache.savan.util.UtilFactory;
 
 /** Provide abstract functions that may be done by protocols at the MessageReceiver level. */
-public abstract class MessageReceiverDeligater {
+public abstract class MessageReceiverDelegator {
 
 
     public void processMessage(SavanMessageContext smc) throws SavanException {
@@ -56,7 +56,6 @@
         Parameter parameter = axisService.getParameter(SavanConstants.SUBSCRIBER_STORE);
         if (parameter == null) {
             setSubscriberStore(smc);
-            parameter = axisService.getParameter(SavanConstants.SUBSCRIBER_STORE);
         }
 
         UtilFactory utilFactory = smc.getProtocol().getUtilFactory();
@@ -66,14 +65,22 @@
 
         SubscriptionProcessor processor = utilFactory.createSubscriptionProcessor();
         processor.init(smc);
-        if (messageType == SavanConstants.MessageTypes.SUBSCRIPTION_MESSAGE) {
-            processor.subscribe(smc);
-        } else if (messageType == SavanConstants.MessageTypes.UNSUBSCRIPTION_MESSAGE) {
-            processor.unsubscribe(smc);
-        } else if (messageType == SavanConstants.MessageTypes.RENEW_MESSAGE) {
-            processor.renewSubscription(smc);
-        } else if (messageType == SavanConstants.MessageTypes.PUBLISH) {
-            processor.publish(smc);
+        switch (messageType) {
+            case SavanConstants.MessageTypes.SUBSCRIPTION_MESSAGE:
+                processor.subscribe(smc);
+                break;
+            case SavanConstants.MessageTypes.UNSUBSCRIPTION_MESSAGE:
+                processor.unsubscribe(smc);
+                break;
+            case SavanConstants.MessageTypes.RENEW_MESSAGE:
+                processor.renewSubscription(smc);
+                break;
+            case SavanConstants.MessageTypes.PUBLISH:
+                processor.publish(smc);
+                break;
+            case SavanConstants.MessageTypes.GET_STATUS_MESSAGE:
+                processor.getStatus(smc);
+                break;
         }
     }
 
diff --git a/modules/core/src/main/java/org/apache/savan/messagereceiver/SavanInOutMessageReceiver.java b/modules/core/src/main/java/org/apache/savan/messagereceiver/SavanInOutMessageReceiver.java
index 311106f..7a51589 100644
--- a/modules/core/src/main/java/org/apache/savan/messagereceiver/SavanInOutMessageReceiver.java
+++ b/modules/core/src/main/java/org/apache/savan/messagereceiver/SavanInOutMessageReceiver.java
@@ -45,10 +45,10 @@
         savanInMessage.setProtocol(protocol);
 
         UtilFactory utilFactory = protocol.getUtilFactory();
-        MessageReceiverDeligater deligator = utilFactory.createMessageReceiverDeligater();
+        MessageReceiverDelegator delegator = utilFactory.createMessageReceiverDelegator();
 
-        deligator.processMessage(savanInMessage);
-        deligator.doProtocolSpecificProcessing(savanInMessage, outMessage);
+        delegator.processMessage(savanInMessage);
+        delegator.doProtocolSpecificProcessing(savanInMessage, outMessage);
 
     }
 
diff --git a/modules/core/src/main/java/org/apache/savan/subscription/SubscriptionProcessor.java b/modules/core/src/main/java/org/apache/savan/subscription/SubscriptionProcessor.java
index 02eff7d..2beebd0 100644
--- a/modules/core/src/main/java/org/apache/savan/subscription/SubscriptionProcessor.java
+++ b/modules/core/src/main/java/org/apache/savan/subscription/SubscriptionProcessor.java
@@ -51,7 +51,7 @@
             throw new SavanException("AbstractSubscriber store not found");
 
         ExpirationBean bean = getExpirationBean(renewMessage);
-        Subscriber subscriber = (Subscriber)store.retrieve(bean.getSubscriberID());
+        Subscriber subscriber = store.retrieve(bean.getSubscriberID());
         if (subscriber == null) {
             throw new SavanException("Given subscriber is not present");
         }
@@ -62,9 +62,6 @@
     public void subscribe(SavanMessageContext subscriptionMessage) throws SavanException {
         SubscriberStore store = subscriptionMessage.getSubscriberStore();
         if (store == null)
-            throw new SavanException("AbstractSubscriber store not found");
-
-        if (store == null)
             throw new SavanException("Sabscriber store not found");
 
         Subscriber subscriber = getSubscriberFromMessage(subscriptionMessage);
@@ -76,10 +73,13 @@
 
         SubscriberStore store = CommonUtil.getSubscriberStore(serviceContext.getAxisService());
         if (store == null) {
-            //TODO do something
+            throw new SavanException("SubscriberStore not found");
         }
 
         Subscriber subscriber = store.retrieve(subscriberID);
+        if (subscriber == null) {
+            throw new SavanException("No such subscriber '" + subscriberID + "'");
+        }
 //		doProtocolSpecificEndSubscription(subscriber,reason,serviceContext.getConfigurationContext());
 
         store.delete(subscriberID);
@@ -94,6 +94,8 @@
                                serviceContext.getAxisService(), null);
     }
 
+    public void getStatus(SavanMessageContext smc) {
+    }
 
     public abstract void pauseSubscription(SavanMessageContext pauseSubscriptionMessage)
             throws SavanException;
@@ -108,6 +110,4 @@
             throws SavanException;
 
     public abstract String getSubscriberID(SavanMessageContext smc) throws SavanException;
-
-
 }
diff --git a/modules/core/src/main/java/org/apache/savan/util/UtilFactory.java b/modules/core/src/main/java/org/apache/savan/util/UtilFactory.java
index a7b2547..9630a77 100644
--- a/modules/core/src/main/java/org/apache/savan/util/UtilFactory.java
+++ b/modules/core/src/main/java/org/apache/savan/util/UtilFactory.java
@@ -18,7 +18,7 @@
 package org.apache.savan.util;
 
 import org.apache.savan.SavanMessageContext;
-import org.apache.savan.messagereceiver.MessageReceiverDeligater;
+import org.apache.savan.messagereceiver.MessageReceiverDelegator;
 import org.apache.savan.subscription.SubscriptionProcessor;
 
 /**
@@ -31,6 +31,6 @@
 
     public abstract SubscriptionProcessor createSubscriptionProcessor();
 
-    public abstract MessageReceiverDeligater createMessageReceiverDeligater();
+    public abstract MessageReceiverDelegator createMessageReceiverDelegator();
 
 }
diff --git a/modules/mar/pom.xml b/modules/mar/pom.xml
index ccc3438..765c8f2 100644
--- a/modules/mar/pom.xml
+++ b/modules/mar/pom.xml
@@ -52,8 +52,8 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <configuration>
-          <source>1.4</source>
-          <target>1.4</target>
+          <source>1.5</source>
+          <target>1.5</target>
         </configuration>
       </plugin>
 
diff --git a/modules/samples/eventing/src/sample/eventing/Client.java b/modules/samples/eventing/src/sample/eventing/Client.java
index 798f2ce..936d771 100644
--- a/modules/samples/eventing/src/sample/eventing/Client.java
+++ b/modules/samples/eventing/src/sample/eventing/Client.java
@@ -16,10 +16,6 @@
 
 package sample.eventing;
 
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
@@ -30,14 +26,14 @@
 import org.apache.savan.eventing.client.EventingClientBean;
 import org.apache.savan.eventing.client.SubscriptionStatus;
 
-import javax.xml.namespace.QName;
 import java.io.BufferedReader;
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
 
 public class Client {
 
+    boolean done = false;
+
     BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
 
     private final int MIN_OPTION = 1;
@@ -46,16 +42,14 @@
     private final String SUBSCRIBER_1_ID = "subscriber1";
     private final String SUBSCRIBER_2_ID = "subscriber2";
 
-    private ServiceClient serviceClient = null;
-    private Options options = null;
     private EventingClient eventingClient = null;
 
     private String toAddressPart = "/axis2/services/PublisherService";
     private String listener1AddressPart = "/axis2/services/ListenerService1";
     private String listener2AddressPart = "/axis2/services/ListenerService2";
 
-    private final String applicationNamespaceName = "http://tempuri.org/";
-    private final String dummyMethod = "dummyMethod";
+//    private final String applicationNamespaceName = "http://tempuri.org/";
+//    private final String dummyMethod = "dummyMethod";
 
     private static String repo = null;
     private static int port = 8080;
@@ -67,8 +61,8 @@
 
     public static void main(String[] args) throws Exception {
 
-        for (int i = 0; i < args.length; i++) {
-            if (helpParam.equalsIgnoreCase(args[i])) {
+        for (String arg : args) {
+            if (helpParam.equalsIgnoreCase(arg)) {
                 displayHelp();
                 System.exit(0);
             }
@@ -140,14 +134,13 @@
 
         //TODO publish
 
-        System.out.println("Press enter to initialize the publisher service.");
-        reader.readLine();
+//        System.out.println("Press enter to initialize the publisher service.");
+//        reader.readLine();
+//
+//        options.setAction("uuid:DummyMethodAction");
+//        serviceClient.fireAndForget(getDummyMethodRequestElement());
 
-        options.setAction("uuid:DummyMethodAction");
-        serviceClient.fireAndForget(getDummyMethodRequestElement());
-
-        while (true) {
-
+        while (!done) {
             validOptionSelected = false;
             selectedOption = -1;
             while (!validOptionSelected) {
@@ -187,24 +180,21 @@
     }
 
     private void initClient() throws AxisFault {
-
         String CLIENT_REPO = null;
-        String AXIS2_XML = null;
 
         if (repo != null) {
             CLIENT_REPO = repo;
-            AXIS2_XML = repo + File.separator + "axis2.xml";
         } else {
 //			throw new AxisFault ("Please specify the client repository as a program argument.Use '-h' for help.");
         }
 
         ConfigurationContext configContext = ConfigurationContextFactory
                 .createConfigurationContextFromFileSystem(CLIENT_REPO, null);
-        serviceClient = new ServiceClient(configContext, null); //TODO give a repo
+        ServiceClient serviceClient = new ServiceClient(configContext, null);
 
-        options = new Options();
+        Options options = new Options();
         serviceClient.setOptions(options);
-        serviceClient.engageModule(new QName("addressing"));
+        serviceClient.engageModule("addressing");
 
         eventingClient = new EventingClient(serviceClient);
 
@@ -242,7 +232,7 @@
                 doGetStatus(SUBSCRIBER_2_ID);
                 break;
             case 9:
-                System.exit(0);
+                done = true;
                 break;
             default:
                 break;
@@ -283,10 +273,10 @@
         System.out.println("Status of the subscriber '" + ID + "' is" + statusValue);
     }
 
-    private OMElement getDummyMethodRequestElement() {
-        OMFactory fac = OMAbstractFactory.getOMFactory();
-        OMNamespace namespace = fac.createOMNamespace(applicationNamespaceName, "ns1");
-        return fac.createOMElement(dummyMethod, namespace);
-    }
+//    private OMElement getDummyMethodRequestElement() {
+//        OMFactory fac = OMAbstractFactory.getOMFactory();
+//        OMNamespace namespace = fac.createOMNamespace(applicationNamespaceName, "ns1");
+//        return fac.createOMElement(dummyMethod, namespace);
+//    }
 
 }
diff --git a/modules/samples/pom.xml b/modules/samples/pom.xml
index 1a05b04..765077a 100755
--- a/modules/samples/pom.xml
+++ b/modules/samples/pom.xml
@@ -35,8 +35,8 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <configuration>
-          <source>1.4</source>
-          <target>1.4</target>
+          <source>1.5</source>
+          <target>1.5</target>
         </configuration>
       </plugin>
       <!--
diff --git a/pom.xml b/pom.xml
index 5e9b67d..547ae19 100644
--- a/pom.xml
+++ b/pom.xml
@@ -102,8 +102,8 @@
 				<artifactId>maven-compiler-plugin</artifactId>
 				<version>2.0</version>
 				<configuration>
-					<source>1.4</source>
-					<target>1.4</target>
+					<source>1.5</source>
+					<target>1.5</target>
 				</configuration>
 			</plugin>
 			<plugin>
