Index: include/axis2_http_transport.h
===================================================================
--- include/axis2_http_transport.h	(revision 1175126)
+++ include/axis2_http_transport.h	(working copy)
@@ -1181,6 +1181,9 @@
 Unavailable</title></head><body><h2>Service Unavailable</h2><p>The service\
  is temporarily unable to serve your request.</p></body></html>"
 
+    #define AXIS2_HTTP_AXIS_SERVICE_HERE "<p>Hi there, this is an AXIS service!</p>\
+<i>Perhaps there will be a form for invoking the service here...</i>"
+
     /** @} */
 
 #ifdef __cplusplus
Index: include/axis2_http_transport_utils.h
===================================================================
--- include/axis2_http_transport_utils.h	(revision 1175126)
+++ include/axis2_http_transport_utils.h	(working copy)
@@ -359,6 +359,12 @@
         axis2_char_t * request_uri);
 
     AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+    axis2_http_transport_utils_get_service_here(
+        const axutil_env_t * env,
+        axis2_conf_ctx_t * conf_ctx,
+		axis2_svc_t *service );
+
+	AXIS2_EXTERN axis2_char_t *AXIS2_CALL
     axis2_http_transport_utils_get_not_found(
         const axutil_env_t * env,
         axis2_conf_ctx_t * conf_ctx);
Index: src/core/transport/http/common/http_worker.c
===================================================================
--- src/core/transport/http/common/http_worker.c	(revision 1175126)
+++ src/core/transport/http/common/http_worker.c	(working copy)
@@ -600,6 +600,14 @@
                     axis2_http_simple_response_set_header(response, env, allow_header);
                     AXIS2_FREE(env->allocator, method_list_str);
                 }
+				// If service is found, but operation is empty -> Send the message 
+				// Hi there, this is an AXIS service!
+				else if(axis2_msg_ctx_get_svc(msg_ctx, env) && !axis2_msg_ctx_get_op(msg_ctx, env))
+				{
+					axis2_http_simple_response_set_status_line(response, env, http_version,
+						AXIS2_HTTP_RESPONSE_OK_CODE_VAL, AXIS2_HTTP_RESPONSE_OK_CODE_NAME);
+					body_string = axis2_http_transport_utils_get_service_here(env, conf_ctx, axis2_msg_ctx_get_svc(msg_ctx, env));
+				}
                 else
                 {
                     /* 404 Not Found */
@@ -1073,6 +1081,26 @@
             axis2_engine_free(engine, env);
             if(fault_ctx)
             {
+				// When service name is wrong, the fault_ctx soap envelope
+				// is shared with msg_ctx->soap envelop
+				if ( axis2_msg_ctx_get_fault_soap_envelope( msg_ctx, env ) ==
+					axis2_msg_ctx_get_soap_envelope( fault_ctx, env ) )
+				{
+					axis2_msg_ctx_set_soap_envelope( fault_ctx, env, NULL );
+				}
+
+				if ( axis2_msg_ctx_get_transport_out_stream( msg_ctx, env ) ==
+					 axis2_msg_ctx_get_transport_out_stream( fault_ctx, env ) )
+				{
+					axis2_msg_ctx_reset_transport_out_stream( fault_ctx, env );
+				}
+
+				if ( axis2_msg_ctx_get_out_transport_info( msg_ctx, env ) ==
+					axis2_msg_ctx_get_out_transport_info( fault_ctx, env ) )
+				{
+					axis2_msg_ctx_reset_out_transport_info( fault_ctx, env );
+				}
+
                 axis2_msg_ctx_free(fault_ctx, env);
             }
         }
Index: src/core/transport/http/util/http_transport_utils.c
===================================================================
--- src/core/transport/http/util/http_transport_utils.c	(revision 1175126)
+++ src/core/transport/http/util/http_transport_utils.c	(working copy)
@@ -1576,6 +1576,68 @@
 }
 
 AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+axis2_http_transport_utils_get_service_here(
+    const axutil_env_t * env,
+    axis2_conf_ctx_t * conf_ctx,
+	axis2_svc_t *service )
+{
+    axutil_hash_t *services_map = NULL;
+    axutil_hash_t *errorneous_svc_map = NULL;
+    axis2_char_t *ret = NULL;
+    axis2_char_t *tmp2 = (axis2_char_t *)NULL;
+    axutil_hash_index_t *hi = NULL;
+    axis2_bool_t svcs_exists = AXIS2_FALSE;
+    axis2_conf_t *conf = NULL;
+	axis2_char_t **url_tok = NULL;
+	axis2_char_t *svc_name = NULL;
+
+    AXIS2_PARAM_CHECK(env->error, conf_ctx, NULL);
+
+	svc_name = axutil_qname_get_localpart(axis2_svc_get_qname(((axis2_svc_t *)service), env),
+		env);
+
+    conf = axis2_conf_ctx_get_conf(conf_ctx, env);
+    services_map = axis2_conf_get_all_svcs(conf, env);
+    errorneous_svc_map = axis2_conf_get_all_faulty_svcs(conf, env);
+    if(services_map && 0 != axutil_hash_count(services_map))
+    {
+        void *service = NULL;
+        axis2_char_t *sname = NULL;
+        axutil_hash_t *ops = NULL;
+        svcs_exists = AXIS2_TRUE;
+
+        for(hi = axutil_hash_first(services_map, env); hi; hi = axutil_hash_next(env, hi))
+        {
+			axutil_hash_this(hi, NULL, NULL, &service);
+			sname = axutil_qname_get_localpart(axis2_svc_get_qname(((axis2_svc_t *)service), env),
+				env);
+            if(!axutil_strcmp(svc_name, sname))
+            {
+				ret = axutil_stracat(env, "", "<h1>");
+				tmp2 = ret;
+				ret = axutil_stracat(env, tmp2, sname);
+				tmp2 = ret;
+				ret = axutil_stracat(env, tmp2, "</h1>");
+				tmp2 = ret;
+			}
+		}
+	}
+
+	if ( tmp2 )
+	{
+		ret = axutil_stracat(env, tmp2, AXIS2_HTTP_AXIS_SERVICE_HERE);
+		AXIS2_FREE(env->allocator, tmp2);
+		tmp2 = ret;
+	}
+	else
+	{
+		ret = axutil_strdup(env, "Unable to retrieve this service");
+	}
+
+    return ret;
+}
+
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
 axis2_http_transport_utils_get_not_found(
     const axutil_env_t * env,
     axis2_conf_ctx_t * conf_ctx)
