diff --git a/include/savan_publisher_mod.h b/include/savan_publisher_mod.h
index 35b03d1..bb54b05 100644
--- a/include/savan_publisher_mod.h
+++ b/include/savan_publisher_mod.h
@@ -27,6 +27,7 @@
 #include <axis2_conf.h>
 #include <axis2_msg_ctx.h>
 #include <axiom_node.h>
+#include <savan_storage_mgr.h>
 
 #ifdef __cplusplus
 extern "C"
@@ -56,7 +57,8 @@
             publish)(
                 savan_publisher_mod_t *publisher, 
                 const axutil_env_t *env,
-                void *msg_ctx);
+                void *msg_ctx,
+                savan_storage_mgr_t *storage_mgr);
 
 };
 
@@ -73,11 +75,20 @@
  * @return status of the operation
  */
 AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
-savan_publisher_mod_create(
+savan_publisher_mod_create_with_conf(
     const axutil_env_t *env,
     axis2_conf_t *conf);
 
 /**
+ * Create the savan publisher.
+ * @param env environment object
+ * @return status of the operation
+ */
+AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
+savan_publisher_mod_create(
+    const axutil_env_t *env);
+
+/**
  * Deallocate the publisher.
  * @param publisher
  * @param env environment object
@@ -97,7 +108,8 @@
 savan_publisher_mod_publish(
     savan_publisher_mod_t *publishermod, 
     const axutil_env_t *env,
-    void *msg_ctx);
+    void *msg_ctx,
+    savan_storage_mgr_t *storage_mgr);
 
 /** @} */
 #ifdef __cplusplus
diff --git a/src/msgreceivers/savan_msg_recv.c b/src/msgreceivers/savan_msg_recv.c
index abe8e9a..0772c34 100644
--- a/src/msgreceivers/savan_msg_recv.c
+++ b/src/msgreceivers/savan_msg_recv.c
@@ -114,15 +114,17 @@
     axis2_conf_t *conf = NULL;
     axis2_conf_ctx_t *conf_ctx = NULL;
     savan_publisher_mod_t *pub_mod = NULL;
+    savan_storage_mgr_t *storage_mgr = NULL;
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_msg_recv_handle_event");
    
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
 
-    pub_mod = savan_publisher_mod_create(env, conf);
+    pub_mod = savan_publisher_mod_create_with_conf(env, conf);
 
-    savan_publisher_mod_publish(pub_mod, env, msg_ctx);
+    storage_mgr = savan_util_get_storage_mgr(env, conf_ctx, conf);
+    savan_publisher_mod_publish(pub_mod, env, msg_ctx, storage_mgr);
     savan_publisher_mod_free(pub_mod, env);
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_msg_recv_handle_event");
diff --git a/src/publisher/common/publisher_mod.c b/src/publisher/common/publisher_mod.c
index 52c071b..4813fd6 100644
--- a/src/publisher/common/publisher_mod.c
+++ b/src/publisher/common/publisher_mod.c
@@ -37,8 +37,9 @@
 savan_publisher_mod_publish(
     savan_publisher_mod_t *publishermod, 
     const axutil_env_t *env,
-    void *msg_ctx)
+    void *msg_ctx,
+    savan_storage_mgr_t *storage_mgr)
 {
-    publishermod->ops->publish(publishermod, env, msg_ctx);
+    publishermod->ops->publish(publishermod, env, msg_ctx, storage_mgr);
 }
 
diff --git a/src/publisher/default/publisher_mod.c b/src/publisher/default/publisher_mod.c
index 998bfc3..09c3d37 100644
--- a/src/publisher/default/publisher_mod.c
+++ b/src/publisher/default/publisher_mod.c
@@ -60,7 +60,8 @@
 savan_default_publisher_mod_publish(
     savan_publisher_mod_t *publishermod,
     const axutil_env_t *env,
-    void *msg_ctx);
+    void *msg_ctx,
+    savan_storage_mgr_t *storage_mgr);
 
 static axis2_status_t
 savan_default_publisher_mod_publish_to_subscriber(
@@ -78,7 +79,7 @@
 };
 
 AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
