diff --git a/src/mod/applications/mod_avmd/mod_avmd.c b/src/mod/applications/mod_avmd/mod_avmd.c
index 2715f8c24a..eb1cfa37d6 100644
--- a/src/mod/applications/mod_avmd/mod_avmd.c
+++ b/src/mod/applications/mod_avmd/mod_avmd.c
@@ -151,7 +151,7 @@ typedef struct {
 static void avmd_process(avmd_session_t *session, switch_frame_t *frame);
 static switch_bool_t avmd_callback(switch_media_bug_t * bug,
                                     void *user_data, switch_abc_type_t type);
-static void init_avmd_session_data(avmd_session_t *avmd_session,
+static int init_avmd_session_data(avmd_session_t *avmd_session,
                                     switch_core_session_t *fs_session);
 
 
@@ -160,7 +160,7 @@ static void init_avmd_session_data(avmd_session_t *avmd_session,
  * @param avmd_session A reference to a avmd session.
  * @param fs_session A reference to a FreeSWITCH session.
  */
-static void init_avmd_session_data(avmd_session_t *avmd_session,
+static int init_avmd_session_data(avmd_session_t *avmd_session,
                                     switch_core_session_t *fs_session)
 {
     size_t buf_sz;
@@ -172,10 +172,7 @@ static void init_avmd_session_data(avmd_session_t *avmd_session,
             (size_t)FRAME_LEN(avmd_session->rate),
             fs_session);
     if (avmd_session->b.buf == NULL) {
-            switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session),
-                    SWITCH_LOG_ERROR, "Failed to init avmd session."
-                    " Buffer error\n");
-            return;
+            return -1;
     }
 	avmd_session->session = fs_session;
 	avmd_session->pos = 0;
@@ -189,29 +186,21 @@ static void init_avmd_session_data(avmd_session_t *avmd_session,
 
     buf_sz = BEEP_LEN(avmd_session->rate) / SINE_LEN(avmd_session->rate);
     if (buf_sz < 1) {
-            switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session),
-                    SWITCH_LOG_ERROR, "Failed to init avmd session."
-                    " SMA buffer size is 0!\n");
-            return;
+            return -2;
     }
 
     INIT_SMA_BUFFER(&avmd_session->sma_b, buf_sz, fs_session);
     if (avmd_session->sma_b.data == NULL) {
-            switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session),
-                    SWITCH_LOG_ERROR, "Failed to init avmd session."
-                    " SMA buffer error\n");
-            return;
+            return -3;
     }
     memset(avmd_session->sma_b.data, 0, sizeof(BUFF_TYPE) * buf_sz);
 
     INIT_SMA_BUFFER(&avmd_session->sqa_b, buf_sz, fs_session);
     if (avmd_session->sqa_b.data == NULL) {
-            switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session),
-                    SWITCH_LOG_ERROR, "Failed to init avmd session."
-                    " SMA sqa buffer error\n");
-            return;
+            return -4;
     }
     memset(avmd_session->sqa_b.data, 0, sizeof(BUFF_TYPE) * buf_sz);
+    return 0;
 }
 
 
@@ -405,6 +394,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_avmd_load)
  */
 SWITCH_STANDARD_APP(avmd_start_function)
 {
+    int res;
 	switch_media_bug_t *bug;
 	switch_status_t status;
 	switch_channel_t *channel;
@@ -412,11 +402,8 @@ SWITCH_STANDARD_APP(avmd_start_function)
     switch_media_bug_flag_t flags = 0;
 
 	if (session == NULL) {
-        switch_log_printf(
-                SWITCH_CHANNEL_LOG,
-			    SWITCH_LOG_ERROR,
-			    "No FreeSWITCH session assigned!\n"
-		);
+        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
+			    "No FreeSWITCH session assigned!\n");
 		return;
     }
 
@@ -442,7 +429,37 @@ SWITCH_STANDARD_APP(avmd_start_function)
 	avmd_session = (avmd_session_t *)switch_core_session_alloc(
                                             session, sizeof(avmd_session_t));
 
