diff --git a/feedback.css b/displays/classic/feedback-classic.css
similarity index 100%
copy from feedback.css
copy to displays/classic/feedback-classic.css
diff --git a/feedback.js b/displays/classic/feedback-classic.js
similarity index 81%
copy from feedback.js
copy to displays/classic/feedback-classic.js
index 49549c8..1571ea6 100644
--- a/feedback.js
+++ b/displays/classic/feedback-classic.js
@@ -1,19 +1,6 @@
 (function ($) {
 
 /**
- * Attach auto-submit to admin view form.
- */
-Drupal.behaviors.feedbackAdminForm = {
-  attach: function (context) {
-    $('#feedback-admin-view-form', context).once('feedback', function () {
-      $(this).find('fieldset.feedback-messages :input[type="checkbox"]').click(function () {
-        this.form.submit();
-      });
-    });
-  }
-};
-
-/**
  * Attach collapse behavior to the feedback form block.
  */
 Drupal.behaviors.feedbackForm = {
diff --git a/feedback.css b/displays/left_tab/feedback-left-tab.css
similarity index 64%
rename from feedback.css
rename to displays/left_tab/feedback-left-tab.css
index 2185691..ee12110 100644
--- a/feedback.css
+++ b/displays/left_tab/feedback-left-tab.css
@@ -18,25 +18,33 @@
 }
 
 #block-feedback-form {
-  display: none;
-  position: fixed;
-  bottom: 60px;
-  right: 20px;
-  overflow: hidden;
+  position: absolute;
+  top: 45%;
+  left: 0px;
   z-index: 10;
 }
-/* IE6 seems to be unable to handle fixed */
-* html #block-feedback-form {
-  position: absolute;
+
+#block-feedback-form .content {
+  display: none;
 }
-#block-feedback-form .feedback-link {
-  padding: 0.3em 0;
-  text-align: right;
-  font-size: 12px;
+#block-feedback-form h2 {
+  -webkit-transform-origin: 0 0;
+  -moz-transform-origin: 0 0;
+  -o-transform-origin: 0 0;
+  -ms-transform-origin: 0 0;
+  -webkit-transform: rotate(-90deg);  /* Safari 3.1+, Chrome */
+  -moz-transform: rotate(-90deg);  /* Firefox 3.5-15 */
+  -ms-transform: rotate(-90deg);  /* IE9 */
+  -o-transform: rotate(-90deg);  /* Opera 10.5-12.00 */
+  transform: rotate(-90deg);  /* Firefox 16+, Opera 12.50+ */
 }
-#block-feedback-form .feedback-link * {
-  display: inline;
-  font-size: 12px;
+#block-feedback-form .feedback-link {
+  padding: 10px;
+  background: #000;
+  border: 2px solid #FFF;
+  color: #DDD;
+  border-top: 0px none transparent;
+  font-weight: normal;
 }
 #block-feedback-form form {
   border: 1px solid #ccc;
