diff --git a/smradius/modules/features/mod_feature_validity.pm b/smradius/modules/features/mod_feature_validity.pm
index f5cbd49e12b2767928296b14ecc200be6bdebb25..2d535390f59ada25670849ab40ea8da39e80081a 100644
--- a/smradius/modules/features/mod_feature_validity.pm
+++ b/smradius/modules/features/mod_feature_validity.pm
@@ -76,43 +76,61 @@ sub checkValidity
 
 	$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] POST AUTH HOOK");
 	
-	my ($validFrom,$validTo);
+	my ($validFrom,$validTo,$validWindow);
 
 
 	# Get validity start date 
 	if (defined($user->{'Attributes'}->{$VALID_FROM_KEY})) {
 		$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] '".$VALID_FROM_KEY."' is defined");
-		# Operator: ==
-		if (defined($user->{'Attributes'}->{$VALID_FROM_KEY}->{'=='})) {
+		# Operator: :=
+		if (defined($user->{'Attributes'}->{$VALID_FROM_KEY}->{':='})) {
 			# Is it formatted as a date?
-			if ($user->{'Attributes'}->{$VALID_FROM_KEY}->{'=='}->{'Value'} =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) {
-				$validFrom = $user->{'Attributes'}->{$VALID_FROM_KEY}->{'=='}->{'Value'};
+			if ($user->{'Attributes'}->{$VALID_FROM_KEY}->{':='}->{'Value'} =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) {
+				$validFrom = $user->{'Attributes'}->{$VALID_FROM_KEY}->{':='}->{'Value'};
 			} else {
-				$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_FROM_KEY}->{'=='}->{'Value'}.
+				$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_FROM_KEY}->{':='}->{'Value'}.
 						"' is NOT in ISO standard format 'YYYY-MM-DD'");
 			}
 		} else {
 			$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No valid operators for attribute '$VALID_FROM_KEY'");
-		}
-	}
+		} # if (defined($user->{'Attributes'}->{$VALID_FROM_KEY}->{':='})) {
+	} # if (defined($user->{'Attributes'}->{$VALID_FROM_KEY})) {
 
 
 	# Get validity end date 
 	if (defined($user->{'Attributes'}->{$VALID_TO_KEY})) {
 		$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] '".$VALID_TO_KEY."' is defined");
-		# Operator: ==
-		if (defined($user->{'Attributes'}->{$VALID_TO_KEY}->{'=='})) {
+		# Operator: :=
+		if (defined($user->{'Attributes'}->{$VALID_TO_KEY}->{':='})) {
 			# Is it formatted as a date?
-			if ($user->{'Attributes'}->{$VALID_TO_KEY}->{'=='}->{'Value'} =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) {
-				$validTo = $user->{'Attributes'}->{$VALID_TO_KEY}->{'=='}->{'Value'};
+			if ($user->{'Attributes'}->{$VALID_TO_KEY}->{':='}->{'Value'} =~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) {
+				$validTo = $user->{'Attributes'}->{$VALID_TO_KEY}->{':='}->{'Value'};
 			} else {
-				$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_TO_KEY}->{'=='}->{'Value'}.
+				$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_TO_KEY}->{':='}->{'Value'}.
 						"' is NOT an ISO standard format 'YYYY-MM-DD'");
 			}
 		} else {
 			$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No valid operators for attribute '$VALID_TO_KEY'");
-		}
-	}
+		} # if (defined($user->{'Attributes'}->{$VALID_TO_KEY}->{':='})) {
+	} # if (defined($user->{'Attributes'}->{$VALID_TO_KEY})) {
+
+	# Get validity window 
+	if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY})) {
+		$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] '".$VALID_WINDOW_KEY."' is defined");
+		# Operator: :=
+		if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='})) {
+			# Is it a number?
+			if ($user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'} =~ /^\d+$/) {
+				$validWindow = $user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'};
+			} else {
+				$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'}.
+						"' is NOT an integer");
+			}
+		} else {
+			$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No valid operators for attribute '$VALID_WINDOW_KEY'");
+		} # if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='})) {
+	} # if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY})) {
+
 
 
 	# Now ...
@@ -135,8 +153,8 @@ sub checkValidity
 			# Date not within valid period, must be disconnected
 
 			return MOD_RES_NACK;
