diff --git a/src/nm-udev-manager.c b/src/nm-udev-manager.c
index 72501c2..2866956 100644
--- a/src/nm-udev-manager.c
+++ b/src/nm-udev-manager.c
@@ -196,11 +196,13 @@ recheck_killswitches (NMUdevManager *self)
 	GSList *iter;
 	RfKillState poll_states[RFKILL_TYPE_MAX];
 	gboolean platform_checked[RFKILL_TYPE_MAX];
+	gboolean non_platform[RFKILL_TYPE_MAX];
 	int i;
 
 	/* Default state is unblocked */
 	for (i = 0; i < RFKILL_TYPE_MAX; i++) {
 		poll_states[i] = RFKILL_UNBLOCKED;
+		non_platform[i] = RFKILL_UNBLOCKED;
 		platform_checked[i] = FALSE;
 	}
 
@@ -227,8 +229,10 @@ recheck_killswitches (NMUdevManager *self)
 			if (device) {
 				sysfs_state = g_udev_device_get_property_as_int (device, "RFKILL_STATE");
 				dev_state = sysfs_state_to_nm_state (sysfs_state);
-				if (dev_state > poll_states[ks->rtype])
+				if (dev_state > poll_states[ks->rtype]) {
 					poll_states[ks->rtype] = dev_state;
+					non_platform[ks->rtype] = dev_state;
+				}
 				g_object_unref (device);
 			}
 		}
@@ -272,6 +276,10 @@ recheck_killswitches (NMUdevManager *self)
 			            rfkill_type_to_desc (i),
 			            rfkill_state_to_desc (poll_states[i]));
 
+			/* Hardware is not ready */
+			if (poll_states[i] == RFKILL_UNBLOCKED && non_platform[i] == RFKILL_HARD_BLOCKED)
+				continue;
+
 			priv->rfkill_states[i] = poll_states[i];
 			g_signal_emit (self, signals[RFKILL_CHANGED], 0, i, priv->rfkill_states[i]);
 		}
