diff --git a/src/gsm/gsm48_ie.c b/src/gsm/gsm48_ie.c
index 6d40bec4..b3e56075 100644
--- a/src/gsm/gsm48_ie.c
+++ b/src/gsm/gsm48_ie.c
@@ -203,16 +203,25 @@ int gsm48_decode_bearer_cap(struct gsm_mncc_bearer_cap *bcap,
 	case GSM_MNCC_BCAP_SPEECH:
 		i = 1;
 		s = 0;
-		while(!(lv[i] & 0x80)) {
-			i++; /* octet 3a etc */
-			if (in_len < i)
-				return 0;
-			bcap->speech_ver[s++] = lv[i] & 0x0f;
+		if((lv[1] & 0x80) != 0)
+		{
+			bcap->speech_ver[s++] = GSM48_BCAP_SV_FR; /* GSM FR only */
 			bcap->speech_ver[s] = -1; /* end of list */
-			if (i == 2) /* octet 3a */
-				bcap->speech_ctm = (lv[i] & 0x20) >> 5;
-			if (s == 7) /* maximum speech versions + end of list */
-				return 0;
+			return 0;
+		}
+		else
+		{
+			while(!(lv[i] & 0x80)) {
+				i++; /* octet 3a etc */
+				if (in_len < i)
+					return 0;
+				bcap->speech_ver[s++] = lv[i] & 0x0f;
+				bcap->speech_ver[s] = -1; /* end of list */
+				if (i == 2) /* octet 3a */
+					bcap->speech_ctm = (lv[i] & 0x20) >> 5;
+				if (s == 7) /* maximum speech versions + end of list */
+					return 0;
+			}
 		}
 		break;
 	case GSM_MNCC_BCAP_UNR_DIG:
