diff --git a/plugins/content_types/twitter_block.inc b/plugins/content_types/twitter_block.inc
index 8d8a935..e4b44b0 100644
--- a/plugins/content_types/twitter_block.inc
+++ b/plugins/content_types/twitter_block.inc
@@ -22,6 +22,7 @@ $plugin = array(
 function twitter_block_content_type_render($subtype, $conf, $args) {
   $block = new stdClass();
   $block->content = twitter_block_load_tweets($conf);
+
   return $block;
 }
 
@@ -53,11 +54,7 @@ function twitter_block_content_type_edit_form($form, &$form_state) {
   $form['lang'] = array(
     '#type'  => 'textfield',
     '#title' => 'Language',
-    '#description'  => t('If you would like to limit the search by a language, '.
-            'you can set it here. This should be the specific string expected by '.
-            'Twitter for your language. See the Twitter advanced search page for '.
-            'more information. (Hint: English is "en"). Leave blank if you don\'t '.
-            'want to filter by language at all.'),
+    '#description' => t('If you would like to limit the search by a language, you can set it here. This should be the specific string expected by Twitter for your language. See the Twitter advanced search page for more information. (Hint: English is "en"). Leave blank if you don\'t want to filter by language at all.'),
     '#size'  => 12,
     '#default_value' => $conf['lang'],
   );
@@ -95,7 +92,7 @@ function twitter_block_content_type_admin_info($subtype, $conf) {
   );
 
   $block = twitter_block_content_type_render($subtype, $conf, array());
-  $block->title = $strings[$conf['search_type']] .' <strong>('. $conf['search_string'] .')</strong>';
+  $block->title = $strings[$conf['search_type']] . ' <strong>(' . $conf['search_string'] . ')</strong>';
 
   return $block;
 }
diff --git a/twitter-block-tweet.tpl.php b/twitter-block-tweet.tpl.php
index 64989f4..4f409c0 100644
--- a/twitter-block-tweet.tpl.php
+++ b/twitter-block-tweet.tpl.php
@@ -13,7 +13,7 @@
  * - $text: The tweet's text.
  */
 ?>
-<div class="twitter_block tweet">
+<div class="tweet twitter_block">
   <div class="twitter_block_user">
     <a class="twitter_block profile_image" href="http://twitter.com/<?php echo $user_name; ?>">
       <img src="<?php echo $user_image; ?>" alt="Twitter Avatar" />
diff --git a/twitter_block.class.php b/twitter_block.class.php
index 202c3cb..a55b896 100644
--- a/twitter_block.class.php
+++ b/twitter_block.class.php
@@ -5,10 +5,11 @@
  * Lightweight implementation of the Twitter API in PHP.
  *
  * This code does the heavy lifting behind the Drupal twitter_block module. It
- * does not aim to authenticate users nor provide complex integration. We only 
- * need to grab public feeds, and as such we use the Twitter Search API. For 
- * more information on the twitter search API, @see 
- * @link http://dev.twitter.com/doc/get/search
+ * does not aim to authenticate users nor provide complex integration. We only
+ * need to grab public feeds, and as such we use the Twitter Search API. More
+ * information on the twitter search API can be found at the
+ * @link http://dev.twitter.com/doc/get/search GET search @endlink API resource
+ * documentation.
  */
 
 /**
@@ -30,6 +31,7 @@ class TwitterBlockSearch {
   // What were we looking for again?
   private $search_string;
   private $twitter_name;
+  private $include_rts;
 
   // The API type we'll pull data from.
   private $api;
@@ -51,6 +53,8 @@ class TwitterBlockSearch {
       $this->twitter_name = $config['search_string'];
     }
 
+    $this->include_rts = $config['include_rts'];
+
     $count = ($this->api == 'rest') ? 'count' : 'rpp';
     // The number of tweets to return per page.
     if (!empty($config['results_per_page'])) {
@@ -99,19 +103,22 @@ class TwitterBlockSearch {
         $return['results'] = $data;
       }
     }
+
     return $return;
   }
 
   /**
-   * Returns the most recent tweets from $twittername 
+   * Returns the most recent tweets from $twittername
    * @param string $twittername to search. Note: begins with @
    * @return string $json JSON encoded search response
    */
   private function getTweetsFrom() {
     $this->options['screen_name'] = $this->twitter_name;
+    $this->options['include_rts'] = $this->include_rts;
     // @todo: Make this URL a configurable option.
     $this->url_query = 'http://api.twitter.com/1/statuses/user_timeline.json?';
     $json = $this->search();
+
     return $json;
   }
 
@@ -123,28 +130,31 @@ class TwitterBlockSearch {
   private function getMentions() {
     $this->options['q'] = "@$this->twitter_name";
     $json = $this->search();
+
     return $json;
   }
 
   /**
    * Returns the most recent @replies to $twittername.
-   * @param string $twittername to search. Note: begins with @. 
+   * @param string $twittername to search. Note: begins with @.
    * @return string JSON encoded search response
    */
   private function getReplies() {
     $this->options['q'] = "to:$this->twitter_name";
     $json = $this->search();
+
     return $json;
   }
 
   /**
    * Returns the most recent tweets containing a string or hashtag.
-   * @param string $hashtag to search. May or may not begin with #. 
+   * @param string $hashtag to search. May or may not begin with #.
    * @return string JSON encoded search response
    */
   private function searchHashtag() {
     $this->options['q'] = ($this->search_string);
     $json = $this->search();
+
     return $json;
   }
 
@@ -161,13 +171,13 @@ class TwitterBlockSearch {
    * @return string JSON encoded search response.
    */
   function search() {
-    $this->url_query .= http_build_query($this->options);
+    $this->url_query .= drupal_query_string_encode($this->options);
     $ch = curl_init($this->url_query);
     if (variable_get('twitter_block_debug_mode', FALSE)) {
       watchdog('Twitter Block', 'DEBUG: URL: twitter_block_url', array('twitter_block_url' => $this->url_query), WATCHDOG_NOTICE);
     }
 
-    // Applications must have a meaningful and unique User Agent. 
+    // Applications must have a meaningful and unique User Agent.
     curl_setopt($ch, CURLOPT_USERAGENT, "Drupal Twitter Block Module");
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
diff --git a/twitter_block.css b/twitter_block.css
index 0850849..d99e892 100644
--- a/twitter_block.css
+++ b/twitter_block.css
@@ -1,3 +1,4 @@
+
 /**
  * @file
  * Custom CSS for the Twitter block display.
@@ -7,13 +8,6 @@
   display: block;
 }
 
-#twitter_block_results li {
-  list-style: none;
-  border: 0px 0px 0px 0px;
-  margin: 0;
-  padding: 0;
-}
-
 .twitter_block_user img {
   float: left;
   height: 48px;
@@ -21,13 +15,13 @@
 }
 .twitter_block_user_name {
   display: block;
-  padding-right: 5px;
   float: left;
   line-height: 48px;
+  padding-right: 5px;
 }
 
 p.tweet {
+  clear: all;
   display: block;
   float: left;
-  clear: all;
 }
diff --git a/twitter_block.info b/twitter_block.info
index ed524ed..aed42ba 100644
--- a/twitter_block.info
+++ b/twitter_block.info
@@ -3,3 +3,5 @@ description = "Provides configurable blocks for a Twitter feed."
 core = 6.x
 
 dependencies[] = block
+
+stylesheets[all][] = twitter_block.css
diff --git a/twitter_block.install b/twitter_block.install
index 045f606..3a349be 100644
--- a/twitter_block.install
+++ b/twitter_block.install
@@ -6,7 +6,7 @@
  */
 
 /**
- * Implements hook_requirements().
+ * Implementation of hook_requirements().
  */
 function twitter_block_requirements($phase) {
   $requirements = array();
@@ -27,7 +27,7 @@ function twitter_block_requirements($phase) {
 }
 
 /**
- * Implements hook_schema().
+ * Implementation of hook_schema().
  */
 function twitter_block_schema() {
   $schema['twitter_block'] = array(
@@ -47,6 +47,13 @@ function twitter_block_schema() {
         'not null' => TRUE,
         'default' => 'search',
       ),
+      'include_rts' => array(
+        'description' => 'Whether retweets should be included in the search results. (1 = enabled, 0 = disabled)',
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 1,
+        'size' => 'tiny',
+      ),
       'search_string' => array(
         'description' => 'The search string.',
         'type' => 'varchar',
@@ -71,13 +78,6 @@ function twitter_block_schema() {
         'type' => 'varchar',
         'length' => 2,
       ),
-      'cache' => array(
-        'description' => 'Save twitter api calls or not',
-        'type' => 'varchar',
-        'length' => '24',
-        'not null' => TRUE,
-        'default' => BLOCK_CACHE_PER_ROLE,
-      ),
     ),
     'unique keys' => array(
       'delta' => array('delta'),
@@ -95,17 +95,19 @@ function twitter_block_schema() {
 }
 
 /**
- * Implements hook_install().
+ * Implementation of hook_install().
  */
 function twitter_block_install() {
   drupal_install_schema('twitter_block');
+
+  $result = db_query("INSERT INTO {twitter_block} (delta, search_type, search_string, default_title) VALUES ('default', 'searchHashtag', 'Drupal', 'Discussions on Twitter')");
 }
 
 /**
- * Implements hook_uninstall().
+ * Implementation of hook_uninstall().
  */
 function twitter_block_uninstall() {
   drupal_uninstall_schema('twitter_block');
+
   variable_del('twitter_block_default_results_per_page');
 }
-
diff --git a/twitter_block.module b/twitter_block.module
index 910633e..8cb5785 100644
--- a/twitter_block.module
+++ b/twitter_block.module
@@ -6,14 +6,10 @@
  */
 
 /**
- * Implements hook_permission().
+ * Implementation of hook_perm().
  */
-function twitter_block_permission() {
-  return array(
-    'administer twitter blocks' => array(
-      'title' => t('Administer Twitter Blocks'),
-    ),
-  );
+function twitter_block_perm() {
+  return array('Administer Twitter Blocks');
 }
 
 /**
@@ -22,130 +18,146 @@ function twitter_block_permission() {
 function twitter_block_get_config($delta) {
   static $config;
   if (!isset($config[$delta])) {
-    $result = db_query("SELECT * FROM {twitter_block}");
-
-    while ($block = db_fetch_object($result)) {
-      $config[$block->delta] = array(
-        'search_type' => $block->search_type,
-        'search_string' => $block->search_string,
-        'default_title' => $block->default_title,
-        'results_per_page' => $block->results_per_page,
-        'lang' => $block->lang,
-        'cache' => $block->cache,
-      );
-    }
-  }
-  return isset($config[$delta]) ? $config[$delta] : FALSE;
-}
+    $result = db_query("SELECT search_type, include_rts, search_string, default_title, results_per_page, lang FROM {twitter_block} WHERE delta = '%s'", $delta);
 
-function twitter_block_block($op = 'list', $delta = 'default', $edit = array()) {
-  switch ($op) {
-  case 'list':
-    return twitter_block_block_info();
-  case 'configure':
-    return twitter_block_block_configure($delta);
-  case 'save':
-    $passed_validation = TRUE;
-
-    if ($passed_validation) {
-      return twitter_block_block_save($edit);
+    // @todo There can be only one?
+    while ($record = db_fetch_object($result)) {
+      $config[$delta] = get_object_vars($record);
     }
-  case 'view':
-    return twitter_block_block_view($delta);
   }
 
+  return isset($config[$delta]) ? $config[$delta] : FALSE;
 }
 
 /**
- * Implements hook_block_info().
+ * Implements hook_block().
  */
-function twitter_block_block_info() {
-  $blocks = array();
-
-  $result = db_query('SELECT delta, default_title, cache FROM {twitter_block}');
-
-  while ($info = db_fetch_object($result)) {
-    $blocks[$info->delta] = array(
-      'info' => t($info->default_title),
-      'cache' => $info->cache,
-    );
-  }
-
-  if (empty($blocks)) {
-    // @todo This is dumb. It belongs in twitter_block_install(), but I'm 
-    // out of time to muck with it today.
-    // Create the first 'default' twitter_block.
-    $block = new stdClass;
-    $block->delta = 'default';
-    $block->search_type = 'searchHashtag';
-    $block->search_string = 'Drupal';
-    $block->default_title = t('Discussions on Twitter');
-    $block->results_per_page = 6;
-    $block->cache = BLOCK_CACHE_PER_ROLE;
-    drupal_write_record('twitter_block', $block);
-
-    $blocks['default'] = array(
-      'info' => t('Discussions on Twitter'),
-      'cache' => BLOCK_CACHE_PER_ROLE,
-    );
+function twitter_block_block($op = 'list', $delta = 0, $edit = array()) {
+  switch ($op) {
+    case 'list':
+      $blocks = array();
+    
+      $result = db_query("SELECT delta, default_title FROM {twitter_block}");
+      while ($record = db_fetch_object($result)) {
+        $blocks[$record->delta] = array(
+          'info' => t($record->default_title),
+          'cache' => DRUPAL_CACHE_GLOBAL,
+        );
+      }
+    
+      return $blocks;
+      break;
+    case 'configure':
+      $config = twitter_block_get_config($delta);
+      $form = array();
+    
+      $form['twitter_block_' . $delta] = array(
+        '#type' => 'fieldset',
+        '#title' => t('Twitter Block Configuration'),
+        '#collapsible' => TRUE,
+        '#collapsed' => FALSE,
+        '#element_validate' => array('twitter_block_form_validate'),
+      );
+    
+      $form['twitter_block_' . $delta]['search_string'] = array(
+        '#type' => 'textfield',
+        '#title' => 'The string or username to search.',
+        '#size' => 32,
+        '#default_value' => $config['search_string'],
+      );
+    
+      $form['twitter_block_' . $delta]['search_type'] = array(
+        '#type' => 'select',
+        '#title' => t('Choose the type of Tweets to return.'),
+        '#options' => array(
+          'searchHashtag' => t('Tweets mentioning #hashtag or search string'),
+          'getTweetsFrom' => t('Tweets sent from the Twitter user'),
+          'getReplies' => t('Replies to the Twitter user'),
+          'getMentions' => t('Tweets mentioning the Twitter user'),
+        ),
+        '#default_value' => $config['search_type'],
+      );
+      $form['twitter_block_' . $delta]['include_rts'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Include retweets'),
+        '#default_value' => $config['include_rts'],
+      );
+      $form['twitter_block_' . $delta]['lang'] = array(
+        '#type'  => 'textfield',
+        '#title' => 'Language',
+        '#description' => t('If you would like to limit the search by a language, you can set it here. This should be the specific string expected by twitter for your language. See the <a href="@language">twitter advanced search page</a> for more information. (Hint: English is "en"). Leave blank if you don\'t want to filter by language at all.', array('@language' => 'http://twitter.com/#!/search-advanced')),
+        '#size' => 12,
+        '#default_value' => $config['lang'],
+      );
+      $form['twitter_block_' . $delta]['results_per_page'] = array(
+        '#type' => 'textfield',
+        '#title' => 'Number of tweets to return',
+        '#description' => t('Please enter the number of tweets to return per page up to a maximum of 100.'),
+        '#size' => 12,
+        '#default_value' => $config['results_per_page'],
+      );
+    
+      return $form;
+      break;
+    case 'save':
+        $result = db_query("UPDATE {twitter_block} SET search_type = '%s', include_rts = '%d', search_string = '%s', results_per_page = '%s', lang = '%s' WHERE delta = '%s'", $edit['search_type'], $edit['include_rts'], $edit['search_string'], $edit['results_per_page'], $edit['lang'], $delta);
+
+        break;
+    case 'view':
+      module_load_include('php', 'twitter_block', 'twitter_block.class');
+    
+      // Load the configuration.
+      $config = twitter_block_get_config($delta);
+    
+      // Use the MD5 of the block config as the cache cid.
+      $cid = 'twitter_block_feed_' . md5(serialize($config));
+      $cache_table = 'cache';
+    
+      // Build the object.
+      $twitter = new TwitterBlockSearch($config);
+    
+      // Cache the response, even if it's empty, to prevent performance problems
+      // caused by contacting Twitter every request.
+      if ($cache = cache_get($cid, $cache_table)) {
+        $results = $cache->data;
+      }
+      else {
+        $response = $twitter->getJSON();
+        $results = array();
+        if (empty($response) || !is_array($response) || !isset($response['status']) || $response['status'] !== TRUE) {
+          watchdog('Twitter Block', 'Recieved an unexpected reply from Twitter. ' .
+            'Perhaps just a fail whale?<br/>' .
+            'URL: url_query<br />' .
+            'response', array('url_query' => $twitter->url_query, 'response' => print_r($response, TRUE)),
+            WATCHDOG_NOTICE);
+        }
+        else {
+          $results = $response['results'];
+        }
+    
+        // Save the data for later.
+        cache_set($cid, $results, $cache_table, CACHE_TEMPORARY);
+      }
+    
+      // Create a variable to hold the tweets.
+      $tweets = array();
+    
+      // Theme each of the returned tweets.
+      foreach ($results as $tweet) {
+        $tweets[] = theme('twitter_block_tweet', array('tweet' => $tweet, 'api' => $twitter->getApi()));
+      }
+
+      $content = theme_item_list($tweets);
+
+      drupal_add_css(drupal_get_path('module', 'twitter_block') . '/twitter_block.css');
+    
+      $block = array();
+      $block['subject'] = t($config['default_title']);
+      $block['content'] = $content;
+    
+      return $block;
+      break;
   }
-  return $blocks;
-}
-
-/**
- * Implements hook_block_configure().
- */
-function twitter_block_block_configure($delta) {
-  $config = twitter_block_get_config($delta);
-  $form = array();
-
-  $form['twitter_block_' . $delta] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Twitter Block Configuration'),
-    '#collapsible' => TRUE,
-    '#collapsed' => FALSE,
-    '#element_validate' => array('twitter_block_form_validate'),
-  );
-
-  $form['twitter_block_' . $delta]['search_string'] = array(
-    '#type' => 'textfield',
-    '#title' => 'The string or username to search.',
-    '#size' => 32,
-    '#default_value' => $config['search_string'],
-  );
-
-  $form['twitter_block_' . $delta]['search_type'] = array(
-    '#type' => 'select',
-    '#title' => t('Choose the type of Tweets to return.'),
-    '#options' => array(
-      'searchHashtag' => t('Tweets mentioning #hashtag or search string'),
-      'getTweetsFrom' => t('Tweets sent from the Twitter user'),
-      'getReplies' => t('Replies to the Twitter user'),
-      'getMentions' => t('Tweets mentioning the Twitter user'),
-    ),
-    '#default_value' => $config['search_type'],
-  );
-  $form['twitter_block_' . $delta]['lang'] = array(
-    '#type'  => 'textfield',
-    '#title' => 'Language',
-    '#description' => t('If you would like to limit the search by a language, ' .
-            'you can set it here. This should be the specific string expected by ' .
-            'twitter for your language. See the <a href="@language">twitter advanced search page</a> ' .
-            'for more information. (Hint: English is "en"). Leave blank if you don\'t ' .
-            'want to filter by language at all.', array(
-            '@language' => 'http://twitter.com/#!/search-advanced')),
-    '#size'  => 12,
-    '#default_value' => $config['lang'],
-  );
-  $form['twitter_block_' . $delta]['results_per_page'] = array(
-    '#type' => 'textfield',
-    '#title' => 'Number of tweets to return',
-    '#description' => t('Please enter the number of tweets to return per page up to a maximum of 100.'),
-    '#size' => 12,
-    '#default_value' => $config['results_per_page'],
-  );
-
-  return $form;
 }
 
 /**
@@ -164,98 +176,20 @@ function twitter_block_form_validate($element, &$form_state) {
 }
 
 /**
- * Implements hook_block_save().
- */
-function twitter_block_block_save($delta = '', $edit = array()) {
-  db_update('twitter_block')
-    ->fields(array(
-      'search_type' => $edit['search_type'],
-      'search_string' => $edit['search_string'],
-      'results_per_page' => $edit['results_per_page'],
-      'lang' => $edit['lang'],
-      ))
-    ->condition('delta', $delta)
-    ->execute();
-}
-
-/**
- * Implements hook_block_view().
- */
-function twitter_block_block_view($delta) {
-  // Load the configuration.
-  $config = twitter_block_get_config($delta);
-  
-  // Define the configuration.
-  $block = array();
-  $block['subject'] = t($config['default_title']);
-  $block['content'] = twitter_block_load_tweets($config);
-
-  return $block;
-}
-
-/**
- * Grab data from Twitter, store it for later.
- * @param $config An array suitable for passing to the TwitterBlockSearch object.
- * @return Themed output.
- */
-function twitter_block_load_tweets($config) {
-  module_load_include('php', 'twitter_block', 'twitter_block.class');
-
-  // We use the MD5 of the block config as cache cid.
-  $cid = 'twitter_block_feed_' . md5(serialize($config));
-  $cache_bin = 'cache';
-
-  // Build the object.
-  $twitter = new TwitterBlockSearch($config);
-
-  // We cache response even if it's empty so an empty response cannot cause a
-  // performance problem by making us contact Twitter in every request
-  if ($cache = cache_get($cid, $cache_bin)) {
-    $results = $cache->data;
-  }
-  else {
-    $response = $twitter->getJSON();
-    $results = array();
-    if (empty($response) || !is_array($response) || !isset($response['status']) || $response['status'] !== TRUE) {
-      watchdog('Twitter Block', 'Recieved an unexpected reply from Twitter. ' .
-        'Perhaps just a fail whale?<br/>' .
-        'URL: url_query<br />' .
-        'response', array('url_query' => $twitter->url_query, 'response' => print_r($response, TRUE)),
-        WATCHDOG_NOTICE);
-    }
-    else {
-      $results = $response['results'];
-    }
-
-    // Save the data for later.
-    cache_set($cid, $results, $cache_bin, CACHE_TEMPORARY);
-  }
-
-  return theme('twitter_block', array('twitter_result' => $results, 'api' => $twitter->getApi()));
-}
-
-/**
- * Implements hook_theme().
+ * Implementation of hook_theme().
  */
 function twitter_block_theme($existing, $type , $theme, $path) {
-  $debug = array($existing, $type, $theme, $path);
-  dd($debug, "Debug");
-  return array();
-  /*
-    'twitter_block' => array(
-      'variables' => array('twitter_result' => NULL, 'api' => NULL),
-    ),
-    'twitter_block_tweet' =>array(
-      'variables' => array('tweet' => NULL, 'api' => NULL),
+  return array(
+    'twitter_block_tweet' => array(
+      'arguments' => array('tweet' => NULL, 'api' => NULL),
       'path' => drupal_get_path('module', 'twitter_block'),
-      'template' => 'twitter-block-tweet'
+      'template' => 'twitter-block-tweet',
     ),
   );
-   */
 }
 
 /**
- * Implements hook_preprocess().
+ * Implementation of hook_preprocess().
  */
 function twitter_block_preprocess_twitter_block_tweet(&$variables) {
   $variables['text'] = twitter_block_linkify($variables['tweet']->text);
@@ -265,24 +199,6 @@ function twitter_block_preprocess_twitter_block_tweet(&$variables) {
 }
 
 /**
- * Returns themed HTML for a Twitter block.
- */
-function theme_twitter_block($variables) {
-  $twitter_result = $variables['twitter_result'];
-  foreach($twitter_result as $tweet) {  
-    $tweets[] = theme('twitter_block_tweet', array('tweet' => $tweet, 'api' => $variables['api'])); 
-  }
-
-  // Don't show an empty block.
-  if (count($twitter_result) > 0) {
-    $html = '<div id="twitter_block_results" class="twitter_block clearfix">';
-    $html .= theme('item_list', array('items' => $tweets));
-    $html .= '</div>';
-    return $html;
-  }
-}
-
-/**
  * Convert nested URLs, account names and hash tags into links.
  */
 function twitter_block_linkify($status_text) {
