Removing subs_mgr dependancy from util

diff --git a/include/savan_sub_processor.h b/include/savan_sub_processor.h
index 94143a1..6453aab 100644
--- a/include/savan_sub_processor.h
+++ b/include/savan_sub_processor.h
@@ -34,6 +34,7 @@
 #include <axutil_env.h>
 #include <axis2_conf_ctx.h>
 #include <axutil_array_list.h>
+#include <savan_subscriber.h>
 
 #ifdef __cplusplus
 extern "C"
@@ -121,7 +122,43 @@
     savan_sub_processor_free(
         savan_sub_processor_t * sub_processor,
         const axutil_env_t * env);
-    
+ 
+    AXIS2_EXTERN savan_subscriber_t *AXIS2_CALL
+    savan_sub_processor_get_subscriber_from_msg(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        struct savan_subs_mgr *subs_mgr,
+        const axis2_char_t *sub_id);
+
+    AXIS2_EXTERN savan_subscriber_t *AXIS2_CALL
+    savan_sub_processor_get_subscriber_from_renew_msg(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        struct savan_subs_mgr *subs_mgr,
+        const axis2_char_t *sub_id);
+
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    savan_sub_processor_add_subscriber(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        struct savan_subs_mgr *subs_mgr,
+        savan_subscriber_t *subscriber);
+
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    savan_sub_processor_update_subscriber(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        struct savan_subs_mgr *subs_mgr,
+        savan_subscriber_t *subscriber);
+
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    savan_sub_processor_remove_subscriber(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        struct savan_subs_mgr *subs_mgr,
+        savan_subscriber_t *subscriber);
+
+   
 /** @} */
 #ifdef __cplusplus
 }
diff --git a/include/savan_subs_mgr.h b/include/savan_subs_mgr.h
index b6566bc..d2134d7 100644
--- a/include/savan_subs_mgr.h
+++ b/include/savan_subs_mgr.h
@@ -39,6 +39,7 @@
  
 typedef struct savan_subs_mgr savan_subs_mgr_t;
 typedef struct savan_subs_mgr_ops savan_subs_mgr_ops_t;
+struct axis2_conf_ctx;
 
  /**
  * @brief Subscription Manager ops struct
@@ -204,6 +205,57 @@
     const axis2_char_t *topic_name,
     const axis2_char_t *topic_url);
 
+AXIS2_EXTERN savan_subscriber_t *AXIS2_CALL
+savan_subs_mgr_get_subscriber_from_msg(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        savan_subs_mgr_t *subs_mgr,
+        const axis2_char_t *sub_id);
+
+AXIS2_EXTERN savan_subscriber_t *AXIS2_CALL
+savan_subs_mgr_get_subscriber_from_renew_msg(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        savan_subs_mgr_t *subs_mgr,
+        const axis2_char_t *sub_id);
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_subs_mgr_add_subscriber(
+    const axutil_env_t *env,
+    axis2_msg_ctx_t *msg_ctx,
+    savan_subs_mgr_t *subs_mgr,
+    savan_subscriber_t *subscriber);
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_subs_mgr_update_subscriber_with_msg_ctx(
+    const axutil_env_t *env,
+    axis2_msg_ctx_t *msg_ctx,
+    savan_subs_mgr_t *subs_mgr,
+    savan_subscriber_t *subscriber);
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_subs_mgr_remove_subscriber_with_msg_ctx(
+    const axutil_env_t *env,
+    axis2_msg_ctx_t *msg_ctx,
+    savan_subs_mgr_t *subs_mgr,
+    savan_subscriber_t *subscriber);
+
+/**
+ * Retrieve subs mgr. If it is already created for this request scope then it should be 
+ * available as a message context property. Otherwise create it and set as message context
+ * property.
+ * @param env environment object
+ * @param conf_ctx configuration context instance
+ * @param conf Axis2 main configuration instance
+ * @return subs manager
+ */
+AXIS2_EXTERN struct savan_subs_mgr * AXIS2_CALL
+savan_subs_mgr_get_subs_mgr(
+    const axutil_env_t *env,
+    struct axis2_conf_ctx *conf_ctx,
+    axis2_conf_t *conf);
+
+
 /** @} */
 #ifdef __cplusplus
 }
