diff --git a/README.txt b/README.txt
index d06778f..3b2d64c 100644
--- a/README.txt
+++ b/README.txt
@@ -68,6 +68,23 @@ list.
 See admin/help/jcarousel for demonstrations of how to utilize jCarousel in your
 own code.
 
+Using jCarousel0.3
+------------------
+Note the following update to the options array structure for jCarousel 0.3 when 
+using jcarousel_add. This example would include the 'control' and 'pagination' function
+
+  $options = array(
+    'plugins' => array('control', 'pagination),
+    'callbacks' => array(
+      'somecallbacktrigger' => 'somecallbackfunction',
+    )
+  ),
+  
+Views integration is not currently supported for jCarousel 0.3
+
+See https://github.com/jsor/jcarousel for details on updated plugins, settings and callbacks
+
+
 Example
 -------
 The following would add a vertical jCarousel to the page:
diff --git a/jcarousel.module b/jcarousel.module
index 0164dbf..0bb0866 100644
--- a/jcarousel.module
+++ b/jcarousel.module
@@ -208,13 +208,24 @@ function jcarousel_jcarousel_skin_info() {
 function jcarousel_add($class_name = NULL, $options = array(), $add = TRUE) {
   static $library_added;
 
+  $jcarousel_path = drupal_get_path('module', 'jcarousel');
+  
+  $default =  array(
+    $jcarousel_path . '/js/jcarousel/src/jquery.jcarousel.js' => array('weight' => 10),
+    drupal_get_path('module', 'jcarousel') . '/js/jcarousel.js' => array('weight' => 12)
+  );
+
+  // Add plugins for jCarousel 0.3
+  if (is_array($options['plugins'])) {
+    foreach ($options['plugins'] as $key => $plugin) {
+      $default[$jcarousel_path . '/js/jcarousel/plugins/' . $plugin . '/src/jquery.jcarousel.' . $plugin . '.js'] = array('weight' => 11);
+    }
+  }
+  
   // Add the jCarousel library and any global settings.
   $attachments = array(
     // TODO: Change this to 'library' in Drupal 7.
-    'js' => array(
-      drupal_get_path('module', 'jcarousel') . '/js/jquery.jcarousel.min.js',
-      drupal_get_path('module', 'jcarousel') . '/js/jcarousel.js',
-    ),
+    'js' => $default
   );
 
   if (isset($class_name)) {
@@ -265,10 +276,13 @@ function jcarousel_add($class_name = NULL, $options = array(), $add = TRUE) {
   if ($add) {
     foreach ($attachments as $type => $type_list) {
       $drupal_add_type = 'drupal_add_' . $type;
-      foreach ($type_list as $attachment) {
-        if (is_array($attachment)) {
+      foreach ($type_list as $file => $attachment) {
+        if (is_array($attachment) && isset($attachment['data']) && isset($attachment['type'])) {
           $drupal_add_type($attachment['data'], $attachment['type']);
         }
+        elseif (is_array($attachment)) {
+           $drupal_add_type($file, $attachment);
+        }
         else {
           $drupal_add_type($attachment);
         }
diff --git a/js/jcarousel b/js/jcarousel
--- a/js/jcarousel
+++ b/js/jcarousel
@@ -1 +1 @@
-Subproject commit d9150f46603e6ab3d4fa264bbb0811382410be01
+Subproject commit d9150f46603e6ab3d4fa264bbb0811382410be01-dirty
diff --git a/js/jcarousel.js b/js/jcarousel.js
index ac1a5b8..9800adc 100644
--- a/js/jcarousel.js
+++ b/js/jcarousel.js
@@ -23,15 +23,29 @@ Drupal.behaviors.jcarousel.attach = function(context, settings) {
     }
 
     // Callbacks need to be converted from a string to an actual function.
-    $.each(options, function(optionKey) {
-      if (optionKey.match(/Callback$/) && typeof options[optionKey] == 'string') {
+    $.each(options.callbacks, function(optionKey, a) {
+
         var callbackFunction = window;
-        var callbackParents = options[optionKey].split('.');
+        var callbackParents = options.callbacks[optionKey].split('.');
         $.each(callbackParents, function(objectParent) {
           callbackFunction = callbackFunction[callbackParents[objectParent]];
         });
+
         options[optionKey] = callbackFunction;
-      }
+        window[optionKey]=callbackFunction;
+
+        if (typeof window[optionKey] == 'function') {
+          // Bind callbacks to items in the carousel
+          if (optionKey.match(/jcarouselitem/) ) {
+            $carousel.find('li').bind('jcarouselitemfirstin', function(carousel, e) {window[optionKey]($carousel, this)});
+          }
+          // Bind callbacks to the carousel
+          else 
+          {
+            $($carousel).bind(optionKey, function($carousel, options) {window[optionKey]($carousel, options)});
+          }
+        }
+        
     });
 
     // Add standard options required for AJAX functionality.
@@ -61,13 +75,43 @@ Drupal.behaviors.jcarousel.attach = function(context, settings) {
       }
     }
 
-    if (!options.hasOwnProperty('buttonNextHTML') && !options.hasOwnProperty('buttonPrevHTML')) {
-      options.buttonNextHTML = Drupal.theme('jCarouselButton', 'next');
-      options.buttonPrevHTML = Drupal.theme('jCarouselButton', 'previous');
-    }
-
-    // Initialize the jcarousel.
     $carousel.addClass('jcarousel-processed').jcarousel(options);
+
+    //@TODO - use other jCarousel plugins too such as pagination (doesn't appear to work as expected so have left it out)
+    
+    // Initialise plugins functions
+    $.each(options.plugins, function(a, plugin) {
+      
+      switch(plugin) {
+      
+        case  'autoscroll':
+          // @TODO - scroll options can be configured ..
+          $carousel.jcarouselAutoscroll({scroll: '+=1'});
+          $carousel.auto = 'true'
+        break;
+        
+        case 'control':
+          // Add the control buttons
+          $('<div class="prev-wrapper"><a class="jcarousel-prev" href="javascript:void(0);"></a></div>').appendTo($carousel);
+          $('<div class="next-wrapper"><a class="jcarousel-next" href="javascript:void(0);"></a></div>').appendTo($carousel);
+
+          $($carousel).find('.jcarousel-prev').bind('click', function() {
+            $($carousel).jcarouselControl({scroll: '-=' + options.scroll});
+          });
+          
+          $($carousel).find('.jcarousel-next').bind('click', function() {
+            $($carousel).jcarouselControl({scroll: '+=' + options.scroll});
+          });
+        default:
+        break;
+      }
+      
+    });
+    
+
+ 
+
+    
   });
 };
 
@@ -294,4 +338,7 @@ Drupal.theme.prototype.jCarouselPageLink = function(pageNumber) {
   return '<a href="javascript:void(0)"><span>' + (pageNumber) + '</span></a>';
 };
 
+ 
+
+
 })(jQuery);
