diff --git a/webgui/include/ajax/functions/WiSPLocations.php b/webgui/include/ajax/functions/WiSPLocations.php
index 1de5d06cfc7087c4a711032b5a89bd0050064566..1d681ab9bb1126a71b5c903c29624729b1dcb0de 100644
--- a/webgui/include/ajax/functions/WiSPLocations.php
+++ b/webgui/include/ajax/functions/WiSPLocations.php
@@ -60,9 +60,24 @@ function getWiSPLocation($params) {
 function removeWiSPLocation($params) {
 	global $db;
 
-	$res = DBDo("DELETE FROM wisp_locations WHERE ID = ?",array($params[0][0]));
-	if (!is_numeric($res)) {
+	# Begin transaction
+	DBBegin();
+
+	# Unlink users from this location
+	$res = DBDo("UPDATE wisp_userdata SET LocationID = NULL WHERE LocationID = ?",array($params[0][0]));
+
+	# Delete location
+	if ($res !== FALSE) {
+		$res = DBDo("DELETE FROM wisp_locations WHERE ID = ?",array($params[0][0]));
+	}
+
+	# Commit changes if successful
+	if ($res !== FALSE) {
+		DBCommit();
 		return $res;
+	# Rollback database if error
+	} else {
+		DBRollback();
 	}
 
 	return NULL;