-		}
-	}
+		} # if (!defined($validFrom_unixtime)) {
+	} # if (defined($validFrom)) {
 
 	# Do we have an end date?
 	if (defined($validTo)) {
@@ -153,58 +171,35 @@ sub checkValidity
 			# Date not within valid period, must be disconnected
 
 			return MOD_RES_NACK;
-		}
-	}
-
-	# Get validity window 
-	my $validWindow;
-	if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY})) {
-		$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] '".$VALID_WINDOW_KEY."' is defined");
-		# Operator: :=
-		if (defined($user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='})) {
-			# Is it a number?
-			if ($user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'} =~ /^\d+$/) {
-				$validWindow = $user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'};
+		} # if (!defined($validTo_unixtime)) {
+	} # if (defined($validTo)) {
+
+	# Do we have a validity window
+	if (defined($validWindow)) {
+
+		# Check first if we have the ability to support this feature
+		if (defined($user->{'_UserDB'}->{'Users_data_get'})) {
+			# Fetch users_data for first login
+			if (defined(my $res = $user->{'_UserDB'}->{'Users_data_get'}($server,$user,'global','FirstLogin'))) {
+				# Check if this user should be disconnected
+				if (defined($validWindow) && defined($res)) {
+					my $validUntil = $validWindow + $res->{'Value'};
+					# If current time after start of valid pariod
+					if ($now > $validUntil) {
+						my $pretty_dt = DateTime->from_epoch( epoch => $validUntil )->strftime('%Y-%m-%d %H:%M:%S');
+						$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] Current date outside valid window end date: '".$pretty_dt."', rejecting");
+						# Date not within valid window, must be disconnected
+						return MOD_RES_NACK;
+					}
+				}
+	
 			} else {
-				$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] '".$user->{'Attributes'}->{$VALID_WINDOW_KEY}->{':='}->{'Value'}.
-						"' is NOT an integer");
-			}
+				$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No users_data 'global/FirstLogin' found for user '".$packet->attr('User-Name')."'");
+			} # if (defined(my $res = $module->{'Users_data_get'}($server,$user,'global','FirstLogin'))) {
 		} else {
-			$server->log(LOG_NOTICE,"[MOD_FEATURE_VALIDITY] No valid operators for attribute '$VALID_WINDOW_KEY'");
-		}
-	}
-
-	# Loop with plugins to find anything supporting getting user data
-	my $user_data;
-	foreach my $module (@{$server->{'module_list'}}) {
-		# Do we have the correct plugin?
-		if ($module->{'Users_data_get'}) {
-			$server->log(LOG_INFO,"[MOD_FEATURE_VALIDITY] Found plugin: '".$module->{'Name'}."'");
-			# Fetch users data
-			my $res = $module->{'Users_data_get'}($server,$user,'global','FirstLogin');
-			if (!defined($res)) {
-				$server->log(LOG_ERR,"[MOD_FEATURE_VALIDITY] No user data found for user '".$packet->attr('User-Name')."'");
-				return MOD_RES_SKIP;
-			}
-
-			$user_data = $res;
-		}
-	}
-
-	# Check if this user should be disconnected
-	if (defined($validWindow) && defined($user_data)) {
-		my $validUntil = $validWindow + $user_data->{'Value'};
-		if (!defined($validUntil)) {
-				$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] Failed to calculate end of valid window using "
-						.niceUndef($validWindow)." and ".niceUndef($user_data->{'Value'}));
-
-		# If current time after start of valid pariod
-		} elsif ($now > $validUntil) {
-			my $pretty_dt = DateTime->from_epoch( epoch => $validUntil )->strftime('%Y-%m-%d %H:%M:%S');
-			$server->log(LOG_DEBUG,"[MOD_FEATURE_VALIDITY] Current date outside valid window end date: '".$pretty_dt."', rejecting");
-			# Date not within valid window, must be disconnected
-			return MOD_RES_NACK;
-		}
+			$server->log(LOG_WARN,"[MOD_FEATURE_VALIDITY] UserDB module '".$user->{'_UserDB'}->{'Name'}.
+					"' does not support 'users_data'. Therefore no support for Validity Window feature");
+		} # if (defined($user->{'_UserDB'}->{'Users_data_get'})) {
 	}
 
 	return MOD_RES_ACK;
diff --git a/smradiusd.conf b/smradiusd.conf
index b8cfedfd5dff6c4de0a9cda81c5b404cf4d32361..1a32bc1abdd6d9ce67351559040280b041de5672 100644
--- a/smradiusd.conf
+++ b/smradiusd.conf
@@ -157,6 +157,7 @@ EOT
 modules=<<EOT
 mod_feature_capping
 mod_feature_user_stats
+mod_feature_validity
 EOT