diff --git a/include/savan_util.h b/include/savan_util.h
index 3796ee4..1acb6fb 100644
--- a/include/savan_util.h
+++ b/include/savan_util.h
@@ -126,38 +126,6 @@
         axis2_msg_ctx_t *msg_ctx);
 
     /**
-    * Find the subscriber instacne from the store using the given messsage context.
-    * @param env pointer to environment struct
-    * @param msg_ctx pointer to message context
-    * @param sub_id pointer to subscription id 
-    * @return a pointer to subscriber on success, else NULL
-    */
-
-    AXIS2_EXTERN savan_subscriber_t * AXIS2_CALL
-    savan_util_get_subscriber_from_msg(
-        const axutil_env_t *env,
-        axis2_msg_ctx_t *msg_ctx,
-        struct savan_subs_mgr *subs_mgr,
-        const axis2_char_t *sub_id);
-
-    /**
-    * Parse the renew message to retrieve subscriber id and requested expire date. Then retrieve
-    * the subscriber instance from the store using the given messsage and set the expire date
-    * requested as allowed by policy.
-    * @param env pointer to environment struct
-    * @param msg_ctx pointer to message context
-    * @param sub_id pointer to subscription id 
-    * @return a pointer to subscriber on success, else NULL
-    */
-
-    AXIS2_EXTERN savan_subscriber_t * AXIS2_CALL
-    savan_util_get_subscriber_from_renew_msg(
-        const axutil_env_t *env,
-        axis2_msg_ctx_t *msg_ctx,
-        struct savan_subs_mgr *subs_mgr,
-        const axis2_char_t *sub_id);
-
-    /**
     * Get the subscriber store from the service
     * Note that if the subscription manager is a separate service from
     * the publisher service then both SubscriptionMgrName and SubscriptionMgrURL
@@ -173,51 +141,6 @@
         axis2_msg_ctx_t *msg_ctx);
 
     /**
-    * Add the subscriber to subscription manager services' store
-    * Note that if the subscription manager is a separate service from
-    * the publisher service then both SubscriptionMgrName and SubscriptionMgrURL
-    * must be set in the publishers services.xml
-    * @param env pointer to environment struct
-    * @param msg_ctx pointer to message context
-    * @param subs_mgr pointer to subs_mgr
-    * @param subscriber
-    * @return the store on success, else NULL
-    */
-
-    AXIS2_EXTERN axis2_status_t AXIS2_CALL
-    savan_util_add_subscriber(
-        const axutil_env_t *env,
-        axis2_msg_ctx_t *msg_ctx,
-        struct savan_subs_mgr *subs_mgr,
-        savan_subscriber_t *subscriber);
-
-    AXIS2_EXTERN axis2_status_t AXIS2_CALL
-    savan_util_update_subscriber(
-        const axutil_env_t *env,
-        axis2_msg_ctx_t *msg_ctx,
-        struct savan_subs_mgr *subs_mgr,
-        savan_subscriber_t *subscriber);
-
-    /**
-    * Remove the subscriber from subscription manager services' store
-    * Note that if the subscription manager is a separate service from
-    * the publisher service then both SubscriptionMgrName and SubscriptionMgrURL
-    * must be set in the publishers services.xml
-    * @param env pointer to environment struct
-    * @param msg_ctx pointer to message context
-    * @param subs_mgr pointer to subs_mgr
-    * @param subscriber
-    * @return the store on success, else NULL
-    */
-
-    AXIS2_EXTERN axis2_status_t AXIS2_CALL
-    savan_util_remove_subscriber(
-        const axutil_env_t *env,
-        axis2_msg_ctx_t *msg_ctx,
-        struct savan_subs_mgr *subs_mgr,
-        savan_subscriber_t *subscriber);
-
-    /**
     * Calculate and return an expiry time for the subscription
     * @param env pointer to environment struct
     * @return the expiry time on success, else NULL
@@ -251,21 +174,6 @@
         const axutil_env_t *env,
         axis2_char_t *store_name);
 
-    /**
-    * Get the subscribers registered for a topic
-    * @param env pointer to environment struct
-    * @param topic topic for which the subscribers are registered
-    * @param subs_mgr_url url of the subscription manager
-    * @return subscribers in a array list
-    */
-    AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
-    savan_util_get_subscriber_list_from_remote_subs_mgr(
-        const axutil_env_t *env,
-        axis2_char_t *topic,
-        axis2_char_t *subs_mgr_url,
-        void *svc_client,
-        axis2_conf_t *conf);
-
     AXIS2_EXTERN axis2_char_t *AXIS2_CALL
     savan_util_get_topic_name_from_topic_url(
         const axutil_env_t *env,
@@ -299,26 +207,6 @@
         axis2_conf_t *conf,
         axis2_char_t *name);
 
-    /**
-    * Get the topics registered in a subscription manager
-    * @param env pointer to environment struct
-    * @param subs_mgr_url url of the subscription manager
-    * @return subscribers in a array list
-    */
-    AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
-    savan_util_get_topic_list_from_remote_subs_mgr(
-        const axutil_env_t *env,
-        axis2_char_t *subs_mgr_url,
-        void *s_client);
-
-    AXIS2_EXTERN savan_subscriber_t *AXIS2_CALL
-    savan_util_get_subscriber_from_remote_subs_mgr(
-        const axutil_env_t *env,
-        axis2_char_t *subs_id,
-        axis2_char_t *subs_mgr_url,
-        void *s_client,
-        axis2_conf_t *conf);
-
     AXIS2_EXTERN void *AXIS2_CALL
     savan_util_get_svc_client(
         const axutil_env_t *env);
