--- a/src/supplicant-manager/nm-supplicant-config.c
+++ b/src/supplicant-manager/nm-supplicant-config.c
@@ -47,6 +47,7 @@ typedef struct
 	GHashTable *config;
 	GHashTable *blobs;
 	guint32    ap_scan;
+	guint32    pmf;
 	gboolean   fast_required;
 	gboolean   dispose_has_run;
 } NMSupplicantConfigPrivate;
@@ -84,6 +85,7 @@ nm_supplicant_config_init (NMSupplicantC
 	                                     (GDestroyNotify) blob_free);
 
 	priv->ap_scan = 1;
+	priv->pmf = 1;
 	priv->dispose_has_run = FALSE;
 }
 
@@ -270,6 +272,14 @@ nm_supplicant_config_get_ap_scan (NMSupp
 	return NM_SUPPLICANT_CONFIG_GET_PRIVATE (self)->ap_scan;
 }
 
+guint32
+nm_supplicant_config_get_pmf (NMSupplicantConfig * self)
+{
+	g_return_val_if_fail (NM_IS_SUPPLICANT_CONFIG (self), 1);
+
+	return NM_SUPPLICANT_CONFIG_GET_PRIVATE (self)->pmf;
+}
+
 gboolean
 nm_supplicant_config_fast_required (NMSupplicantConfig *self)
 {
@@ -380,6 +390,8 @@ nm_supplicant_config_add_setting_wireles
 	else
 		priv->ap_scan = 1;
 
+	priv->pmf = 1;
+
 	ssid = nm_setting_wireless_get_ssid (setting);
 	if (!nm_supplicant_config_add_option (self, "ssid",
 	                                      (char *) g_bytes_get_data (ssid, NULL),
@@ -796,6 +808,7 @@ nm_supplicant_config_add_setting_8021x (
 		if (!add_string_val (self, "0", "eapol_flags", FALSE, FALSE, error))
 			return FALSE;
 		priv->ap_scan = 0;
+		priv->pmf = 0;
 	}
 
 	if (!ADD_STRING_LIST_VAL (self, setting, 802_1x, eap_method, eap_methods, "eap", ' ', TRUE, FALSE, error))
--- a/src/supplicant-manager/nm-supplicant-interface.c
+++ b/src/supplicant-manager/nm-supplicant-interface.c
@@ -1264,6 +1264,34 @@ set_ap_scan_cb (GDBusProxy *proxy, GAsyn
 		add_network (self);
 }
 
+static void
+set_pmf_cb (GDBusProxy *proxy, GAsyncResult *result, gpointer user_data)
+{
+	NMSupplicantInterface *self;
+	NMSupplicantInterfacePrivate *priv;
+	gs_unref_variant GVariant *reply = NULL;
+	gs_free_error GError *error = NULL;
+
+	reply = g_dbus_proxy_call_finish (proxy, result, &error);
+	if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+		return;
+
+	self = NM_SUPPLICANT_INTERFACE (user_data);
+	priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+
+	if (!reply) {
+		g_dbus_error_strip_remote_error (error);
+		_LOGW ("couldn't send PMF mode to the supplicant interface: %s",
+		       error->message);
+		emit_error_helper (self, error);
+		return;
+	}
+
+	_LOGI ("config: set interface pmf to %d",
+	       nm_supplicant_config_get_pmf (priv->cfg));
+
+}
+
 gboolean
 nm_supplicant_interface_set_config (NMSupplicantInterface *self,
                                     NMSupplicantConfig *cfg,
@@ -1300,6 +1328,17 @@ nm_supplicant_interface_set_config (NMSu
 		                   priv->assoc_cancellable,
 		                   (GAsyncReadyCallback) set_ap_scan_cb,
 		                   self);
+		g_dbus_proxy_call (priv->iface_proxy,
+				   DBUS_INTERFACE_PROPERTIES ".Set",
+				   g_variant_new ("(ssv)",
+					          WPAS_DBUS_IFACE_INTERFACE,
+						  "Pmf",
+						  g_variant_new_uint32 (nm_supplicant_config_get_pmf (priv->cfg))),
+				   G_DBUS_CALL_FLAGS_NONE,
+				   -1,
+				   priv->assoc_cancellable,
+				   (GAsyncReadyCallback) set_pmf_cb,
+				   self);
 	}
 	return TRUE;
 }
--- a/src/supplicant-manager/nm-supplicant-config.h
+++ b/src/supplicant-manager/nm-supplicant-config.h
@@ -52,6 +52,8 @@ NMSupplicantConfig *nm_supplicant_config
 
 guint32 nm_supplicant_config_get_ap_scan (NMSupplicantConfig *self);
 
+guint32 nm_supplicant_config_get_pmf (NMSupplicantConfig *self);
+
 gboolean nm_supplicant_config_fast_required (NMSupplicantConfig *self);
 
 GVariant *nm_supplicant_config_to_variant (NMSupplicantConfig *self);
