diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c
index af7d8b6bab49b0cb771de5c4ba306c7da8feb8bb..ab48f88374e6d563e0bbc5bc1ee5c6a607144f5b 100644
--- a/coreapi/callbacks.c
+++ b/coreapi/callbacks.c
@@ -362,6 +362,7 @@ static void call_updating(SalOp *op){
 	if (md && !sal_media_description_empty(md))
 	{
 		if (sal_media_description_has_dir(call->localdesc,SalStreamSendRecv)){
+			ms_message("Our local status is SalStreamSendRecv");
 			if (sal_media_description_has_dir (md,SalStreamRecvOnly) || sal_media_description_has_dir(md,SalStreamInactive)){
 				/* we are being paused */
 				if(lc->vtable.display_status)
diff --git a/coreapi/offeranswer.c b/coreapi/offeranswer.c
index e9f4bcbe4c5a832d0d3e12998c97777c07143ae9..aea3f87e7943ada2f4c193a98843968f71b0f765 100644
--- a/coreapi/offeranswer.c
+++ b/coreapi/offeranswer.c
@@ -133,19 +133,16 @@ static SalStreamDir compute_dir_incoming(SalStreamDir local, SalStreamDir offere
 			res=SalStreamSendOnly;
 		if (offered==SalStreamInactive)
 			res=SalStreamInactive;
+		else
+			res=SalStreamSendRecv;
 	}else if (local==SalStreamSendOnly){
-		if (offered==SalStreamSendOnly)
-			res=SalStreamInactive;
 		if (offered==SalStreamRecvOnly)
 			res=SalStreamSendOnly;
-		if (offered==SalStreamInactive)
-			res=SalStreamInactive;
+		else res=SalStreamInactive;
 	}else if (local==SalStreamRecvOnly){
-		if (offered==SalStreamSendOnly)
+		if (offered==SalStreamSendOnly || offered==SalStreamSendRecv)
 			res=SalStreamRecvOnly;
-		if (offered==SalStreamRecvOnly)
-			res=SalStreamInactive;
-		if (offered==SalStreamInactive)
+		else
 			res=SalStreamInactive;
 	}else res=SalStreamInactive;
 	return res;
@@ -177,7 +174,7 @@ static void initiate_incoming(const SalStreamDescription *local_cap,
 	result->payloads=match_payloads(local_cap->payloads,remote_offer->payloads, FALSE, one_matching_codec);
 	result->proto=local_cap->proto;
 	result->type=local_cap->type;
-	result->dir=compute_dir_incoming(result->dir,remote_offer->dir);
+	result->dir=compute_dir_incoming(local_cap->dir,remote_offer->dir);
 	if (result->payloads && !only_telephone_event(result->payloads)){
 		strcpy(result->addr,local_cap->addr);
 		result->port=local_cap->port;