-savan_publisher_mod_create(
+savan_publisher_mod_create_with_conf(
     const axutil_env_t *env,
     axis2_conf_t *conf)
 {
@@ -99,6 +100,13 @@
     return (savan_publisher_mod_t *) publishermodimpl;
 }
 
+AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
+savan_publisher_mod_create(
+    const axutil_env_t *env)
+{
+    return NULL;
+}
+
 AXIS2_EXTERN void AXIS2_CALL
 savan_default_publisher_mod_free(
     savan_publisher_mod_t *publishermod,
@@ -124,12 +132,12 @@
 savan_default_publisher_mod_publish(
     savan_publisher_mod_t *publishermod,
     const axutil_env_t *env,
-    void *msg_ctx)
+    void *msg_ctx,
+    savan_storage_mgr_t *storage_mgr)
 {
     savan_default_publisher_mod_t *publishermodimpl = NULL;
     axutil_array_list_t *subs_store = NULL;
     int i = 0, size = 0;
-    savan_storage_mgr_t *storage_mgr = NULL;
     savan_filter_mod_t *filtermod = NULL;
     axis2_char_t *path = NULL;
     axis2_conf_ctx_t *client_conf_ctx = NULL;
@@ -145,7 +153,6 @@
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_default_publisher_mod_publish");
 
-    storage_mgr = savan_util_get_storage_mgr(env, NULL, publishermodimpl->conf);
     axutil_allocator_switch_to_global_pool(env->allocator);
     if(storage_mgr)
     {
diff --git a/src/publisher/esb/publisher_mod.c b/src/publisher/esb/publisher_mod.c
index dd18ea8..673ad16 100644
--- a/src/publisher/esb/publisher_mod.c
+++ b/src/publisher/esb/publisher_mod.c
@@ -53,8 +53,7 @@
     savan_publisher_mod_t *publishermod,
     const axutil_env_t *env,
     void *msg_ctx,
-    savan_subscriber_t *subscriber,
-    savan_filter_mod_t *filtermod);
+    savan_subscriber_t *subscriber);
 
 AXIS2_EXTERN void AXIS2_CALL
 savan_esb_publisher_mod_free(
@@ -65,7 +64,8 @@
 savan_esb_publisher_mod_publish(
     savan_publisher_mod_t *publishermod,
     const axutil_env_t *env,
-    void *msg_ctx);
+    void *msg_ctx,
+    savan_storage_mgr_t *storage_mgr);
 
 static const savan_publisher_mod_ops_t savan_publisher_mod_ops = 
 {
@@ -75,6 +75,27 @@
 
 AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
 savan_publisher_mod_create(
+    const axutil_env_t *env)
+{
+    savan_esb_publisher_mod_t *publishermodimpl = NULL;
+    
+    publishermodimpl = AXIS2_MALLOC(env->allocator, sizeof(savan_esb_publisher_mod_t));
+    if (!publishermodimpl)
+    {
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_FILTER_CREATION_FAILED, AXIS2_FAILURE);
+        return NULL;
+    }
+
+    memset ((void *) publishermodimpl, 0, sizeof(savan_esb_publisher_mod_t));
+
+    publishermodimpl->conf = NULL;
+    publishermodimpl->publishermod.ops = &savan_publisher_mod_ops;
+
+    return (savan_publisher_mod_t *) publishermodimpl;
+}
+
+AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
+savan_publisher_mod_create_with_conf(
     const axutil_env_t *env,
     axis2_conf_t *conf)
 {
@@ -120,21 +141,19 @@
 savan_esb_publisher_mod_publish(
     savan_publisher_mod_t *publishermod,
     const axutil_env_t *env,
-    void *esb_ctx)
+    void *esb_ctx,
+    savan_storage_mgr_t *storage_mgr)
 {
     savan_esb_publisher_mod_t *publishermodimpl = NULL;
 
     axutil_array_list_t *subs_store = NULL;
     int i = 0, size = 0;
-    savan_storage_mgr_t *storage_mgr = NULL;
-    savan_filter_mod_t *filtermod = NULL;
     axis2_char_t *filter = NULL;
 
     publishermodimpl = SAVAN_INTF_TO_IMPL(publishermod);
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_esb_publisher_mod_publish");
 
-    storage_mgr = savan_util_get_storage_mgr(env, NULL, publishermodimpl->conf);
     axutil_allocator_switch_to_global_pool(env->allocator);
     if(storage_mgr)
     {
@@ -158,13 +177,11 @@
             axis2_char_t *id = savan_subscriber_get_id(sub, env);
             AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Publishing to:%s", id);
 
-            filtermod = savan_util_get_filter_module(env, publishermodimpl->conf);
             /* Ideally publishing to each subscriber should happen within a thread for each 
              * subscriber. However until Axis2/C provide a good thread pool to handle
              * such tasks I use this sequential publishing to subscribers.
              */
-            if(!savan_esb_publisher_mod_publish_to_subscriber(publishermod, env, esb_ctx, sub, 
-                        filtermod))
+            if(!savan_esb_publisher_mod_publish_to_subscriber(publishermod, env, esb_ctx, sub))
             {
                 axis2_endpoint_ref_t *notifyto = savan_subscriber_get_notify_to(sub, env);
                 const axis2_char_t *address = NULL;
@@ -192,12 +209,10 @@
     savan_publisher_mod_t *publishermod,
     const axutil_env_t *env,
     void *esb_ctx,
-    savan_subscriber_t *subscriber,
-    savan_filter_mod_t *filtermod)
+    savan_subscriber_t *subscriber)
 {
     axis2_status_t status = AXIS2_SUCCESS;
     const axis2_char_t *address = NULL;
-    axis2_bool_t filter_apply = AXIS2_TRUE;
     axis2_endpoint_ref_t *notifyto = NULL;
     esb_rt_epr_t *epr = NULL;
     axiom_soap_envelope_t *envelope = NULL;
@@ -226,36 +241,8 @@
     body_node = axiom_soap_body_get_base_node(body, env);
     payload = axiom_node_get_first_element(body_node, env);
 
-    /* If this is a filtering request and we cannot find any filter module to filter then error */
-    if(savan_subscriber_get_filter(subscriber, env) && !filtermod)
-    {
-        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_FILTER_MODULE_COULD_NOT_BE_RETRIEVED, AXIS2_FAILURE);
-        return AXIS2_FAILURE;
-    }
 
-#ifdef SAVAN_FILTERING
-    /* If this is a filtering request and filter module is defined then filter the request.
-     */
-    if(filtermod && savan_subscriber_get_filter(subscriber, env))
-    {
-	    /* Apply the filter, and check whether it evaluates to success */
-        filter_apply = savan_filter_mod_apply(filtermod ,env, subscriber, payload);
-        if(!filter_apply)
-        {
-            status = axutil_error_get_status_code(env->error);
-            if(AXIS2_SUCCESS != status)
-            {
-                axiom_node_detach(payload, env);
-                return status;
-            }
-        }
-    }
-#endif
-
-    if(filter_apply)
-    {
-        esb_send_on_out_only(env, epr, (esb_ctx_t *) esb_ctx);
-    }
+    esb_send_on_out_only(env, epr, (esb_ctx_t *) esb_ctx);
 	
     axiom_node_detach(payload, env); /*insert this to prevent payload corruption in subsequent 
                                        "publish" calls with some payload.*/
diff --git a/src/storage/inmemory/storage_mgr_inmemory.c b/src/storage/inmemory/storage_mgr_inmemory.c
index dd84de6..fea0c2b 100644
--- a/src/storage/inmemory/storage_mgr_inmemory.c
+++ b/src/storage/inmemory/storage_mgr_inmemory.c
@@ -24,3 +24,13 @@
 	return NULL;
 }
 
+AXIS2_EXTERN savan_storage_mgr_t * AXIS2_CALL
+savan_storage_mgr_create_with_connection_info(
+    const axutil_env_t *env,
+    axis2_char_t *connection_string,
+    axis2_char_t *username,
+    axis2_char_t *password)
+{
+    return NULL;
+}
+
diff --git a/src/storage/service/service_storage_mgr.c b/src/storage/service/service_storage_mgr.c
index cb52708..53e226c 100644
--- a/src/storage/service/service_storage_mgr.c
+++ b/src/storage/service/service_storage_mgr.c
@@ -166,6 +166,15 @@
     return (savan_storage_mgr_t *) storage_mgr_impl;
 }
 
