diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index 53ddf2a1bea629a7b502025b5cadfc84d31ceff4..f5217ea5338ea21665acd6f0868a7629763275b6 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -946,12 +946,12 @@ static struct dahdi_pvt {
 	unsigned int inservice:1;
 	/*!
 	 * \brief TRUE if the channel is locally blocked.
-	 * \note Applies to SS7 channels.
+	 * \note Applies to SS7 and MFCR2 channels.
 	 */
 	unsigned int locallyblocked:1;
 	/*!
 	 * \brief TRUE if the channel is remotely blocked.
-	 * \note Applies to SS7 channels.
+	 * \note Applies to SS7 and MFCR2 channels.
 	 */
 	unsigned int remotelyblocked:1;
 #if defined(HAVE_PRI)
@@ -11400,24 +11400,34 @@ static inline int available(struct dahdi_pvt *p, int channelmatch, ast_group_t g
 	}
 #endif
 
-#ifdef HAVE_SS7
-	/* Trust SS7 */
-	if (p->ss7) {
-		if (p->ss7call)
-			return 0;
-		else
-			return 1;
+	if (p->locallyblocked || p->remotelyblocked) {
+		return 0;
 	}
+
+	/* If no owner definitely available */
+	if (!p->owner) {
+#ifdef HAVE_SS7
+		/* Trust SS7 */
+		if (p->ss7) {
+			if (p->ss7call) {
+				return 0;
+			} else {
+				return 1;
+			}
+		}
 #endif
 #ifdef HAVE_OPENR2
-	/* Trust MFC/R2 */
-	if (p->mfcr2) {
-		if (p->mfcr2call)
-			return 0;
-		else
-			return 1;
-	}
+		/* Trust MFC/R2 */
+		if (p->mfcr2) {
+			if (p->mfcr2call) {
+				return 0;
+			} else {
+				return 1;
+			}
+		}
 #endif
+		return 1;
+	}
 
 	return 0;
 }