diff --git a/twitter.inc b/twitter.inc
index 0e82168..46b1c51 100644
--- a/twitter.inc
+++ b/twitter.inc
@@ -156,10 +156,32 @@ function twitter_load_authenticated_accounts($uid = NULL, $access_global = TRUE,
 function twitter_status_save($status) {
   // RT's get special handling.
   if (!empty($status->retweeted_status)) {
-    $text = 'RT @' . $status->retweeted_status->user->screen_name . ': ' . $status->retweeted_status->text;
+    if (is_array($status->retweeted_status)) {
+      $text = 'RT @' . $status->retweeted_status['user']['screen_name'];
+      if (empty($status->retweeted_status['full_text'])) {
+         $text .= ': ' . $status->retweeted_status['text'];
+      }
+      else {
+        $text .= ': ' . $status->retweeted_status['full_text'];
+      }
+    }
+    else {
+      $text = 'RT @' . $status->retweeted_status->user->screen_name;
+      if (empty($status->retweeted_status->full_text)) {
+        $text .= ': ' . $status->retweeted_status->text;
+      }
+      else {
+        $text .= ': ' . $status->retweeted_status->full_text;
+      }
+    }
   }
   else {
-    $text = $status->text;
+    if (empty($status->full_text)) {
+      $text = $status->text;
+    }
+    else {
+      $text = $status->full_text;
+    }
   }
 
   $twitter_status = new TwitterStatus();
diff --git a/twitter.lib.php b/twitter.lib.php
index e03c475..4c322cb 100644
--- a/twitter.lib.php
+++ b/twitter.lib.php
@@ -207,11 +207,21 @@ class Twitter {
    *   The path of the endpoint.
    * @param string $format
    *   The format of the endpoint to be appended at the end of the path.
+   * @param bool $extended
+   *   If set to TRUE, sets the endpoint to retrieve the extended mode version
+   *   of the tweet. If set to FALSE, sets the endpoint to retrieve the
+   *   compatibility mode version of the tweet.
+   *
    * @return
    *   The complete path to the endpoint.
    */
-  protected function create_url($path, $format = '.json') {
-    $url =  variable_get('twitter_api', TWITTER_API) .'/1.1/'. $path . $format;
+  protected function create_url($path, $format = '.json', $extended = FALSE) {
+    if ($extended) {
+      $url =  variable_get('twitter_api', TWITTER_API) .'/1.1/'. $path . $format . '?tweet_mode=extended';
+    }
+    else {
+      $url =  variable_get('twitter_api', TWITTER_API) .'/1.1/'. $path . $format;
+    }
     return $url;
   }
 
@@ -1263,11 +1273,66 @@ class Twitter {
   /********************************************//**
    * Utilities
    ***********************************************/
+
   /**
    * Calls a Twitter API endpoint.
+   *
+   * @param string $path
+   *   The location of the endpoint.
+   * @param array $params
+   *   Any parameters the endpoint needs to complete the call.
+   * @param string $method
+   *   The REST method to use when making the call.
+   *
+   * @return array
+   *   The decoded JSON reply.
    */
   public function call($path, $params = array(), $method = 'GET') {
-    $url = $this->create_url($path);
+    $parsed_response = $this->getParsedResponse($path, $params, $method);
+    // If 'truncated' is set to 1 or TRUE, then the full tweet was not
+    // retrieved and the extended mode version of the tweet needs to be called
+    // to retrieve the full tweet.
+    // Check first a respoonse that includes only one item.
+    if (isset($parsed_response['id'])) {
+      if (!empty($parsed_response['truncated'])) {
+        $parsed_response = $this->getParsedResponse($path, $params, $method, TRUE);
+      }
+    }
+    else {
+      // Check a respoonse that includes multiple items.
+      foreach ($parsed_response as $response) {
+        if (!empty($response['truncated'])) {
+          $parsed_response = $this->getParsedResponse($path, $params, $method, TRUE);
+          break;
+        }
+      }
+    }
+    return $parsed_response;
+  }
+
+  /**
+   * Retrieves the parsed response of the Twitter API endpoint call.
+   *
+   * @param string $path
+   *   The location of the endpoint.
+   * @param array $params
+   *   Any parameters the endpoint needs to complete the call.
+   * @param string $method
+   *   The REST method to use when making the call.
+   * @param bool $extended
+   *   If set to TRUE, retrieves the extended mode version of the tweet. If set
+   *   to FALSE, retrieves the compatibility mode version of the tweet.
+   *
+   * @return array
+   *   The decoded JSON reply.
+   */
+  public function getParsedResponse($path, array $params = array(), $method = 'GET', $extended = FALSE) {
+    if ($extended) {
+      $url = $this->create_url($path, '.json', TRUE);
+    }
+    else {
+      $url = $this->create_url($path);
+    }
 
     try {
       $response = $this->auth_request($url, $params, $method);
@@ -1283,4 +1348,5 @@ class Twitter {
 
     return $this->parse_response($response);
   }
+
 }
