diff --git a/include/belle-sip/object.h b/include/belle-sip/object.h
index 28245548b17e7ccd6619926f53928d82a84ae62c..c77a3f8469bf9035d369491e7443b67f915d6bc5 100644
--- a/include/belle-sip/object.h
+++ b/include/belle-sip/object.h
@@ -236,6 +236,10 @@ BELLESIP_EXPORT belle_sip_object_t * belle_sip_object_ref(void *obj);
 **/
 BELLESIP_EXPORT void belle_sip_object_unref(void *obj);
 
+/**
+ * Decrements the reference counter. When it drops to zero, the object is destroyed and returns TRUE. Otherwise returns FALSE.
+**/
+BELLESIP_EXPORT int belle_sip_object_unref_2(void *obj);
 
 typedef void (*belle_sip_object_destroy_notify_t)(void *userpointer, belle_sip_object_t *obj_being_destroyed);
 /**
diff --git a/src/belle_sip_object.c b/src/belle_sip_object.c
index a65862732545aa3063e3bf9df0ef6def7b3daa4a..46acb8ffe807a83993e702efa7280196815f4265 100644
--- a/src/belle_sip_object.c
+++ b/src/belle_sip_object.c
@@ -123,14 +123,18 @@ belle_sip_object_t * belle_sip_object_ref(void *obj){
 	return obj;
 }
 
-void belle_sip_object_unref(void *ptr){
+void belle_sip_object_unref(void *ptr) {
+	belle_sip_object_unref_2(ptr);
+}
+
+int belle_sip_object_unref_2(void *ptr) {
 	belle_sip_object_t *obj=BELLE_SIP_OBJECT(ptr);
 	if (obj->ref <= -1) {
 		belle_sip_error("Object [%p] freed twice or corrupted !",obj);
 		if (obj->vptr && obj->vptr->type_name) belle_sip_error("Object type might be [%s]",obj->vptr->type_name);
 		if (obj->name) belle_sip_error("Object name might be [%s]",obj->name);
 		belle_sip_fatal("Fatal object error encountered, aborting.");
-		return;
+		return 1;
 	}
 
 	if (obj->vptr->initially_unowned && obj->ref==0){
@@ -138,7 +142,7 @@ void belle_sip_object_unref(void *ptr){
 			belle_sip_object_pool_remove(obj->pool,obj);
 		obj->ref=-1;
 		belle_sip_object_delete(obj);
-		return;
+		return 1;
 	}
 
 
@@ -155,7 +159,9 @@ void belle_sip_object_unref(void *ptr){
 	if (obj->ref == 0){
 		obj->ref = -1;
 		belle_sip_object_delete(obj);
+		return 1;
 	}
+	return 0;
 }
 
 static weak_ref_t *weak_ref_new(belle_sip_object_destroy_notify_t destroy_notify, void *userpointer){