diff --git a/res/res_stasis.c b/res/res_stasis.c
index f2abaf7703942a04c2f4c8d86138d0148f1cd214..c11f829765fbfbd0749aadd60e3c16b99b02ec1e 100644
--- a/res/res_stasis.c
+++ b/res/res_stasis.c
@@ -513,6 +513,11 @@ static struct ast_channel *bridge_moh_create(struct ast_bridge *bridge)
 		return NULL;
 	}
 
+	if (stasis_app_channel_unreal_set_internal(chan)) {
+		ast_hangup(chan);
+		return NULL;
+	}
+
 	/* The after bridge callback assumes responsibility of the bridge_id. */
 	if (ast_bridge_set_after_callback(chan,
 		moh_after_bridge_cb, moh_after_bridge_cb_failed, bridge_id)) {
diff --git a/res/stasis/stasis_bridge.c b/res/stasis/stasis_bridge.c
index 9aef40353838b71310d6ca7ae87989cfdc1b3533..7229a87d5a4d5df46bc946f52d1f7627172a0b22 100644
--- a/res/stasis/stasis_bridge.c
+++ b/res/stasis/stasis_bridge.c
@@ -130,6 +130,24 @@ static int bridge_stasis_push(struct ast_bridge *self, struct ast_bridge_channel
 		return -1;
 	}
 
+	/*
+	 * If going into a holding bridge, default the role to participant, if
+	 * it has no compatible role currently
+	 */
+	if ((self->technology->capabilities & AST_BRIDGE_CAPABILITY_HOLDING)
+	    && !ast_channel_has_role(bridge_channel->chan, "announcer")
+	    && !ast_channel_has_role(bridge_channel->chan, "holding_participant")) {
+		if (ast_channel_add_bridge_role(bridge_channel->chan, "holding_participant")) {
+			ast_log(LOG_ERROR, "Failed to set holding participant on %s\n", ast_channel_name(bridge_channel->chan));
+			return -1;
+		}
+
+		if (ast_channel_set_bridge_role_option(bridge_channel->chan, "holding_participant", "idle_mode", "none")) {
+			ast_log(LOG_ERROR, "Failed to set holding participant mode on %s\n", ast_channel_name(bridge_channel->chan));
+			return -1;
+		}
+	}
+
 	ao2_cleanup(control);
 	if (self->allowed_capabilities & STASIS_BRIDGE_MIXING_CAPABILITIES) {
 		ast_bridge_channel_update_linkedids(bridge_channel, swap);
@@ -187,6 +205,10 @@ static void bridge_stasis_pull(struct ast_bridge *self, struct ast_bridge_channe
 		ast_bridge_channel_update_accountcodes(NULL, bridge_channel);
 	}
 
+	if (self->technology->capabilities & AST_BRIDGE_CAPABILITY_HOLDING) {
+		ast_channel_clear_bridge_roles(bridge_channel->chan);
+	}
+
 	ast_bridge_move_hook(bridge_channel->features, bridge_stasis_moving, NULL, NULL, 0);
 
 	ast_bridge_base_v_table.pull(self, bridge_channel);