+AXIS2_EXTERN savan_storage_mgr_t * AXIS2_CALL
+savan_storage_mgr_create_with_connection_info(
+    const axutil_env_t *env,
+    axis2_char_t *connection_string,
+    axis2_char_t *username,
+    axis2_char_t *password)
+{
+}
+
 AXIS2_EXTERN void AXIS2_CALL
 savan_service_storage_mgr_free(
     savan_storage_mgr_t *storage_mgr,
diff --git a/src/storage/sqlite/storage_mgr.c b/src/storage/sqlite/storage_mgr.c
index e6fd558..3a47fa7 100644
--- a/src/storage/sqlite/storage_mgr.c
+++ b/src/storage/sqlite/storage_mgr.c
@@ -159,6 +159,16 @@
     return (savan_storage_mgr_t *) storage_mgr_impl;
 }
 
+AXIS2_EXTERN savan_storage_mgr_t * AXIS2_CALL
+savan_storage_mgr_create_with_connection_info(
+    const axutil_env_t *env,
+    axis2_char_t *connection_string,
+    axis2_char_t *username,
+    axis2_char_t *password)
+{
+    return NULL;
+}
+
 AXIS2_EXTERN void AXIS2_CALL
 savan_sqlite_storage_mgr_free(
     savan_storage_mgr_t *storage_mgr,