diff --git a/src/eapol.c b/src/eapol.c
index e3ee8662..79b26f0e 100644
--- a/src/eapol.c
+++ b/src/eapol.c
@@ -81,6 +81,7 @@ bool eapol_calculate_mic(enum ie_rsn_akm_suite akm, const uint8_t *kck,
 	case EAPOL_KEY_DESCRIPTOR_VERSION_AKM_DEFINED:
 		switch (akm) {
 		case IE_RSN_AKM_SUITE_SAE_SHA256:
+		case IE_RSN_AKM_SUITE_FT_OVER_SAE_SHA256:
 			return cmac_aes(kck, 16, frame, frame_len, mic, 16);
 		default:
 			return false;
@@ -123,6 +124,7 @@ bool eapol_verify_mic(enum ie_rsn_akm_suite akm, const uint8_t *kck,
 	case EAPOL_KEY_DESCRIPTOR_VERSION_AKM_DEFINED:
 		switch (akm) {
 		case IE_RSN_AKM_SUITE_SAE_SHA256:
+		case IE_RSN_AKM_SUITE_FT_OVER_SAE_SHA256:
 			checksum = l_checksum_new_cmac_aes(kck, 16);
 			break;
 		default:
@@ -167,7 +169,7 @@ uint8_t *eapol_decrypt_key_data(enum ie_rsn_akm_suite akm, const uint8_t *kek,
 		 * type this will need to be expanded to handle the AKM types in
 		 * its own switch.
 		 */
-		if (akm != IE_RSN_AKM_SUITE_SAE_SHA256)
+		if (!IE_AKM_IS_SAE(akm))
 			return NULL;
 
 		/* Fall through */
diff --git a/src/ie.h b/src/ie.h
index 72974a26..8448b858 100644
--- a/src/ie.h
+++ b/src/ie.h
@@ -252,6 +252,10 @@ enum ie_rsn_akm_suite {
 	IE_RSN_AKM_SUITE_FT_OVER_8021X_SHA384	= 0x1000,
 };
 
+#define IE_AKM_IS_SAE(akm) \
+	((akm == IE_RSN_AKM_SUITE_SAE_SHA256) || \
+	(akm == IE_RSN_AKM_SUITE_FT_OVER_SAE_SHA256))
+
 struct ie_tlv_iter {
 	unsigned int max;
 	unsigned int pos;
diff --git a/src/netdev.c b/src/netdev.c
index 1f6023f0..4604555e 100644
--- a/src/netdev.c
+++ b/src/netdev.c
@@ -2510,7 +2510,7 @@ int netdev_connect(struct netdev *netdev, struct scan_bss *bss,
 	if (netdev->connected)
 		return -EISCONN;
 
-	if (hs->akm_suite == IE_RSN_AKM_SUITE_SAE_SHA256) {
+	if (IE_AKM_IS_SAE(hs->akm_suite)) {
 		netdev->sae_sm = sae_sm_new(hs, netdev_tx_sae_frame,
 						netdev_sae_complete, netdev);
 	} else {
diff --git a/src/station.c b/src/station.c
index df0b5948..74b64a19 100644
--- a/src/station.c
+++ b/src/station.c
@@ -380,6 +380,9 @@ static enum ie_rsn_akm_suite select_akm_suite(struct network *network,
 		if (info->akm_suites & IE_RSN_AKM_SUITE_8021X)
 			return IE_RSN_AKM_SUITE_8021X;
 	} else if (security == SECURITY_PSK) {
+		if (info->akm_suites & IE_RSN_AKM_SUITE_FT_OVER_SAE_SHA256)
+			return IE_RSN_AKM_SUITE_FT_OVER_SAE_SHA256;
+
 		if (info->akm_suites & IE_RSN_AKM_SUITE_SAE_SHA256)
 			return IE_RSN_AKM_SUITE_SAE_SHA256;