diff --git a/smradius/modules/userdb/mod_userdb_sql.pm b/smradius/modules/userdb/mod_userdb_sql.pm
index f5d0c8f86c45e52ebf960bbb2de0324deae3d0ff..3d23ffc42ef86e726e69139cb46e37b9209215d7 100644
--- a/smradius/modules/userdb/mod_userdb_sql.pm
+++ b/smradius/modules/userdb/mod_userdb_sql.pm
@@ -50,7 +50,10 @@ our $pluginInfo = {
 
 	# Users data
 	Users_data_set => \&data_set,
-	Users_data_get => \&data_get
+	Users_data_get => \&data_get,
+
+	# Cleanup run by smadmin
+	Cleanup => \&cleanup
 };
 
 # Module config
@@ -142,15 +145,6 @@ sub init
 			AND Name = %{query.Name}
 	';
 
-	$config->{'users_data_cleanup_query'} = '
-		DELETE FROM
-			@TP@users_data
-		WHERE UserID NOT IN
-			(
-				SELECT ID FROM users
-			)
-	';
-
 	# Default cache time for user data
 	$config->{'userdb_data_cache_time'} = 300;
 
@@ -228,16 +222,6 @@ sub init
 			}
 		}
 
-		if (defined($scfg->{'mod_userdb_sql'}->{'users_data_cleanup_query'}) &&
-				$scfg->{'mod_userdb_sql'}->{'users_data_cleanup_query'} ne "") {
-			if (ref($scfg->{'mod_userdb_sql'}->{'users_data_cleanup_query'}) eq "ARRAY") {
-				$config->{'users_data_cleanup_query'} = join(' ',
-						@{$scfg->{'mod_userdb_sql'}->{'users_data_cleanup_query'}});
-			} else {
-					$config->{'users_data_cleanup_query'} = $scfg->{'mod_userdb_sql'}->{'users_data_cleanup_query'};
-			}
-		}
-
 		if (defined($scfg->{'mod_userdb_sql'}->{'userdb_data_cache_time'})) {
 			if ($scfg->{'mod_userdb_sql'}{'userdb_data_cache_time'} =~ /^\s*(yes|true|1)\s*$/i) {
 				# Default?
@@ -531,5 +515,36 @@ sub data_get
 }
 
 
+# Clean up of old user variables
+sub cleanup
+{
+	my $server = shift;
+
+	# Begin operation
+	DBBegin();
+
+	# Perform query
+	my $sth = DBDo('
+		DELETE FROM
+			@TP@users_data
+		WHERE UserID NOT IN
+			(
+				SELECT ID FROM users
+			)
+	');
+
+	# Error and rollback
+	if (!$sth) {
+		$server->log(LOG_NOTICE,"[MOD_USERDB_SQL] Cleanup => Database has been rolled back, no records deleted");
+		DBRollback();
+		return;
+	}
+
+	# Commit
+	DBCommit();
+	$server->log(LOG_NOTICE,"[MOD_USERDB_SQL] Cleanup => Old user variables have been deleted");
+}
+
+
 1;
 # vim: ts=4
diff --git a/smradiusd.conf b/smradiusd.conf
index 8757226c7e1ee7f8baae86999ce408bcf7c0ead6..b8cfedfd5dff6c4de0a9cda81c5b404cf4d32361 100644
--- a/smradiusd.conf
+++ b/smradiusd.conf
@@ -489,15 +489,6 @@ users_data_delete_query=<<EOT
 		AND Name = %{query.Name}
 EOT
 
-users_data_cleanup_query=<<EOT
-	DELETE FROM
-		@TP@users_data
-	WHERE UserID NOT IN
-		(
-			SELECT ID FROM users
-		)
-EOT
-
 # This is how long we going to cache the data query for
 # Default: 300 (seconds)
 #