@@ -343,21 +231,6 @@
         axiom_node_t *parent_node);
 
     /**
-     * Retrieve subs mgr. If it is already created for this request scope then it should be 
-     * available as a message context property. Otherwise create it and set as message context
-     * property.
-     * @param env environment object
-     * @param conf_ctx configuration context instance
-     * @param conf Axis2 main configuration instance
-     * @return subs manager
-     */
-    AXIS2_EXTERN struct savan_subs_mgr * AXIS2_CALL
-    savan_util_get_subs_mgr(
-        const axutil_env_t *env,
-        axis2_conf_ctx_t *conf_ctx,
-        axis2_conf_t *conf);
-
-    /**
      * Retrieve filter handler. If it is already created for this request scope then it should be 
      * available as a message context property. Otherwise create it and set as message context
      * property.
diff --git a/src/Makefile.am b/src/Makefile.am
index e2d1e96..fcfdb0e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,2 +1,2 @@
-SUBDIRS = handlers subscribers util filters subs_mgrs publishers msgreceivers client core
+SUBDIRS = handlers subscribers util filters publishers client subs_mgrs msgreceivers core
 EXTRA_DIST=data
diff --git a/src/client/Makefile.am b/src/client/Makefile.am
index b2acf9e..7ecc231 100644
--- a/src/client/Makefile.am
+++ b/src/client/Makefile.am
@@ -3,7 +3,6 @@
 
 libsavan_client_la_SOURCES = savan_client.c
 libsavan_client_la_LIBADD = $(top_builddir)/src/util/libsavan_util.la \
-							../subs_mgrs/@SAVAN_SUBS_MGR@/libsavan_subs_mgr.la \
 							../filters/@SAVAN_FILTER_LIB@ 
 
 INCLUDES = -I$(top_builddir)/include \
diff --git a/src/client/savan_client.c b/src/client/savan_client.c
index 92ca5d3..db807f0 100644
--- a/src/client/savan_client.c
+++ b/src/client/savan_client.c
@@ -24,7 +24,6 @@
 #include <savan_util.h>
 #include <savan_constants.h>
 #include <savan_subscriber.h>
-#include <savan_subs_mgr.h>
 
 struct savan_client_t
 {
diff --git a/src/core/savan_sub_processor.c b/src/core/savan_sub_processor.c
index d8f524f..74898c3 100644
--- a/src/core/savan_sub_processor.c
+++ b/src/core/savan_sub_processor.c
@@ -137,7 +137,7 @@
 		return status;
 	}
 
-    if(AXIS2_SUCCESS != (status = savan_util_add_subscriber(env, msg_ctx, 
+    if(AXIS2_SUCCESS != (status = savan_subs_mgr_add_subscriber(env, msg_ctx, 
                     sub_processor->subs_mgr, subscriber)))
 	{
         savan_subscriber_free(subscriber, env);
@@ -160,7 +160,7 @@
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_sub_processor_unsubscribe");
 
-    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, sub_processor->subs_mgr, NULL);
+    subscriber = savan_subs_mgr_get_subscriber_from_msg(env, msg_ctx, sub_processor->subs_mgr, NULL);
     if (!subscriber)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to find the subscriber"); 
@@ -172,7 +172,7 @@
     savan_sub_processor_set_sub_id_to_msg_ctx(env, msg_ctx, id);
 
     /* Remove from store */
-    status = savan_util_remove_subscriber(env, msg_ctx, sub_processor->subs_mgr, subscriber);
+    status = savan_subs_mgr_remove_subscriber_with_msg_ctx(env, msg_ctx, sub_processor->subs_mgr, subscriber);
     if (status != AXIS2_SUCCESS)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to remove the subscriber"); 
@@ -214,7 +214,7 @@
         return AXIS2_FAILURE;
     }
 
-    subscriber = savan_util_get_subscriber_from_renew_msg(env, msg_ctx, sub_processor->subs_mgr, NULL);
+    subscriber = savan_subs_mgr_get_subscriber_from_renew_msg(env, msg_ctx, sub_processor->subs_mgr, NULL);
     if (!subscriber)
     {
         axis2_char_t *reason = NULL;
@@ -531,3 +531,4 @@
     }
 }
 
+
diff --git a/src/handlers/savan_in_handler.c b/src/handlers/savan_in_handler.c
index 0afa765..f35215d 100644
--- a/src/handlers/savan_in_handler.c
+++ b/src/handlers/savan_in_handler.c
@@ -82,7 +82,7 @@
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
 
-    subs_mgr = savan_util_get_subs_mgr(env, conf_ctx, conf);
+    subs_mgr = savan_subs_mgr_get_subs_mgr(env, conf_ctx, conf);
     if(!subs_mgr)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the database. Check \
diff --git a/src/msgreceivers/savan_msg_recv.c b/src/msgreceivers/savan_msg_recv.c
index b04ba64..52d0281 100644
--- a/src/msgreceivers/savan_msg_recv.c
+++ b/src/msgreceivers/savan_msg_recv.c
@@ -123,7 +123,7 @@
 
     pub_mod = savan_publisher_create_with_conf(env, conf);
 
-    subs_mgr = savan_util_get_subs_mgr(env, conf_ctx, conf);
+    subs_mgr = savan_subs_mgr_get_subs_mgr(env, conf_ctx, conf);
     savan_publisher_publish(pub_mod, env, msg_ctx, subs_mgr);
     savan_publisher_free(pub_mod, env);
     
