diff --git a/bridges/bridge_softmix.c b/bridges/bridge_softmix.c
index 8d2d67c27a8ca0608ec4bbcd58e437d52e398298..5acd7943b09e15484084bea7d20d7b5349dd1258 100644
--- a/bridges/bridge_softmix.c
+++ b/bridges/bridge_softmix.c
@@ -621,16 +621,16 @@ static int append_all_streams(struct ast_stream_topology *dest,
 static void sfu_topologies_on_join(struct ast_bridge *bridge,
 	struct ast_bridge_channel *joiner)
 {
-	struct ast_stream_topology *joiner_video = NULL;
+	RAII_VAR(struct ast_stream_topology *, joiner_video, NULL, ast_stream_topology_free);
 	struct ast_bridge_channels_list *participants = &bridge->channels;
 	struct ast_bridge_channel *participant;
 	int res;
 	struct softmix_channel *sc;
+	SCOPE_ENTER(3, "%s: \n", ast_channel_name(joiner->chan));
 
 	joiner_video = ast_stream_topology_alloc();
 	if (!joiner_video) {
-		ast_log(LOG_ERROR, "%s: Couldn't alloc topology\n", ast_channel_name(joiner->chan));
-		return;
+		SCOPE_EXIT_LOG_RTN(LOG_ERROR, "%s: Couldn't alloc topology\n", ast_channel_name(joiner->chan));
 	}
 
 	sc = joiner->tech_pvt;
@@ -643,30 +643,30 @@ static void sfu_topologies_on_join(struct ast_bridge *bridge,
 	ast_channel_unlock(joiner->chan);
 
 	if (res || !sc->topology) {
-		ast_log(LOG_ERROR, "%s: Couldn't append source streams\n", ast_channel_name(joiner->chan));
-		goto cleanup;
+		SCOPE_EXIT_LOG_RTN(LOG_ERROR, "%s: Couldn't append source streams\n", ast_channel_name(joiner->chan));
 	}
 
 	AST_LIST_TRAVERSE(participants, participant, entry) {
 		if (participant == joiner) {
 			continue;
 		}
+		ast_trace(-1, "%s: Appending existing participant %s\n", ast_channel_name(joiner->chan),
+			ast_channel_name(participant->chan));
 		ast_channel_lock(participant->chan);
 		res = append_source_streams(sc->topology, ast_channel_name(participant->chan),
 			bridge->softmix.send_sdp_label ? ast_channel_uniqueid(participant->chan) : NULL,
 			ast_channel_get_stream_topology(participant->chan));
 		ast_channel_unlock(participant->chan);
 		if (res) {
-			ast_log(LOG_ERROR, "%s/%s: Couldn't append source streams\n",
+			SCOPE_EXIT_LOG_RTN(LOG_ERROR, "%s/%s: Couldn't append source streams\n",
 				ast_channel_name(participant->chan), ast_channel_name(joiner->chan));
-			goto cleanup;
 		}
 	}
 
+	ast_trace(-1, "%s: Requesting topology change.\n", ast_channel_name(joiner->chan));
 	res = ast_channel_request_stream_topology_change(joiner->chan, sc->topology, NULL);
 	if (res) {
-		ast_debug(3, "%s: Couldn't request topology change\n", ast_channel_name(joiner->chan));
-		goto cleanup;
+		SCOPE_EXIT_LOG_RTN(LOG_ERROR, "%s: Couldn't request topology change\n", ast_channel_name(joiner->chan));
 	}
 
 	AST_LIST_TRAVERSE(participants, participant, entry) {
@@ -675,21 +675,22 @@ static void sfu_topologies_on_join(struct ast_bridge *bridge,
 		}
 
 		sc = participant->tech_pvt;
+		ast_trace(-1, "%s: Appending joiner %s\n", ast_channel_name(participant->chan),
+			ast_channel_name(joiner->chan));
+
 		if (append_all_streams(sc->topology, joiner_video)) {
-			ast_log(LOG_ERROR, "%s/%s: Couldn't apopend streams\n",
+			SCOPE_EXIT_LOG_RTN(LOG_ERROR, "%s/%s: Couldn't append streams\n",
 				ast_channel_name(participant->chan), ast_channel_name(joiner->chan));
-			goto cleanup;
 		}
+		ast_trace(-1, "%s: Requesting topology change\n", ast_channel_name(participant->chan));
 		res = ast_channel_request_stream_topology_change(participant->chan, sc->topology, NULL);
 		if (res) {
-			ast_debug(3, "%s/%s: Couldn't request topology change\n",
+			ast_trace(-1, "%s/%s: Couldn't request topology change\n",
 				ast_channel_name(participant->chan), ast_channel_name(joiner->chan));
-			goto cleanup;
 		}
 	}
 
-cleanup:
-	ast_stream_topology_free(joiner_video);
+	SCOPE_EXIT();
 }
 
 /*! \brief Function called when a channel is joined into the bridge */
@@ -706,15 +707,16 @@ static int softmix_bridge_join(struct ast_bridge *bridge, struct ast_bridge_chan
 	int pos_id;
 	int is_announcement = 0;
 	int samplerate_change;
+	SCOPE_ENTER(3, "%s:\n", ast_channel_name(bridge_channel->chan));
 
 	softmix_data = bridge->tech_pvt;
 	if (!softmix_data) {
-		return -1;
+		SCOPE_EXIT_RTN_VALUE(-1, "No tech_pvt\n");
 	}
 
 	/* Create a new softmix_channel structure and allocate various things on it */
 	if (!(sc = ast_calloc(1, sizeof(*sc)))) {
-		return -1;
+		SCOPE_EXIT_RTN_VALUE(-1, "Couldn't alloc tech_pvt\n");
 	}
 
 	samplerate_change = softmix_data->internal_rate;
@@ -739,7 +741,7 @@ static int softmix_bridge_join(struct ast_bridge *bridge, struct ast_bridge_chan
 						"Could not allocate enough memory.\n", bridge->uniqueid,
 						ast_channel_name(bridge_channel->chan));
 				ast_free(sc);
-				return -1;
+				SCOPE_EXIT_RTN_VALUE(-1, "Couldn't do binaural join\n");
 			}
 		}
 	}
@@ -768,7 +770,7 @@ static int softmix_bridge_join(struct ast_bridge *bridge, struct ast_bridge_chan
 	}
 
 	softmix_poke_thread(softmix_data);
-	return 0;
+	SCOPE_EXIT_RTN_VALUE(0);
 }
 
 static int remove_destination_streams(struct ast_stream_topology *topology,
@@ -2329,6 +2331,9 @@ static void softmix_bridge_stream_sources_update(struct ast_bridge *bridge, stru
 			ast_trace(-1, "%s: Stream %d:%s changed state from %s to %s\n",  ast_channel_name(bridge_channel->chan),
 				index, ast_stream_get_name(old_stream), ast_stream_state2str(ast_stream_get_state(old_stream)),
 				ast_stream_state2str(ast_stream_get_state(new_stream)));
+		} else {
+			ast_trace(-1, "%s: Stream %d:%s didn't do anything\n",  ast_channel_name(bridge_channel->chan),
+				index, ast_stream_get_name(old_stream));
 		}
 		SCOPE_EXIT();
 	}