diff -r 597942b104d0 twitter-pull-listing.tpl.php
--- a/twitter-pull-listing.tpl.php	Tue Apr 12 14:33:25 2011 +0200
+++ b/twitter-pull-listing.tpl.php	Tue Apr 12 14:35:49 2011 +0200
@@ -20,6 +20,10 @@
  *
  */
 ?>
+<?php if ($lazy_load): ?>
+  <?php print $lazy_load; ?>
+<?php else: ?>
+
 <div class="tweets-pulled-listing">
 
   <?php if (!empty($title)): ?>
@@ -46,3 +50,5 @@
     </ul>
   <?php endif; ?>
 </div>
+
+<?php endif; ?>
diff -r 597942b104d0 twitter_pull.module
--- a/twitter_pull.module	Tue Apr 12 14:33:25 2011 +0200
+++ b/twitter_pull.module	Tue Apr 12 14:35:49 2011 +0200
@@ -24,6 +24,21 @@
 }
 
 /**
+ * Implements hook_menu().
+ */
+function twitter_pull_menu() {
+  $items = array();
+
+  $items['twitter_pull_lazy/%'] = array(
+    'page callback' => 'twitter_pull_lazy',
+    'page arguments' => array(1),
+    'access arguments' => array('access content'),
+  );
+
+  return $items;
+}
+
+/**
  * Implements hook_flush_caches().
  */
 function twitter_pull_flush_caches() {
@@ -46,7 +61,7 @@
 function twitter_pull_theme() {
   return array(
     'twitter_pull_listing' => array(
-      'variables' => array('tweets' => NULL, 'twitkey' => NULL, 'title' => NULL),
+      'variables' => array('tweets' => NULL, 'twitkey' => NULL, 'title' => NULL, 'lazy_load' => NULL),
       'template' => 'twitter-pull-listing',
     ),
   );
@@ -70,15 +85,28 @@
  * @param $themekey
  *     Theme key name to use for theming the output of Twitter API.
  */
-function twitter_pull_render($twitkey, $title = NULL, $num_items = NULL, $themekey = NULL) {
+function twitter_pull_render($twitkey, $title = NULL, $num_items = NULL, $themekey = NULL, $lazy_load = FALSE) {
+  //-- Set the lazy load id. Encode the twitkey and title to make sure the they don't contain dashes.
+  $lazy_id = rtrim(base64_encode($twitkey) .'-'. base64_encode($title) .'-'. (int)$num_items . '-' . $themekey, '-');
+
   //-- Set defaults if empty arguments were passed
   $title = (empty($title) && $title != FALSE ) ? t('Related Tweets') : $title;
   $themekey = empty($themekey) ? 'twitter_pull_listing' : $themekey;
   $num_items = empty($num_items) ? twitter_pull_num_items() : $num_items;
 
-  $tweets = twitter_pull_retrieve($twitkey, $num_items);
+  if (!$lazy_load) {
+    $tweets = twitter_pull_retrieve($twitkey, $num_items);
+  }
+  else {
+    $tweets = NULL;
+    $uri = url('twitter_pull_lazy/' . $lazy_id);
+    $id = uniqid('twitter-pull-lazy-');
 
-  $ret = theme($themekey, array('tweets' => $tweets, 'twitkey' => $twitkey, 'title' => $title));
+    $lazy_load = '<div class="throbber twitter-pull-lazy" id="' . $id . '">' . t('Loading...') . '</div>';
+    drupal_add_js('jQuery(document).ready(function () { jQuery.get("' . $uri . '", function(data) { jQuery("#'. $id . '").html(data).removeClass("throbber"); }); });', 'inline');
+  }
+
+  $ret = theme($themekey, array('tweets' => $tweets, 'twitkey' => $twitkey, 'title' => $title, 'lazy_load' => $lazy_load));
 
   if (empty($ret) && !empty($tweets)) {
     $errmsg = t("Non-empty list of tweets returned blank space after applying theme function. Most probably you are passing invalid/unregistered theme key or tpl file corresponding to the theme key does not yet exist. Please fix the problem.");
@@ -208,3 +236,22 @@
 
   return $data;
 }
+
+/**
+ * Menu callback to provide lazy loading of tweets.
+ *
+ * @param $lazy_id
+ *     The id containing all information needed to render
+ *     the tweets with twitter_pull_render().
+ */
+function twitter_pull_lazy($lazy_id) {
+  // Extract the parameters from the lazy id
+  $parameters = explode('-', $lazy_id, 4);
+  $twitkey = base64_decode($parameters[0]);
+  $title = base64_decode($parameters[1]);
+  $num_items = isset($parameters[2]) ? (int)$parameters[2] : NULL;
+  $themekey = isset($parameters[3]) ? check_plain($parameters[3]) : NULL;
+
+  // Print the results
+  print twitter_pull_render($twitkey, $title, $num_items, $themekey, FALSE);
+}
