diff --git a/funcs/func_srv.c b/funcs/func_srv.c
index 9715a276cf9f6cf61b47a17ffe0a28c9b2a0a3e0..dc936c07a17a384c298d1cf53a82b8a877371f83 100644
--- a/funcs/func_srv.c
+++ b/funcs/func_srv.c
@@ -1,7 +1,7 @@
 /*
  * Asterisk -- An open source telephony toolkit.
  *
- * Copyright (C) 1999 - 2006 Digium, Inc.
+ * Copyright (C) 1999 - 2010 Digium, Inc.
  *
  * See http://www.asterisk.org for more information about
  * the Asterisk project. Please do not directly contact
@@ -99,14 +99,17 @@ static struct srv_context *srv_datastore_setup(const char *service, struct ast_c
 		return NULL;
 	}
 
+	ast_autoservice_start(chan);
 	if (ast_srv_lookup(&srds->context, service, &host, &port) < 0) {
+		ast_autoservice_stop(chan);
 		ast_log(LOG_NOTICE, "Error performing lookup of service '%s'\n", service);
 		ast_free(srds);
 		return NULL;
 	}
+	ast_autoservice_stop(chan);
 
 	strcpy(srds->id, service);
-	
+
 	if (!(datastore = ast_datastore_alloc(&srv_result_datastore_info, srds->id))) {
 		ast_srv_cleanup(&srds->context);
 		ast_free(srds);
@@ -245,12 +248,16 @@ static int unload_module(void)
 
 static int load_module(void)
 {
-	int res = AST_MODULE_LOAD_SUCCESS;
-
-	res |= ast_custom_function_register(&srv_query_function);
-	res |= ast_custom_function_register(&srv_result_function);
+	int res = ast_custom_function_register(&srv_query_function);
+	if (res < 0) {
+		return AST_MODULE_LOAD_DECLINE;
+	}
+	res = ast_custom_function_register(&srv_result_function);
+	if (res < 0) {
+		return AST_MODULE_LOAD_DECLINE;
+	}
 
-	return res;
+	return AST_MODULE_LOAD_SUCCESS;;
 }
 
 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "SRV related dialplan functions");