-	init_avmd_session_data(avmd_session, session);
+	res = init_avmd_session_data(avmd_session, session);
+    if (res != 0) {
+        switch (res) {
+            case -1:
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),
+                    SWITCH_LOG_ERROR, "Failed to init avmd session."
+                    " Buffer error!\n");
+            break;
+            case -2:
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),
+                    SWITCH_LOG_ERROR, "Failed to init avmd session."
+                    " SMA buffer size is 0!\n");
+                break;
+            case -3:
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),
+                    SWITCH_LOG_ERROR, "Failed to init avmd session."
+                    " SMA buffer error\n");
+                break;
+            case -4:
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),
+                    SWITCH_LOG_ERROR, "Failed to init avmd session."
+                    " SMA sqa buffer error\n");
+                break;
+            default:
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),
+                    SWITCH_LOG_ERROR, "Failed to init avmd session."
+                    " Unknown error\n");
+                break;
+        }
+		return;
+    }
 
 #ifdef AVMD_INBOUND_CHANNEL
     flags |= SMBF_READ_REPLACE;
@@ -520,6 +537,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_avmd_shutdown)
  */
 SWITCH_STANDARD_API(avmd_api_main)
 {
+    int res;
 	switch_core_session_t *fs_session = NULL;
 	switch_media_bug_t *bug;
 	avmd_session_t *avmd_session;
@@ -528,7 +546,7 @@ SWITCH_STANDARD_API(avmd_api_main)
 	int argc;
 	char *argv[AVMD_PARAMS];
 	char *ccmd = NULL;
-	char *uuid;
+	char *uuid, *uuid_dup;
 	char *command;
     switch_core_media_flag_t flags = 0;
 
@@ -572,13 +590,40 @@ SWITCH_STANDARD_API(avmd_api_main)
 	channel = switch_core_session_get_channel(fs_session);
 	if (channel == NULL) {
 		stream->write_function(stream, "-ERR, no channel for FreeSWITCH session [%s]!"
-                "\nPlease report this to the developers\n\n", uuid);
+                "\n Please report this to the developers.\n\n", uuid);
 		goto end;
 	}
+
+	/* Is this channel already set? */
+	bug = (switch_media_bug_t *) switch_channel_get_private(channel, "_avmd_");
+	/* If yes */
+	if (bug != NULL) {
+		/* If we have a stop remove audio bug */
+		if (strcasecmp(command, "stop") == 0) {
+            uuid_dup = switch_core_strdup(switch_core_session_get_pool(fs_session), uuid);
+			switch_channel_set_private(channel, "_avmd_", NULL);
+			switch_core_media_bug_remove(fs_session, &bug);
+			switch_safe_free(ccmd);
+			stream->write_function(stream, "+OK\n [%s] [%s] stopped.\n\n",
+                    uuid_dup, switch_channel_get_name(channel));
+		    switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session), SWITCH_LOG_INFO,
+			    "Avmd on channel [%s] stopped!\n", switch_channel_get_name(channel));
+			goto end;
+		}
+
+		/* We have already started */
+		switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session),
+                SWITCH_LOG_ERROR, "Avmd already started!\n");
+		stream->write_function(stream, "-ERR, avmd for FreeSWITCH session [%s]"
+                "\n already started\n\n", uuid);
+
+		goto end;
+	}
+
 #ifdef AVMD_OUTBOUND_CHANNEL
     if (SWITCH_CALL_DIRECTION_OUTBOUND != switch_channel_direction(channel)) {
 		stream->write_function(stream, "-ERR, channel for FreeSWITCH session [%s]"
-                "\nis not outbound\n\n", uuid);
+                "\n is not outbound.\n\n", uuid);
 		switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session), SWITCH_LOG_WARNING,
 			"Channel [%s] is not outbound!\n", switch_channel_get_name(channel));
     } else {
@@ -588,7 +633,7 @@ SWITCH_STANDARD_API(avmd_api_main)
 #ifdef AVMD_INBOUND_CHANNEL
     if (SWITCH_CALL_DIRECTION_INBOUND != switch_channel_direction(channel)) {
 		stream->write_function(stream, "-ERR, channel for FreeSWITCH session [%s]"
-                "\nis not inbound.\n\n", uuid);
+                "\n is not inbound.\n\n", uuid);
 		switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session), SWITCH_LOG_WARNING,
 			"Channel [%s] is not inbound!\n", switch_channel_get_name(channel));
     } else {
@@ -608,39 +653,19 @@ SWITCH_STANDARD_API(avmd_api_main)
 #ifdef AVMD_OUTBOUND_CHANNEL
     if (switch_channel_test_flag(channel, CF_MEDIA_SET) == 0) {
 		stream->write_function(stream, "-ERR, channel [%s] for FreeSWITCH session [%s]"
-                "\nhas no read codec assigned yet. Please try again\n\n",
+                "\n has no read codec assigned yet. Please try again.\n\n",
                 switch_channel_get_name(channel), uuid);
 		switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session), SWITCH_LOG_ERROR,
 			"Failed to start session. Channel [%s] has no codec assigned yet."
-            " Please try again\n",
-            switch_channel_get_name(channel));
+            " Please try again\n", switch_channel_get_name(channel));
         goto end;
     }
 #endif
