diff --git a/dictionaries/login.definition.json b/dictionaries/login.definition.json
index 1acb64e1063b3695bcebcdb3517cb3f3659119ec..dcb4ea20a96338ab2ca5b9bff2de428b513c067d 100644
--- a/dictionaries/login.definition.json
+++ b/dictionaries/login.definition.json
@@ -58,5 +58,8 @@
 	},
 	"remember_username": {
 		"en": "Remember my username"
-	}
+	},
+    "remember_me": {
+        "en": "Remember me"
+    }
 }
diff --git a/modules/core/lib/Auth/UserPassBase.php b/modules/core/lib/Auth/UserPassBase.php
index d9c0b7196f30312b504cc9f808fe28f895e9d657..d8dc3eff3ccb578de3fd2c873bd13353a57d01ac 100644
--- a/modules/core/lib/Auth/UserPassBase.php
+++ b/modules/core/lib/Auth/UserPassBase.php
@@ -55,6 +55,23 @@ abstract class sspmod_core_Auth_UserPassBase extends SimpleSAML_Auth_Source {
 	 */
 	protected $rememberUsernameChecked = FALSE;
 
+    /**
+     * Storage for general config option session.rememberme.enable.
+     * loginuserpass.php page/template uses this option to present
+     * users with a checkbox to keep their session alive across
+     * different browser sessions (that is, closing and opening the
+     * browser again).
+     * @var bool
+     */
+    protected $rememberMeEnabled = FALSE;
+
+    /**
+     * Storage for general config option session.rememberme.checked.
+     * loginuserpass.php page/template uses this option to default
+     * the "remember me" checkbox to checked or not.
+     * @var bool
+     */
+    protected $rememberMeChecked = FALSE;
 
 	/**
 	 * Constructor for this authentication source.
@@ -85,6 +102,11 @@ abstract class sspmod_core_Auth_UserPassBase extends SimpleSAML_Auth_Source {
 			$this->rememberUsernameChecked = (bool) $config['remember.username.checked'];
 			unset($config['remember.username.checked']);
 		}
+
+        // get the "remember me" config options
+        $sspcnf = SimpleSAML_Configuration::getInstance();
+        $this->rememberMeEnabled = $sspcnf->getBoolean('session.rememberme.enable', FALSE);
+        $this->rememberMeChecked = $sspcnf->getBoolean('session.rememberme.checked', FALSE);
 	}
 
 
@@ -121,6 +143,21 @@ abstract class sspmod_core_Auth_UserPassBase extends SimpleSAML_Auth_Source {
 		return $this->rememberUsernameChecked;
 	}
 
+    /**
+     * Check if the "remember me" feature is enabled.
+     * @return bool TRUE if enabled, FALSE otherwise.
+     */
+    public function isRememberMeEnabled() {
+        return $this->rememberMeEnabled;
+    }
+
+    /**
+     * Check if the "remember me" checkbox should be checked.
+     * @return bool TRUE if enabled, FALSE otherwise.
+     */
+    public function isRememberMeChecked() {
+        return $this->rememberMeChecked;
+    }
 
 	/**
 	 * Initialize login.
diff --git a/modules/core/templates/loginuserpass.php b/modules/core/templates/loginuserpass.php
index 7b0cae6f9d80329bcf89493fb917990d8e26a707..98a778a4f26c0444174f7e420a3cced3adc5aa85 100644
--- a/modules/core/templates/loginuserpass.php
+++ b/modules/core/templates/loginuserpass.php
@@ -40,44 +40,52 @@ if ($this->data['forceUsername']) {
 }
 ?>
 			</td>
-<?php
-if ($this->data['rememberUsernameEnabled']) {
-	$rowspan = 1;
-} elseif (array_key_exists('organizations', $this->data)) {
-	$rowspan = 3;
-} else {
-	$rowspan = 2;
-}
-?>
-			<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
-<?php
-if ($this->data['rememberUsernameEnabled']) {
-	echo str_repeat("\t", 4);
-	echo '<input type="checkbox" id="remember_username" tabindex="4" name="remember_username" value="Yes" ';
-	echo ($this->data['rememberUsernameChecked'] ? 'checked="Yes" /> ' : '/> ');
-	echo $this->t('{login:remember_username}');
-} else {
-	$text = $this->t('{login:login_button}');
-	echo str_repeat("\t", 4);
-	echo "<input type=\"submit\" tabindex=\"4\" id=\"regularsubmit\" value=\"{$text}\" />";
-}
-?>
+<?php
+if ($this->data['rememberUsernameEnabled'] || $this->data['rememberMeEnabled']) {
+	$rowspan = 1;
+} elseif (array_key_exists('organizations', $this->data)) {
+	$rowspan = 3;
+} else {
+	$rowspan = 2;
+}
+?>
+			<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
+<?php
+if ($this->data['rememberUsernameEnabled'] || $this->data['rememberMeEnabled']) {
+    if ($this->data['rememberUsernameEnabled']) {
+        echo str_repeat("\t", 4);
+        echo '<input type="checkbox" id="remember_username" tabindex="4" name="remember_username" value="Yes" ';
+        echo ($this->data['rememberUsernameChecked'] ? 'checked="Yes" /> ' : '/> ');
+        echo $this->t('{login:remember_username}');
+    }
+    if ($this->data['rememberMeEnabled']) {
+        echo str_repeat("\t", 4);
+        echo '<input type="checkbox" id="remember_me" tabindex="4" name="remember_me" value="Yes" ';
+        echo $this->data['rememberMeChecked'] ? 'checked="Yes" /> ' : '/> ';
+        echo $this->t('{login:remember_me}');
+    }
+} else {
+	$text = $this->t('{login:login_button}');
+	echo str_repeat("\t", 4);
+	echo "<input type=\"submit\" tabindex=\"4\" id=\"regularsubmit\" value=\"{$text}\" />";
+}
+?>
 			</td>
 		</tr>
 		<tr>
 			<td style="padding: .3em;"><?php echo $this->t('{login:password}'); ?></td>
 			<td><input id="password" type="password" tabindex="2" name="password" /></td>
-<?php
-// Move submit button to next row if remember checkbox enabled
-if ($this->data['rememberUsernameEnabled']) {
-	$rowspan = (array_key_exists('organizations', $this->data) ? 2 : 1);
-?>
-			<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
-				<input type="submit" tabindex="5" id="regularsubmit" value="<?php echo $this->t('{login:login_button}'); ?>" />
-			</td>
-<?php
-}
-?>
+<?php
+// Move submit button to next row if remember checkbox enabled
+if ($this->data['rememberUsernameEnabled'] || $this->data['rememberMeEnabled']) {
+	$rowspan = (array_key_exists('organizations', $this->data) ? 2 : 1);
+?>
+			<td style="padding: .4em;" rowspan="<?php echo $rowspan; ?>">
+				<input type="submit" tabindex="5" id="regularsubmit" value="<?php echo $this->t('{login:login_button}'); ?>" />
+			</td>
+<?php
+}
+?>
 		</tr>
 
 <?php
diff --git a/modules/core/www/loginuserpass.php b/modules/core/www/loginuserpass.php
index 6a2dc9718dddecc29907389bf145d65da67fb3cb..c6251148e5ac42ad4f1c9ba6cb24a5a5691078e8 100644
--- a/modules/core/www/loginuserpass.php
+++ b/modules/core/www/loginuserpass.php
@@ -65,6 +65,13 @@ if (!empty($_REQUEST['username']) || !empty($password)) {
 		SimpleSAML_Utilities::setCookie($source->getAuthId() . '-username', $username, $params, FALSE);
 	}
 
+    if ($source->isRememberMeEnabled()) {
+        if (array_key_exists('remember_me', $_REQUEST) && $_REQUEST['remember_me'] === 'Yes') {
+            $state['RememberMe'] = TRUE;
+            $authStateId = SimpleSAML_Auth_State::saveState($state, sspmod_core_Auth_UserPassBase::STAGEID);
+        }
+    }
+
 	try {
 		sspmod_core_Auth_UserPassBase::handleLogin($authStateId, $username, $password);
 	} catch (SimpleSAML_Error_Error $e) {
@@ -82,11 +89,15 @@ if (array_key_exists('forcedUsername', $state)) {
 	$t->data['forceUsername'] = TRUE;
 	$t->data['rememberUsernameEnabled'] = FALSE;
 	$t->data['rememberUsernameChecked'] = FALSE;
+    $t->data['rememberMeEnabled'] = $source->isRememberMeEnabled();
+    $t->data['rememberMeChecked'] = $source->isRememberMeChecked();
 } else {
 	$t->data['username'] = $username;
 	$t->data['forceUsername'] = FALSE;
 	$t->data['rememberUsernameEnabled'] = $source->getRememberUsernameEnabled();
 	$t->data['rememberUsernameChecked'] = $source->getRememberUsernameChecked();
+    $t->data['rememberMeEnabled'] = $source->isRememberMeEnabled();
+    $t->data['rememberMeChecked'] = $source->isRememberMeChecked();
 	if (isset($_COOKIE[$source->getAuthId() . '-username'])) $t->data['rememberUsernameChecked'] = TRUE;
 }
 $t->data['links'] = $source->getLoginLinks();