@@ -281,7 +281,7 @@
     axiom_element_set_text(id_elem, env, id, id_node);
     
     /* Expires element. Get expiry time from subscriber and set */
-    /*subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, subs_mgr, id);*/
+    /*subscriber = savan_subs_mgr_get_subscriber_from_msg(env, msg_ctx, subs_mgr, id);*/
     subs_prop = axis2_msg_ctx_get_property(msg_ctx, env, SAVAN_SUBSCRIBER);
     if(subs_prop)
     {
@@ -336,7 +336,7 @@
      * the store */
     
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
-    subs_mgr = savan_util_get_subs_mgr(env, conf_ctx, conf);
+    subs_mgr = savan_subs_mgr_get_subs_mgr(env, conf_ctx, conf);
     if(!subs_mgr)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the data resource. Check \
@@ -346,7 +346,7 @@
         return AXIS2_FAILURE;
     }
 
-    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, subs_mgr, NULL);
+    subscriber = savan_subs_mgr_get_subscriber_from_msg(env, msg_ctx, subs_mgr, NULL);
     if (subscriber)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
@@ -405,7 +405,7 @@
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_msg_recv_handle_renew_request");
 
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
-    subs_mgr = savan_util_get_subs_mgr(env, conf_ctx, conf);
+    subs_mgr = savan_subs_mgr_get_subs_mgr(env, conf_ctx, conf);
     if(!subs_mgr)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the data resource. Check \
@@ -415,7 +415,7 @@
         return AXIS2_FAILURE;
     }
 
-    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, subs_mgr, NULL);
+    subscriber = savan_subs_mgr_get_subscriber_from_msg(env, msg_ctx, subs_mgr, NULL);
     if (!subscriber)
     {
         AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_SUBSCRIBER_NOT_FOUND, AXIS2_FAILURE);
@@ -495,7 +495,7 @@
     axis2_msg_info_headers_set_action(info_header, env, SAVAN_ACTIONS_GET_STATUS_RESPONSE);
     
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
-    subs_mgr = savan_util_get_subs_mgr(env, conf_ctx, conf);
+    subs_mgr = savan_subs_mgr_get_subs_mgr(env, conf_ctx, conf);
     if(!subs_mgr)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the data resource. Check \
@@ -524,7 +524,7 @@
 
     /* Expires element */
 
-    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, subs_mgr, NULL);
+    subscriber = savan_subs_mgr_get_subscriber_from_msg(env, msg_ctx, subs_mgr, NULL);
     if(!subscriber)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
diff --git a/src/subs_mgrs/Makefile.am b/src/subs_mgrs/Makefile.am
index 2f3f0e2..0cde06f 100644
--- a/src/subs_mgrs/Makefile.am
+++ b/src/subs_mgrs/Makefile.am
@@ -1 +1,2 @@
 SUBDIRS = common @SAVAN_SUBS_MGR_SQLITE@ @SAVAN_SUBS_MGR_REGISTRY@ @SAVAN_SUBS_MGR_SERVICE@
+
diff --git a/src/subs_mgrs/common/subs_mgr.c b/src/subs_mgrs/common/subs_mgr.c
index b8a84c4..bd87a29 100644
--- a/src/subs_mgrs/common/subs_mgr.c
+++ b/src/subs_mgrs/common/subs_mgr.c
@@ -23,6 +23,9 @@
 #include <axutil_property.h>
 #include <axutil_uuid_gen.h>
 #include <axis2_conf_ctx.h>
+#include <axiom_soap_envelope.h>
+#include <axiom_soap_header.h>
+#include <axiom_soap_body.h>
 
 AXIS2_EXTERN void AXIS2_CALL
 savan_subs_mgr_free(
@@ -87,3 +90,241 @@
     return subs_mgr->ops->insert_topic(subs_mgr, env, topic_name, topic_url);
 }
 
