diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/BooleanItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/BooleanItem.php
index 2fb8242..0e7b42d 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/BooleanItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/BooleanItem.php
@@ -7,11 +7,13 @@
 
 namespace Drupal\Core\Field\Plugin\Field\FieldType;
 
+use Drupal\Core\Annotation\Translation;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemBase;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\StringTranslation\TranslationWrapper;
 use Drupal\Core\TypedData\OptionsProviderInterface;
 use Drupal\Core\TypedData\DataDefinition;
 
@@ -42,8 +44,10 @@ public static function defaultStorageSettings() {
    * {@inheritdoc}
    */
   public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
+    // Use TranslationWrapper as those can be called during early bootstrap,
+    // before the translation system is ready.
     $properties['value'] = DataDefinition::create('boolean')
-      ->setLabel(t('Boolean value'));
+      ->setLabel(new TranslationWrapper('Boolean value'));
 
     return $properties;
   }
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php
index 961eb67..9c81c10 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php
@@ -7,9 +7,11 @@
 
 namespace Drupal\Core\Field\Plugin\Field\FieldType;
 
+use Drupal\Core\Annotation\Translation;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Field\FieldItemBase;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\StringTranslation\TranslationWrapper;
 use Drupal\Core\TypedData\DataDefinition;
 use Drupal\Core\TypedData\DataReferenceDefinition;
 
@@ -34,12 +36,14 @@ class LanguageItem extends FieldItemBase {
    * {@inheritdoc}
    */
   public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
+    // Use TranslationWrapper as those can be called during early bootstrap,
+    // before the translation system is ready.
     $properties['value'] = DataDefinition::create('string')
-      ->setLabel(t('Language code'));
+      ->setLabel(new TranslationWrapper('Language code'));
 
     $properties['language'] = DataReferenceDefinition::create('language')
-      ->setLabel(t('Language object'))
-      ->setDescription(t('The referenced language'))
+      ->setLabel(new TranslationWrapper('Language object'))
+      ->setDescription(new TranslationWrapper('The referenced language'))
       // The language object is retrieved via the language code.
       ->setComputed(TRUE)
       ->setReadOnly(FALSE);
diff --git a/core/lib/Drupal/Core/Session/SessionHandler.php b/core/lib/Drupal/Core/Session/SessionHandler.php
index c8d69fb..e4dc829 100644
--- a/core/lib/Drupal/Core/Session/SessionHandler.php
+++ b/core/lib/Drupal/Core/Session/SessionHandler.php
@@ -81,7 +81,7 @@ public function read($sid) {
     $insecure_session_name = $this->sessionManager->getInsecureName();
     $cookies = $this->requestStack->getCurrentRequest()->cookies;
     if (!$cookies->has($this->getName()) && !$cookies->has($insecure_session_name)) {
-      $user = new UserSession();
+      $user = new AnonymousUserSession();
       return '';
     }
 
@@ -94,7 +94,7 @@ public function read($sid) {
     // database.
     if ($this->requestStack->getCurrentRequest()->isSecure()) {
       // Try to load a session using the HTTPS-only secure session id.
-      $values = $this->connection->query("SELECT u.*, s.* FROM {users_field_data} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE u.default_langcode = 1 AND s.ssid = :ssid", array(
+      $values = $this->connection->query("SELECT s.* FROM {sessions} s WHERE s.ssid = :ssid", array(
         ':ssid' => Crypt::hashBase64($sid),
       ))->fetchAssoc();
       if (!$values) {
@@ -103,7 +103,7 @@ public function read($sid) {
         if ($cookies->has($insecure_session_name)) {
           $insecure_session_id = $cookies->get($insecure_session_name);
           $args = array(':sid' => Crypt::hashBase64($insecure_session_id));
-          $values = $this->connection->query("SELECT u.*, s.* FROM {users_field_data} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE u.default_langcode = 1 AND s.sid = :sid AND s.uid = 0", $args)->fetchAssoc();
+          $values = $this->connection->query("SELECT s.* FROM {sessions} s WHERE s.sid = :sid AND s.uid = 0", $args)->fetchAssoc();
           if ($values) {
             $this->sessionSetObsolete($insecure_session_id);
           }
@@ -112,35 +112,34 @@ public function read($sid) {
     }
     else {
       // Try to load a session using the non-HTTPS session id.
-      $values = $this->connection->query("SELECT u.*, s.* FROM {users_field_data} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE u.default_langcode = 1 AND s.sid = :sid", array(
+      $values = $this->connection->query("SELECT s.* FROM {sessions} s WHERE s.sid = :sid", array(
         ':sid' => Crypt::hashBase64($sid),
       ))->fetchAssoc();
     }
 
     // We found the client's session record and they are an authenticated,
     // active user.
-    if ($values && $values['uid'] > 0 && $values['status'] == 1) {
-      // Add roles element to $user.
-      $rids = $this->connection->query("SELECT ur.rid FROM {users_roles} ur WHERE ur.uid = :uid", array(
-        ':uid' => $values['uid'],
-      ))->fetchCol();
-      $values['roles'] = array_merge(array(DRUPAL_AUTHENTICATED_RID), $rids);
-      $user = new UserSession($values);
+    $user = NULL;
+    if ($values && $values['uid'] > 0) {
+      $user = \Drupal::entityManager()->getStorage('user')->load($values['uid']);
+      if ($user->isBlocked()) {
+        $user = NULL;
+      }
     }
-    elseif ($values) {
-      // The user is anonymous or blocked. Only preserve two fields from the
+
+    if (!$user && $values) {
+      // The user is anonymous or blocked. Only preserve the timestamp from the
       // {sessions} table.
       $user = new UserSession(array(
-        'session' => $values['session'],
-        'access' => $values['access'],
+        'access' => $values['timestamp'],
       ));
     }
-    else {
+    elseif (!$user) {
       // The session has expired.
-      $user = new UserSession();
+      $user = new AnonymousUserSession();
     }
 
-    return $user->session;
+    return isset($values['session']) ? $values['session'] : '';
   }
 
   /**