diff --git a/feedback.js b/displays/left_tab/feedback-left-tab.js
similarity index 65%
rename from feedback.js
rename to displays/left_tab/feedback-left-tab.js
index 49549c8..0f7a578 100644
--- a/feedback.js
+++ b/displays/left_tab/feedback-left-tab.js
@@ -1,19 +1,6 @@
 (function ($) {
 
 /**
- * Attach auto-submit to admin view form.
- */
-Drupal.behaviors.feedbackAdminForm = {
-  attach: function (context) {
-    $('#feedback-admin-view-form', context).once('feedback', function () {
-      $(this).find('fieldset.feedback-messages :input[type="checkbox"]').click(function () {
-        this.form.submit();
-      });
-    });
-  }
-};
-
-/**
  * Attach collapse behavior to the feedback form block.
  */
 Drupal.behaviors.feedbackForm = {
@@ -21,7 +8,6 @@ Drupal.behaviors.feedbackForm = {
     $('#block-feedback-form', context).once('feedback', function () {
       var $block = $(this);
       $block.find('span.feedback-link')
-        .prepend('<span id="feedback-form-toggle">[ + ]</span> ')
         .css('cursor', 'pointer')
         .toggle(function () {
             Drupal.feedbackFormToggle($block, false);
@@ -30,7 +16,7 @@ Drupal.behaviors.feedbackForm = {
             Drupal.feedbackFormToggle($block, true);
           }
         );
-      $block.find('form').hide();
+      $block.find('.content').hide();
       $block.show();
     });
   }
@@ -60,13 +46,7 @@ Drupal.behaviors.feedbackFormSubmit = {
  * Collapse or uncollapse the feedback form block.
  */
 Drupal.feedbackFormToggle = function ($block, enable) {
-  $block.find('form').slideToggle('medium');
-  if (enable) {
-    $('#feedback-form-toggle', $block).html('[ + ]');
-  }
-  else {
-    $('#feedback-form-toggle', $block).html('[ &minus; ]');
-  }
+  $block.find('.content').slideToggle('medium');
 };
 
 })(jQuery);
diff --git a/feedback-admin.js b/feedback-admin.js
new file mode 100644
index 0000000..bfcd736
--- /dev/null
+++ b/feedback-admin.js
@@ -0,0 +1,16 @@
+(function ($) {
+
+/**
+ * Attach auto-submit to admin view form.
+ */
+Drupal.behaviors.feedbackAdminForm = {
+  attach: function (context) {
+    $('#feedback-admin-view-form', context).once('feedback', function () {
+      $(this).find('fieldset.feedback-messages :input[type="checkbox"]').click(function () {
+        this.form.submit();
+      });
+    });
+  }
+};
+
+})(jQuery);
diff --git a/feedback.admin.inc b/feedback.admin.inc
index 8871820..56df016 100644
--- a/feedback.admin.inc
+++ b/feedback.admin.inc
@@ -75,6 +75,7 @@ function feedback_admin_view_form($form, &$form_state) {
  * Output a sortable table containing all feedback entries.
  */
 function theme_feedback_admin_view_form($variables) {
+  drupal_add_js(drupal_get_path('module', 'feedback') . '/feedback-admin.js');
   $form = $variables['form'];
   $output = '';
   foreach (element_children($form['feedback-messages']) as $status) {
@@ -139,6 +140,22 @@ function feedback_admin_view_form_submit($form, &$form_state) {
  * @ingroup forms
  */
 function feedback_admin_settings_form($form, &$form_state) {
+  $options = array();
+  foreach (module_implements('feedback_display_options') as $module) {
+    $settings = call_user_func($module . '_feedback_display_options');
+    if (isset($settings) && is_array($settings)) {
+      foreach ($settings as $key => $setting) {
+        $options[$key] = $setting['name'];
+      }
+    }
+  }
+  $form['feedback_display'] = array(
+    '#type' => 'radios',
+    '#title' => t('Display for feedback form'),
+    '#default_value' => variable_get('feedback_display', 'classic'),
+    '#options' => $options,
+    '#description' => t('Choose the display mode for the feedback form. Classic mode places the feedback form as an expanding "+" in the bottom right of the page.'),
+  );
   $form['feedback_excluded_paths'] = array(
     '#type' => 'textarea',
     '#title' => t('Paths to exclude from feedback display'),
diff --git a/feedback.api.php b/feedback.api.php
index 824569e..fb0135b 100644
--- a/feedback.api.php
+++ b/feedback.api.php
@@ -129,5 +129,34 @@ function hook_feedback_view_alter(&$build) {
 }
 
 /**
+ * Add options for the display of the feedback form.
+ *
+ * Implement this hook to add a new display option for the feedback form.
+ *
+ * @return array
+ *  An associative array keyed by machine name of the options in which the
+ *  values are an array containing
+ *  - name: the human readable name of the option.
+ *  - css: an optional path to a css file to load.
+ *  - js: an optional path to a js file to load.
+ *
+ */
+function hook_feedback_display_options() {
+  $path = drupal_get_path('module', 'feedback') . '/displays';
+  return array(
+    'classic' => array(
+      'name' => t('Classic'),
+      'css' => $path . '/classic/feedback-classic.css',
+      'js' => $path . '/classic/feedback-classic.js',
+    ),
+    'left_tab' => array(
+      'name' => t('Left Tab'),
+      'css' => $path . '/left-tab/feedback-left-tab.css',
+      'js' => $path . '/left-tab/feedback-left-tab.js',
+    ),
+  );
+}
+
+/**
  * @} End of "addtogroup hooks".
  */
diff --git a/feedback.module b/feedback.module
index 5cc04d8..5681ced 100644
--- a/feedback.module
+++ b/feedback.module
@@ -142,17 +142,6 @@ function feedback_menu() {
 }
 
 /**
- * Implements hook_init().
- */
-function feedback_init() {
-  if (user_access('access feedback form')) {
-    $path = drupal_get_path('module', 'feedback');
-    drupal_add_css($path . '/feedback.css');
-    drupal_add_js($path . '/feedback.js');
-  }
-}
-
-/**
  * Implements hook_page_build().
  */
 function feedback_page_build(&$page) {
@@ -166,6 +155,25 @@ function feedback_page_build(&$page) {
 }
 
 /**
+ * Preprocess variables for the feedback form.
+ * Add css and js for the selected display type.
+ */
+function feedback_preprocess_feedback_form_display(&$variables) {
+  $display = variable_get('feedback_display', 'classic');
+  foreach (module_implements('feedback_display_options') as $module) {
+    $settings = call_user_func($module . '_feedback_display_options');
+    if (isset($settings) && is_array($settings) && isset($settings[$display])) {
+      if (isset($settings[$display]['css'])) {
+        drupal_add_css($settings[$display]['css']);
+      }
+      if (isset($settings[$display]['js'])) {
+        drupal_add_js($settings[$display]['js']);
+      }
+    }
+  }
+}
+
+/**
  * Check if the current path matches any pattern in a set of patterns.
  *
  * @param $patterns
@@ -550,3 +558,22 @@ function feedback_views_api() {
     'path' => drupal_get_path('module', 'feedback') . '/views',
   );
 }
+
+/**
+ * Implements hook_feedback_display_options().
+ */
+function feedback_feedback_display_options() {
+  $path = drupal_get_path('module', 'feedback') . '/displays';
+  return array(
+    'classic' => array(
+      'name' => t('Classic'),
+      'css' => $path . '/classic/feedback-classic.css',
+      'js' => $path . '/classic/feedback-classic.js',
+    ),
+    'left_tab' => array(
+      'name' => t('Left Tab'),
+      'css' => $path . '/left_tab/feedback-left-tab.css',
+      'js' => $path . '/left_tab/feedback-left-tab.js',
+    ),
+  );
+}
