diff --git a/res/parking/parking_bridge.c b/res/parking/parking_bridge.c
index b9ceb5203d9577d4c746e5b1a44e40e2c19d0d8c..56c5839bcce40cbf3b249b7644ec8fa057b66109 100644
--- a/res/parking/parking_bridge.c
+++ b/res/parking/parking_bridge.c
@@ -56,15 +56,7 @@ static void bridge_parking_destroy(struct ast_bridge_parking *self)
 
 static void bridge_parking_dissolving(struct ast_bridge_parking *self)
 {
-	struct parking_lot *lot = self->lot;
-
-	/* Unlink the parking bridge from the parking lot that owns it */
-	lot->parking_bridge = NULL;
-	ao2_ref(lot, -1);
-
-	/* Disassociate the bridge from the parking lot as well. */
 	self->lot = NULL;
-
 	ast_bridge_base_v_table.dissolving(&self->base);
 }
 
@@ -200,6 +192,8 @@ static int bridge_parking_push(struct ast_bridge_parking *self, struct ast_bridg
 
 	ast_bridge_base_v_table.push(&self->base, bridge_channel, swap);
 
+	ast_assert(self->lot != NULL);
+
 	/* Answer the channel if needed */
 	if (ast_channel_state(bridge_channel->chan) != AST_STATE_UP) {
 		ast_answer(bridge_channel->chan);
@@ -227,6 +221,12 @@ static int bridge_parking_push(struct ast_bridge_parking *self, struct ast_bridg
 
 		parking_set_duration(bridge_channel->features, pu);
 
+		/* BUGBUG Adding back local channel swapping made us not hear music on hold for the channel that got swapped
+		 * into the parking lot. Setting the roels back up gets around that, but we still need to deal with the ringing option
+		 * to the park application here somehow.
+		 */
+		parking_channel_set_roles(bridge_channel->chan, self->lot, 0);
+
 		return 0;
 	}