diff --git a/twitter_pull.class.inc b/twitter_pull.class.inc
index 623fdc3..bfb1c17 100644
--- a/twitter_pull.class.inc
+++ b/twitter_pull.class.inc
@@ -49,46 +49,58 @@ class twitter_puller {
     if ($prefix == '@' && $slash !== FALSE) {
       $username = drupal_substr($this->twitkey, 1, $slash - 1);
       $listname = drupal_substr($this->twitkey, $slash + 1);
-      $url = 'http://api.twitter.com/1/' . urlencode($username) . '/lists/' . urlencode($listname) . '/statuses.json?per_page=' . $num;
+      $url = 'https://api.twitter.com/1.1/lists/show.json';
+      $query = '?slug=' . urlencode($listname);
+      
     }
     // if the first character is @, then consider the key a username
     elseif ($prefix == "@") {
       $key = drupal_substr($this->twitkey, 1);
-      $url = 'http://api.twitter.com/1/statuses/user_timeline.json?screen_name='. urlencode($key) .'&include_rts=true&count='. $num;
+      $url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
+      $query = "?screen_name=${key}&count=${num}&include_rts=1";
     }
     // if the first character is ~, then consider the key a favorites feed
     elseif ($prefix == "~") {
       $key = drupal_substr($this->twitkey, 1);
-      $url = 'http://api.twitter.com/1/favorites/'.urlencode($key).'.json?count='.$num;
+      $url = 'https://api.twitter.com/1.1/favorites/list.json';
+      $query = "?screen_name=${key}&count=${num}";
     }
     // otherwise, use the key as a search term
     else {
       if ($num > 100) {
         $num = 100;
       }
-      $url = 'http://search.twitter.com/search.json?q=' . urlencode($this->twitkey) . '&rpp=' . $num;
+      $url = 'https://api.twitter.com/1.1/search/tweets.json';
+      $query = '?q=' . urlencode($this->twitkey) ."&include_entities=true&count=${num}";
     }
+    
 
-    $ret = drupal_http_request($url, array('timeout' => 2));
-
-    if ($ret->code < 200 || $ret->code > 399) {
-      $errmsg = t('An unknown error occurred.');
-      if (isset($ret->error) && !empty($ret->error)) {
-        $errmsg = check_plain($ret->error);
-      }
-      elseif (isset($ret->data) && !empty($ret->data)) {
-        $errdata = json_decode($ret->data);
-        if (isset($errdata->error) && !empty($errdata->error)) {
-          $errmsg = check_plain($errmsg->error);
-        }
-      }
-      if ($ret->code == 400) {
-        $errmsg .= ' ' . t('This site may be subject to rate limiting. For more information, see: http://apiwiki.twitter.com/Rate-limiting');
-      }
-      throw new Exception(t('Could not retrieve data from Twitter.') . ' ' . $errmsg);
+    // http://github.com/j7mbo/twitter-api-php
+    $lib = libraries_get_path('twitter-api-php');
+    if (!$lib) {
+      drupal_set_message(t('Please install TwitterAPIExchange as a library.  http://github.com/j7mbo/twitter-api-php'), 'error');
+      return;
+    }
+    require_once($lib . '/TwitterAPIExchange.php');
+    
+    $settings = array();
+    foreach (array('consumer_key', 'consumer_secret', 'oauth_access_token', 'oauth_access_token_secret') as $var) {
+      $settings[$var] = variable_get('twitter_pull_'.$var, FALSE);
     }
+    
+    if (in_array(FALSE, $settings, TRUE)) {
+      drupal_set_message('Twitter has not been configured yet.  Please contact your admin.', 'error');
+      return;
+    }
+
+    $url = '' . $url;
+    
+    $twitter = new TwitterAPIExchange($settings);
+    $req = $twitter->setGetfield($query)
+      ->buildOauth($url, 'GET')
+      ->performRequest();
+    $items = json_decode($req);
 
-    $items = json_decode($ret->data);
     $this->parse_items($items);
 
   }
@@ -97,8 +109,8 @@ class twitter_puller {
     $tweets = array();
 
     //-- If search response then items are one level lower.
-    if (isset($items->results) && is_array($items->results)) {
-      $items = $items->results;
+    if (isset($items->statuses) && is_array($items->statuses)) {
+      $items = $items->statuses;
     }
 
     if (is_array($items)) {
diff --git a/twitter_pull.module b/twitter_pull.module
old mode 100644
new mode 100755
index e6889fc..79c2438
--- a/twitter_pull.module
+++ b/twitter_pull.module
@@ -34,6 +34,16 @@ function twitter_pull_menu() {
     'access arguments' => array('access content'),
   );
 
+  $items['admin/config/services/twitter_pull'] = array(
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('twitter_pull_config_page'),
+    'access arguments' => array('administer site configuration'),
+    'file' => 'twitter_pull.admin.inc',
+    'type' => MENU_NORMAL_ITEM,
+    'description' => t('Configure twitter_pull module.'),
+    'title' => 'Twitter Pull',
+  );
+
   return $items;
 }
 