-	/* Is this channel already set? */
-	bug = (switch_media_bug_t *) switch_channel_get_private(channel, "_avmd_");
-	/* If yes */
-	if (bug != NULL) {
-		/* If we have a stop remove audio bug */
-		if (strcasecmp(command, "stop") == 0) {
-			switch_channel_set_private(channel, "_avmd_", NULL);
-			switch_core_media_bug_remove(fs_session, &bug);
-			switch_safe_free(ccmd);
-			stream->write_function(stream, "+OK, [%s] stopped\n", uuid);
-			goto end;
-		}
-
-		/* We have already started */
-		switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session), SWITCH_LOG_WARNING,
-			"Cannot run 2 at once on the same channel!\n");
-
-		goto end;
-	}
 
 	/* If we don't see the expected start exit */
 	if (strcasecmp(command, "start") != 0) {
 		stream->write_function(stream, "-ERR, did you mean\n"
-                "api avmd %s start ?\n-USAGE: %s\n\n", uuid, AVMD_SYNTAX);
+                " api avmd %s start ?\n-USAGE: %s\n\n", uuid, AVMD_SYNTAX);
 		goto end;
 	}
 
@@ -649,7 +674,44 @@ SWITCH_STANDARD_API(avmd_api_main)
 	avmd_session = (avmd_session_t *) switch_core_session_alloc(
                                             fs_session, sizeof(avmd_session_t));
 
-	init_avmd_session_data(avmd_session, fs_session);
+	res = init_avmd_session_data(avmd_session, fs_session);
+    if (res != 0) {
+		stream->write_function(stream, "-ERR, failed to initialize avmd session\n"
+                " for FreeSWITCH session [%s]\n", uuid);
+        switch (res) {
+            case -1:
+		        stream->write_function(stream, "-ERR, buffer error\n\n");
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session),
+                    SWITCH_LOG_ERROR, "Failed to init avmd session."
+                    " Buffer error!\n");
+            break;
+            case -2:
+		        stream->write_function(stream, "-ERR, SMA buffer size is 0\n\n");
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session),
+                    SWITCH_LOG_ERROR, "Failed to init avmd session."
+                    " SMA buffer size is 0!\n");
+                break;
+            case -3:
+		        stream->write_function(stream, "-ERR, SMA buffer error\n\n");
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session),
+                    SWITCH_LOG_ERROR, "Failed to init avmd session."
+                    " SMA buffer error\n");
+                break;
+            case -4:
+		        stream->write_function(stream, "-ERR, SMA sqa buffer error\n\n");
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session),
+                    SWITCH_LOG_ERROR, "Failed to init avmd session."
+                    " SMA sqa buffer error\n");
+                break;
+            default:
+		        stream->write_function(stream, "-ERR, unknown error\n\n");
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session),
+                    SWITCH_LOG_ERROR, "Failed to init avmd session."
+                    " Unknown error\n");
+                break;
+        }
+		goto end;
+    }
 
 	/* Add a media bug that allows me to intercept the
 	* reading leg of the audio stream */
@@ -677,10 +739,10 @@ SWITCH_STANDARD_API(avmd_api_main)
 	switch_channel_set_private(channel, "_avmd_", bug);
 
 	/* OK */
-	switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session), SWITCH_LOG_INFO,
-			"Avmd session on channel [%s] started\n", switch_channel_get_name(channel));
-	stream->write_function(stream, "+OK, start\n\n");
-
+	stream->write_function(stream, "+OK\n [%s] [%s] started!\n\n",
+            uuid, switch_channel_get_name(channel));
+    switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_session), SWITCH_LOG_INFO,
+            "Avmd on channel [%s] started!\n", switch_channel_get_name(channel));
 
 end: