diff --git a/lib/private/session/internal.php b/lib/private/session/internal.php
index 60aecccc8aac255ec08fb7f83cf4b572160c6fe9..a7c9e2fdefd36ed8620e403b85d1a59dcab73187 100644
--- a/lib/private/session/internal.php
+++ b/lib/private/session/internal.php
@@ -26,10 +26,21 @@ class Internal extends Memory {
 	}
 
 	public function __destruct() {
-		$_SESSION = $this->data;
+		$_SESSION = array_merge($_SESSION, $this->data);
 		session_write_close();
 	}
 
+	/**
+	 * @param string $key
+	 */
+	public function remove($key) {
+		// also remove it from $_SESSION to prevent re-setting the old value during the merge
+		if (isset($_SESSION[$key])) {
+			unset($_SESSION[$key]);
+		}
+		parent::remove($key);
+	}
+
 	public function clear() {
 		session_unset();
 		@session_regenerate_id(true);
diff --git a/lib/private/session/memory.php b/lib/private/session/memory.php
index c148ff4b9b9928af848b7895e9132ce02ea73bd0..134cee582eda34c7bfc67f2b834d3a6081751aed 100644
--- a/lib/private/session/memory.php
+++ b/lib/private/session/memory.php
@@ -11,7 +11,7 @@ namespace OC\Session;
 /**
  * Class Internal
  *
- * store session data in an in-memory array, not persistance
+ * store session data in an in-memory array, not persistent
  *
  * @package OC\Session
  */