diff --git a/src/nm-policy.c b/src/nm-policy.c
index 57b1ee3..b9498b6 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -1179,6 +1179,32 @@ activate_slave_connections (NMPolicy *policy, NMConnection *connection,
 	schedule_activate_all (policy);
 }
 
+static gboolean
+_have_one_wired_connected (NMPolicy *policy)
+{
+	GSList *iter, *devices;
+
+	devices = nm_manager_get_devices (policy->manager);
+	/* find connections that are wired and active */
+	for (iter = devices; iter; iter = g_slist_next (iter)) {
+		NMDevice *dev = NM_DEVICE (iter->data);
+		NMSettingConnection *s_con;
+		
+		if (!(nm_device_get_device_type(dev) == NM_DEVICE_TYPE_ETHERNET ||
+			nm_device_get_device_type(dev) == NM_DEVICE_TYPE_UNKNOWN ||
+			nm_device_get_device_type(dev) == NM_DEVICE_TYPE_VLAN ||
+			nm_device_get_device_type(dev) == NM_DEVICE_TYPE_ADSL ||
+			nm_device_get_device_type(dev) == NM_DEVICE_TYPE_MODEM))
+			continue;
+		
+		if (nm_device_get_state (dev) > NM_DEVICE_STATE_DISCONNECTED) {
+			/* this is a wired connection that is still kind of connected */
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
 static void
 device_state_changed (NMDevice *device,
                       NMDeviceState new_state,
@@ -1269,6 +1295,10 @@ device_state_changed (NMDevice *device,
 		/* And make sure the best devices have the default route */
 		update_ip4_routing (policy, FALSE);
 		update_ip6_routing (policy, FALSE);
+		
+		/* This device is working now, so if it is a wired connection, we can drop the others */
+		rfkill_change_wifi("powersave", FALSE)
+		
 		break;
 	case NM_DEVICE_STATE_UNMANAGED:
 	case NM_DEVICE_STATE_UNAVAILABLE:
@@ -1286,6 +1316,11 @@ device_state_changed (NMDevice *device,
 
 		/* Device is now available for auto-activation */
 		schedule_activate_check (policy, device, 0);
+		
+		/* If no devices left, we should re-activate the wifi ones */
+		if (!_have_wired(policy))
+			rfkill_change_wifi("powersave", TRUE)
+		
 		break;
 
 	case NM_DEVICE_STATE_PREPARE:
