diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c
index b9364ff24a..e1570a7af5 100644
--- a/src/mod/applications/mod_conference/mod_conference.c
+++ b/src/mod/applications/mod_conference/mod_conference.c
@@ -1914,6 +1914,8 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v
 	uint32_t hangover = 40, hangunder = 15, hangover_hits = 0, hangunder_hits = 0, energy_level = 0, diff_level = 400;
 	switch_codec_implementation_t read_impl = { 0 };
 	switch_core_session_t *session = member->session;
+	int check_floor_change;
+
 	switch_assert(member != NULL);
 
 	switch_clear_flag_locked(member, MFLAG_TALKING);
@@ -1926,6 +1928,7 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v
 	   and mux it with any audio from other channels. */
 
 	while (switch_test_flag(member, MFLAG_RUNNING) && switch_channel_ready(channel)) {
+		check_floor_change = 0;
 
 		if (switch_channel_ready(channel) && switch_channel_test_app_flag(channel, CF_APP_TAGGED)) {
 			switch_yield(100000);
@@ -2083,25 +2086,7 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v
 				}
 
 				if (diff >= diff_level || ++hangunder_hits >= hangunder) { 
-
-                    switch_mutex_lock(member->conference->member_mutex);
-                    if ((!member->conference->floor_holder ||
-                        !switch_test_flag(member->conference->floor_holder, MFLAG_TALKING) ||
-                        ((member->score_iir > SCORE_IIR_SPEAKING_MAX) && (member->conference->floor_holder->score_iir < SCORE_IIR_SPEAKING_MIN))) &&
-                        (!switch_test_flag(member->conference, CFLAG_VID_FLOOR) || switch_channel_test_flag(channel, CF_VIDEO))) {
-
-                        if (test_eflag(member->conference, EFLAG_FLOOR_CHANGE) &&
-                            switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
-                            conference_add_event_member_data(member, event);
-                            switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "floor-change");
-                            switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Old-ID", "%d",
-                                                    member->conference->floor_holder ? member->conference->floor_holder->id : 0);
-                            switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-ID", "%d", member->conference->floor_holder ? member->id : 0);
-                            switch_event_fire(&event);
-                        }
-                        member->conference->floor_holder = member;
-                    }
-                    switch_mutex_unlock(member->conference->member_mutex);
+					check_floor_change = 1;
 
 					hangover_hits = hangunder_hits = 0;
 					member->last_talking = switch_epoch_time_now(NULL);
@@ -2191,6 +2176,28 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, v
 	  do_continue:
 
 		switch_mutex_unlock(member->read_mutex);
+
+		if (check_floor_change) {
+			switch_mutex_lock(member->conference->member_mutex);
+			if ((!member->conference->floor_holder ||
+				 !switch_test_flag(member->conference->floor_holder, MFLAG_TALKING) ||
+				 ((member->score_iir > SCORE_IIR_SPEAKING_MAX) && (member->conference->floor_holder->score_iir < SCORE_IIR_SPEAKING_MIN))) &&
+				(!switch_test_flag(member->conference, CFLAG_VID_FLOOR) || switch_channel_test_flag(channel, CF_VIDEO))) {
+
+				if (test_eflag(member->conference, EFLAG_FLOOR_CHANGE) &&
+					switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
+					conference_add_event_member_data(member, event);
+					switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "floor-change");
+					switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Old-ID", "%d",
+											member->conference->floor_holder ? member->conference->floor_holder->id : 0);
+					switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-ID", "%d", member->conference->floor_holder ? member->id : 0);
+					switch_event_fire(&event);
+				}
+				member->conference->floor_holder = member;
+			}
+			switch_mutex_unlock(member->conference->member_mutex);
+		}
+
 	}