+AXIS2_EXTERN savan_subscriber_t *AXIS2_CALL
+savan_subs_mgr_get_subscriber_from_msg(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        savan_subs_mgr_t *subs_mgr,
+        const axis2_char_t *sub_id)
+{
+    savan_subscriber_t *subscriber = NULL;
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_subs_mgr_get_subscriber_from_msg");
+
+    /* Extract subscription id from msg if not already given */
+    if (!sub_id)
+    {
+        sub_id = savan_util_get_subscription_id_from_msg(env, msg_ctx);
+    }
+
+    axutil_allocator_switch_to_global_pool(env->allocator);
+    subscriber = savan_subs_mgr_retrieve_subscriber(subs_mgr, env, sub_id);
+    axutil_allocator_switch_to_local_pool(env->allocator);
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_subs_mgr_get_subscriber_from_msg");
+    
+    return subscriber;
+}
+
+AXIS2_EXTERN savan_subscriber_t *AXIS2_CALL
+savan_subs_mgr_get_subscriber_from_renew_msg(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        savan_subs_mgr_t *subs_mgr,
+        const axis2_char_t *sub_id)
+{
+    savan_subscriber_t *subscriber = NULL;
+    axiom_soap_envelope_t *envelope = NULL;
+    axiom_soap_header_t *header = NULL;
+    axutil_qname_t *qname = NULL;
+    axiom_node_t *header_node = NULL;
+    axiom_node_t *id_node = NULL;
+    axiom_element_t *id_elem = NULL;
+    axiom_node_t *expires_node = NULL;
+    axiom_element_t *expires_elem = NULL;
+    axiom_node_t *renew_node = NULL;
+    axiom_element_t *renew_elem = NULL;
+    axiom_element_t *header_elem = NULL;
+    axis2_char_t *expires = NULL;
+    axis2_char_t *renewed_expires = NULL;
+    axiom_soap_body_t *body = NULL;
+    axiom_node_t *body_node = NULL;
+    axiom_element_t *body_elem = NULL;
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_subs_mgr_get_subscriber_from_renew_msg");
+
+    /* Extract subscription id from msg if not already given */
+    if (!sub_id)
+    {
+        sub_id = savan_util_get_subscription_id_from_msg(env, msg_ctx);
+    }
+
+    axutil_allocator_switch_to_global_pool(env->allocator);
+    subscriber = savan_subs_mgr_retrieve_subscriber(subs_mgr, env, sub_id);
+    axutil_allocator_switch_to_local_pool(env->allocator);
+   
+    if(!subscriber)
+    {
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_SUBSCRIBER_RETRIEVE_ERROR, AXIS2_FAILURE);
+        return NULL;
+    }
+    /* Get soap envelop and extract the subscription id */
+
+    envelope =  axis2_msg_ctx_get_soap_envelope(msg_ctx, env);
+    if (!envelope)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the soap envelop");
+        return NULL;
+    }
+    
+    header = axiom_soap_envelope_get_header(envelope, env);
+    if (!header)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the soap header"); 
+        return NULL;
+    }
+    
+    /* Get header element from header node */
+    header_node = axiom_soap_header_get_base_node(header, env);
+    header_elem = (axiom_element_t*)axiom_node_get_data_element(header_node, env);
+    
+    /* Get Identifier element from header */
+    qname = axutil_qname_create(env, ELEM_NAME_ID, EVENTING_NAMESPACE, NULL);
+    id_elem = axiom_element_get_first_child_with_qname(header_elem, env, qname,
+        header_node, &id_node);
+    axutil_qname_free(qname, env);
+    
+    /* Now read the id */
+    sub_id = axiom_element_get_text(id_elem, env, id_node);
+    
+    /* Get Expires element from body */
+    body = axiom_soap_envelope_get_body(envelope, env);
+    if (!body)
+    {
+        AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the soap body"); 
+        return NULL;
+    }
+    
+    body_node = axiom_soap_body_get_base_node(body, env);
+    body_elem = (axiom_element_t*)axiom_node_get_data_element(body_node, env);
+    
+    /* Get Subscribe element from Body */
+    qname = axutil_qname_create(env, ELEM_NAME_RENEW, EVENTING_NAMESPACE, NULL);
+    renew_elem = axiom_element_get_first_child_with_qname(body_elem, env, qname, body_node, 
+            &renew_node);
+    axutil_qname_free(qname, env);
+ 
+    qname = axutil_qname_create(env, ELEM_NAME_EXPIRES, EVENTING_NAMESPACE, NULL);
+    expires_elem = axiom_element_get_first_child_with_qname(renew_elem, env, qname, renew_node, 
+            &expires_node);
+    axutil_qname_free(qname, env);
+    if(expires_elem)
+    {
+        expires = axiom_element_get_text(expires_elem, env, expires_node);
+        if(expires)
+        {
+            /* Check whether the subscription can be renewed. If renewable, set the new
+             * expiry time in the subscriber */
+            savan_subscriber_set_expires(subscriber, env, expires);
+            renewed_expires = savan_util_get_renewed_expiry_time(env, expires);
+            savan_subscriber_set_expires(subscriber, env, renewed_expires);
+        }
+    }
+ 
+    savan_subscriber_set_renew_status(subscriber, env, AXIS2_TRUE);
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_subs_mgr_get_subscriber_from_renew_msg");
+    
+    return subscriber;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_subs_mgr_add_subscriber(
+    const axutil_env_t *env,
+    axis2_msg_ctx_t *msg_ctx,
+    savan_subs_mgr_t *subs_mgr,
+    savan_subscriber_t *subscriber)
+{
+    axis2_status_t status = AXIS2_FAILURE;
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_subs_mgr_add_subscriber");
+    
+    axutil_allocator_switch_to_global_pool(env->allocator);
+    status = savan_subs_mgr_insert_subscriber(subs_mgr, env, subscriber);
+    if(status)
+    {
+        axutil_property_t *subs_prop = NULL;
+        subs_prop = axutil_property_create_with_args(env, 0, 0, 
+            savan_subscriber_free_void_arg, subscriber);
+        axis2_msg_ctx_set_property(msg_ctx, env, SAVAN_SUBSCRIBER, subs_prop);
+    }
+    axutil_allocator_switch_to_local_pool(env->allocator);
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_subs_mgr_add_subscriber"); 
+    return status;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_subs_mgr_update_subscriber_with_msg_ctx(
+    const axutil_env_t *env,
+    axis2_msg_ctx_t *msg_ctx,
+    savan_subs_mgr_t *subs_mgr,
+    savan_subscriber_t *subscriber)
+{
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_subs_mgr_update_subscriber");
+
+    axutil_allocator_switch_to_global_pool(env->allocator);
+    savan_subs_mgr_update_subscriber(subs_mgr, env, subscriber);
+    axutil_allocator_switch_to_local_pool(env->allocator);
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_subs_mgr_update_subscriber"); 
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_subs_mgr_remove_subscriber_with_msg_ctx(
+    const axutil_env_t *env,
+    axis2_msg_ctx_t *msg_ctx,
+    savan_subs_mgr_t *subs_mgr,
+    savan_subscriber_t *subscriber)
+{
+    const axis2_char_t *subs_id = NULL;
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_subs_mgr_remove_subscriber");
+
+    axutil_allocator_switch_to_global_pool(env->allocator);
+    subs_id = savan_subscriber_get_id(subscriber, env);
+
+    savan_subs_mgr_remove_subscriber(subs_mgr, env, subs_id);
+    axutil_allocator_switch_to_local_pool(env->allocator);
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_subs_mgr_remove_subscriber");
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN savan_subs_mgr_t * AXIS2_CALL
+savan_subs_mgr_get_subs_mgr(
+    const axutil_env_t *env,
+    axis2_conf_ctx_t *conf_ctx,
+    axis2_conf_t *conf)
+{
+    axutil_property_t *subs_mgr_prop = NULL;
+    savan_subs_mgr_t *subs_mgr = NULL;
+
+    axutil_allocator_switch_to_global_pool(env->allocator);
+    if(conf_ctx)
+    {
+        subs_mgr_prop = axis2_conf_ctx_get_property(conf_ctx, env, SAVAN_STORAGE_MANAGER);
+        if(subs_mgr_prop)
+        {
+            subs_mgr = (savan_subs_mgr_t *) axutil_property_get_value(subs_mgr_prop, env);
+        }
+    }
+
+    if(!subs_mgr)
+    {
+        subs_mgr = savan_subs_mgr_create(env, conf);
+
+        if(subs_mgr && conf_ctx)
+        {
+            subs_mgr_prop = axutil_property_create_with_args(env, 0, 0, 0, subs_mgr);
+            axis2_conf_ctx_set_property(conf_ctx, env, SAVAN_STORAGE_MANAGER, subs_mgr_prop);
+        }
+    }
+        
+    axutil_allocator_switch_to_local_pool(env->allocator);
+
+    return subs_mgr;
+}
+
+
diff --git a/src/subs_mgrs/service/subs_mgr_svc/subs_mgr.c b/src/subs_mgrs/service/subs_mgr_svc/subs_mgr.c
index 3bee79d..0bec8bb 100644
--- a/src/subs_mgrs/service/subs_mgr_svc/subs_mgr.c
+++ b/src/subs_mgrs/service/subs_mgr_svc/subs_mgr.c
@@ -98,7 +98,7 @@
         }
     }
 
-    subs_mgr = savan_util_get_subs_mgr(env, conf_ctx, conf);
+    subs_mgr = savan_subs_mgr_get_subs_mgr(env, conf_ctx, conf);
     if(!subs_mgr)
     {
         AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
@@ -161,7 +161,7 @@
     
     sprintf(sql_remove, "delete from subscriber where id='%s'", subscriber_id);
 
-    subs_mgr = savan_util_get_subs_mgr(env, conf_ctx, conf);
+    subs_mgr = savan_subs_mgr_get_subs_mgr(env, conf_ctx, conf);
     if(!subs_mgr)
     {
         AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
@@ -248,7 +248,7 @@
         return NULL;
     }
 
-    subs_mgr = savan_util_get_subs_mgr(env, conf_ctx, conf);
+    subs_mgr = savan_subs_mgr_get_subs_mgr(env, conf_ctx, conf);
     if(!subs_mgr)
     {
         AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
@@ -341,7 +341,7 @@
         return NULL;
     }
 
-    subs_mgr = savan_util_get_subs_mgr(env, conf_ctx, conf);
+    subs_mgr = savan_subs_mgr_get_subs_mgr(env, conf_ctx, conf);
     if(!subs_mgr)
     {
         AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
diff --git a/src/subs_mgrs/service/subs_mgr_svc/subs_mgr_skel.c b/src/subs_mgrs/service/subs_mgr_svc/subs_mgr_skel.c
index 6e2b1b1..8a012fd 100644
--- a/src/subs_mgrs/service/subs_mgr_svc/subs_mgr_skel.c
+++ b/src/subs_mgrs/service/subs_mgr_svc/subs_mgr_skel.c
@@ -127,7 +127,7 @@
 
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Start:savan_subs_mgr_svc_init_with_conf");
 
-    /*subs_mgr = savan_util_get_subs_mgr(env, NULL, conf);
+    /*subs_mgr = savan_subs_mgr_get_subs_mgr(env, NULL, conf);
     if(!subs_mgr)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the database. Check \
diff --git a/src/util/savan_util.c b/src/util/savan_util.c
index 127faa7..3db7ae4 100644
--- a/src/util/savan_util.c
+++ b/src/util/savan_util.c
@@ -31,7 +31,6 @@
 #include <savan_util.h>
 #include <savan_msg_recv.h>
 #include <savan_error.h>
-#include <savan_subs_mgr.h>
 
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
 savan_util_create_fault_envelope(
@@ -213,208 +212,6 @@
     return sub_id;    
 }
 
-AXIS2_EXTERN savan_subscriber_t * AXIS2_CALL
-savan_util_get_subscriber_from_msg(
-        const axutil_env_t *env,
-        axis2_msg_ctx_t *msg_ctx,
-        savan_subs_mgr_t *subs_mgr,
-        const axis2_char_t *sub_id)
-{
-    savan_subscriber_t *subscriber = NULL;
-
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_util_get_subscriber_from_msg");
-
-    /* Extract subscription id from msg if not already given */
-    if (!sub_id)
-    {
-        sub_id = savan_util_get_subscription_id_from_msg(env, msg_ctx);
-    }
-
-    axutil_allocator_switch_to_global_pool(env->allocator);
-    subscriber = savan_subs_mgr_retrieve_subscriber(subs_mgr, env, sub_id);
-    axutil_allocator_switch_to_local_pool(env->allocator);
-
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_util_get_subscriber_from_msg");
-    
-    return subscriber;
-}
-
-AXIS2_EXTERN savan_subscriber_t * AXIS2_CALL
-savan_util_get_subscriber_from_renew_msg(
-        const axutil_env_t *env,
-        axis2_msg_ctx_t *msg_ctx,
-        savan_subs_mgr_t *subs_mgr,
-        const axis2_char_t *sub_id)
-{
-    savan_subscriber_t *subscriber = NULL;
-    axiom_soap_envelope_t *envelope = NULL;
-    axiom_soap_header_t *header = NULL;
-    axutil_qname_t *qname = NULL;
-    axiom_node_t *header_node = NULL;
-    axiom_node_t *id_node = NULL;
-    axiom_element_t *id_elem = NULL;
-    axiom_node_t *expires_node = NULL;
-    axiom_element_t *expires_elem = NULL;
-    axiom_node_t *renew_node = NULL;
-    axiom_element_t *renew_elem = NULL;
-    axiom_element_t *header_elem = NULL;
-    axis2_char_t *expires = NULL;
-    axis2_char_t *renewed_expires = NULL;
-    axiom_soap_body_t *body = NULL;
-    axiom_node_t *body_node = NULL;
-    axiom_element_t *body_elem = NULL;
-
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_util_get_subscriber_from_renew_msg");
-
-    /* Extract subscription id from msg if not already given */
-    if (!sub_id)
-    {
-        sub_id = savan_util_get_subscription_id_from_msg(env, msg_ctx);
-    }
-
-    axutil_allocator_switch_to_global_pool(env->allocator);
-    subscriber = savan_subs_mgr_retrieve_subscriber(subs_mgr, env, sub_id);
-    axutil_allocator_switch_to_local_pool(env->allocator);
-   
-    if(!subscriber)
-    {
-        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_SUBSCRIBER_RETRIEVE_ERROR, AXIS2_FAILURE);
-        return NULL;
-    }
-    /* Get soap envelop and extract the subscription id */
-
-    envelope =  axis2_msg_ctx_get_soap_envelope(msg_ctx, env);
-    if (!envelope)
-    {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the soap envelop");
-        return NULL;
-    }
-    
-    header = axiom_soap_envelope_get_header(envelope, env);
-    if (!header)
-    {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the soap header"); 
-        return NULL;
-    }
-    
-    /* Get header element from header node */
-    header_node = axiom_soap_header_get_base_node(header, env);
-    header_elem = (axiom_element_t*)axiom_node_get_data_element(header_node, env);
-    
-    /* Get Identifier element from header */
-    qname = axutil_qname_create(env, ELEM_NAME_ID, EVENTING_NAMESPACE, NULL);
-    id_elem = axiom_element_get_first_child_with_qname(header_elem, env, qname,
-        header_node, &id_node);
-    axutil_qname_free(qname, env);
-    
-    /* Now read the id */
-    sub_id = axiom_element_get_text(id_elem, env, id_node);
-    
-    /* Get Expires element from body */
-    body = axiom_soap_envelope_get_body(envelope, env);
-    if (!body)
-    {
-        AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the soap body"); 
-        return NULL;
-    }
-    
-    body_node = axiom_soap_body_get_base_node(body, env);
-    body_elem = (axiom_element_t*)axiom_node_get_data_element(body_node, env);
-    
-    /* Get Subscribe element from Body */
-    qname = axutil_qname_create(env, ELEM_NAME_RENEW, EVENTING_NAMESPACE, NULL);
-    renew_elem = axiom_element_get_first_child_with_qname(body_elem, env, qname, body_node, 
-            &renew_node);
-    axutil_qname_free(qname, env);
- 
-    qname = axutil_qname_create(env, ELEM_NAME_EXPIRES, EVENTING_NAMESPACE, NULL);
-    expires_elem = axiom_element_get_first_child_with_qname(renew_elem, env, qname, renew_node, 
-            &expires_node);
-    axutil_qname_free(qname, env);
-    if(expires_elem)
-    {
-        expires = axiom_element_get_text(expires_elem, env, expires_node);
-        if(expires)
-        {
-            /* Check whether the subscription can be renewed. If renewable, set the new
-             * expiry time in the subscriber */
-            savan_subscriber_set_expires(subscriber, env, expires);
-            renewed_expires = savan_util_get_renewed_expiry_time(env, expires);
-            savan_subscriber_set_expires(subscriber, env, renewed_expires);
-        }
-    }
- 
-    savan_subscriber_set_renew_status(subscriber, env, AXIS2_TRUE);
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_util_get_subscriber_from_renew_msg");
-    
-    return subscriber;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-savan_util_add_subscriber(
-    const axutil_env_t *env,
-    axis2_msg_ctx_t *msg_ctx,
-    savan_subs_mgr_t *subs_mgr,
-    savan_subscriber_t *subscriber)
-{
-    axis2_status_t status = AXIS2_FAILURE;
-
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_util_add_subscriber");
-    
-    axutil_allocator_switch_to_global_pool(env->allocator);
-    status = savan_subs_mgr_insert_subscriber(subs_mgr, env, subscriber);
-    if(status)
-    {
-        axutil_property_t *subs_prop = NULL;
-        subs_prop = axutil_property_create_with_args(env, 0, 0, 
-            savan_subscriber_free_void_arg, subscriber);
-        axis2_msg_ctx_set_property(msg_ctx, env, SAVAN_SUBSCRIBER, subs_prop);
-    }
-    axutil_allocator_switch_to_local_pool(env->allocator);
-
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_util_add_subscriber"); 
-    return status;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-savan_util_update_subscriber(
-    const axutil_env_t *env,
-    axis2_msg_ctx_t *msg_ctx,
-    savan_subs_mgr_t *subs_mgr,
-    savan_subscriber_t *subscriber)
-{
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_util_update_subscriber");
-
-    axutil_allocator_switch_to_global_pool(env->allocator);
-    savan_subs_mgr_update_subscriber(subs_mgr, env, subscriber);
-    axutil_allocator_switch_to_local_pool(env->allocator);
-
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_util_update_subscriber"); 
-    return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-savan_util_remove_subscriber(
-    const axutil_env_t *env,
-    axis2_msg_ctx_t *msg_ctx,
-    savan_subs_mgr_t *subs_mgr,
-    savan_subscriber_t *subscriber)
-{
-    const axis2_char_t *subs_id = NULL;
-
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_util_remove_subscriber");
-
-    axutil_allocator_switch_to_global_pool(env->allocator);
-    subs_id = savan_subscriber_get_id(subscriber, env);
-
-    savan_subs_mgr_remove_subscriber(subs_mgr, env, subs_id);
-    axutil_allocator_switch_to_local_pool(env->allocator);
-
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_util_remove_subscriber");
-    return AXIS2_SUCCESS;
-}
-
 AXIS2_EXTERN axis2_status_t AXIS2_CALL 
 savan_util_set_store(
     axis2_svc_t *svc,
@@ -907,41 +704,6 @@
     return subs_node;
 }
 
-AXIS2_EXTERN savan_subs_mgr_t * AXIS2_CALL
-savan_util_get_subs_mgr(
-    const axutil_env_t *env,
-    axis2_conf_ctx_t *conf_ctx,
-    axis2_conf_t *conf)
-{
-    axutil_property_t *subs_mgr_prop = NULL;
-    savan_subs_mgr_t *subs_mgr = NULL;
-
-    axutil_allocator_switch_to_global_pool(env->allocator);
-    if(conf_ctx)
-    {
-        subs_mgr_prop = axis2_conf_ctx_get_property(conf_ctx, env, SAVAN_STORAGE_MANAGER);
-        if(subs_mgr_prop)
-        {
-            subs_mgr = (savan_subs_mgr_t *) axutil_property_get_value(subs_mgr_prop, env);
-        }
-    }
-
-    if(!subs_mgr)
-    {
-        subs_mgr = savan_subs_mgr_create(env, conf);
-
-        if(subs_mgr && conf_ctx)
-        {
-            subs_mgr_prop = axutil_property_create_with_args(env, 0, 0, 0, subs_mgr);
-            axis2_conf_ctx_set_property(conf_ctx, env, SAVAN_STORAGE_MANAGER, subs_mgr_prop);
-        }
-    }
-        
-    axutil_allocator_switch_to_local_pool(env->allocator);
-
-    return subs_mgr;
-}
-
 AXIS2_EXTERN savan_filter_mod_t * AXIS2_CALL
 savan_util_get_filter_module(
     const axutil_env_t *env,