diff --git a/main/stasis.c b/main/stasis.c
index 02f6e538c08a4062e41b33542a88ade28178f724..d7aafaaa87138258ebcc5fd25701ea2429f769fc 100644
--- a/main/stasis.c
+++ b/main/stasis.c
@@ -406,9 +406,10 @@ AO2_STRING_FIELD_HASH_FN(topic_proxy, name);
 AO2_STRING_FIELD_CMP_FN(topic_proxy, name);
 AO2_STRING_FIELD_CASE_SORT_FN(topic_proxy, name);
 
-static void proxy_dtor(void *weakproxy, void *data)
+static void proxy_dtor(void *weakproxy, void *container)
 {
-	ao2_unlink(topic_all, weakproxy);
+	ao2_unlink(container, weakproxy);
+	ao2_cleanup(container);
 }
 
 /* Forward declarations for the tightly-coupled subscription object */
@@ -537,9 +538,10 @@ static int link_topic_proxy(struct stasis_topic *topic, const char *name, const
 		return -1;
 	}
 
-	if (ao2_weakproxy_subscribe(proxy, proxy_dtor, NULL, OBJ_NOLOCK)) {
+	if (ao2_weakproxy_subscribe(proxy, proxy_dtor, ao2_bump(topic_all), OBJ_NOLOCK)) {
 		ao2_cleanup(proxy);
 		ao2_unlock(topic_all);
+		ao2_cleanup(topic_all);
 
 		return -1;
 	}