diff --git a/module/VuFind/src/VuFind/Auth/Manager.php b/module/VuFind/src/VuFind/Auth/Manager.php
index 2e2ee560ae9464698baf629a81c846c775bf596d..07e1533296f9d69b3a1c4126836efbee54a784af 100644
--- a/module/VuFind/src/VuFind/Auth/Manager.php
+++ b/module/VuFind/src/VuFind/Auth/Manager.php
@@ -69,6 +69,13 @@ class Manager implements ServiceLocatorAwareInterface
      */
     protected $ilsAccount = false;
 
+    /**
+     * Cache for current logged in user object
+     *
+     * @var \VuFind\Db\Row\User
+     */
+    protected $currentUser = false;
+
     /**
      * Service locator
      *
@@ -189,8 +196,9 @@ class Manager implements ServiceLocatorAwareInterface
         // Clear out cached ILS connection.
         $this->ilsAccount = false;
 
-        // Clear out the cached user object.
-        unset($this->session->user);
+        // Clear out the cached user object and session entry.
+        $this->currentUser = false;
+        unset($this->session->userId);
 
         // Destroy the session for good measure, if requested.
         if ($destroy) {
@@ -213,17 +221,16 @@ class Manager implements ServiceLocatorAwareInterface
      */
     public function isLoggedIn()
     {
-        $user = isset($this->session->user) ? $this->session->user : false;
-
-        // User may have been serialized into session; if so, we may need to
-        // restore its service locator, since SL's can't be serialized:
-        if ($user && null === $user->getServiceLocator()) {
-            $user->setServiceLocator(
-                $this->getServiceLocator()->get('VuFind\DbTablePluginManager')
-            );
+        // If user object is not in cache, but user ID is in session,
+        // load the object from the database:
+        if (!$this->currentUser && isset($this->session->userId)) {
+            $results = $this->getServiceLocator()
+                ->get('VuFind\DbTablePluginManager')->get('user')
+                ->select(array('id' => $this->session->userId));
+            $this->currentUser = count($results) < 1
+                ? false : $results->current();
         }
-
-        return $user;
+        return $this->currentUser;
     }
 
     /**
@@ -249,7 +256,8 @@ class Manager implements ServiceLocatorAwareInterface
      */
     public function updateSession($user)
     {
-        $this->session->user = $user;
+        $this->currentUser = $user;
+        $this->session->userId = $user->id;
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Db/Row/User.php b/module/VuFind/src/VuFind/Db/Row/User.php
index a585a23aa8f4196529b51d79155ad1dee4a950b2..43504c336bdf172251d94418e1d46e19b78832a6 100644
--- a/module/VuFind/src/VuFind/Db/Row/User.php
+++ b/module/VuFind/src/VuFind/Db/Row/User.php
@@ -68,43 +68,6 @@ class User extends ServiceLocatorAwareGateway
         parent::__construct('id', 'user', $adapter);
     }
 
-    /**
-     * Sleep magic method -- the service locator can't be serialized, so we need to
-     * exclude it from serialization.  Since we can't obtain a new locator in the
-     * __wakeup() method, it needs to be re-injected by the \VuFind\Auth\Manager
-     * (see the isLoggedIn() method of that class).
-     *
-     * @return array
-     */
-    public function __sleep()
-    {
-        $vars = get_object_vars($this);
-        unset($vars['serviceLocator']);
-        $vars = array_keys($vars);
-        return $vars;
-    }
-
-    /**
-     * Saves the properties to the database.
-     *
-     * This performs an intelligent insert/update, and reloads the
-     * properties with fresh data from the table on success.
-     *
-     * @return mixed The primary key value(s), as an associative array if the
-     *     key is compound, or a scalar if the key is single-column.
-     */
-    public function save()
-    {
-        // Since this object is frequently stored in the session, we should
-        // reconnect to the database as part of the save action to prevent
-        // exceptions:
-        $this->sql = new Sql(
-            $this->getServiceLocator()->getServiceLocator()->get('VuFind\DbAdapter'),
-            $this->table
-        );
-        return parent::save();
-    }
-
     /**
      * Reset ILS login credentials.
      *