diff --git a/better_formats.module b/better_formats.module
index c49969e..2dd87ce 100644
--- a/better_formats.module
+++ b/better_formats.module
@@ -5,6 +5,17 @@
  */
 
 /**
+ * Implements hook_theme()
+ */
+function better_formats_theme() {
+  return array(
+    'better_formats_filter_table' => array(
+      'render element' => 'form',
+    )
+  );
+}
+
+/**
  * Implements of hook_perm().
  */
 function better_formats_permission() {
@@ -109,6 +120,9 @@ function better_formats_element_info_alter(&$type) {
 function better_formats_filter_process_format($element) {
   global $user;
 
+  $instances = field_info_instances($element['#entity_type'], $element['#bundle']);
+  // We check if this field is using overriden settings.
+  $settings =  isset($instances[$element['#field_name']]['settings']['better_formats']) ? $instances[$element['#field_name']]['settings']['better_formats'] : array();
   $show_selection = TRUE;
   if (isset($element['#entity_type'])) {
     $show_selection  = user_access('show format selection for ' . $element['#entity_type']);
@@ -177,12 +191,21 @@ function better_formats_filter_process_format($element) {
   // Get a list of formats that the current user has access to.
   $formats = filter_formats($user);
   $options = array();
+  
+  // Set our weights on our formats
+  foreach ($formats as &$format) {
+    $format->weight = isset($settings['formats'][$format->format]) ? $settings['formats'][$format->format]['weight'] : $format->weight;
+  }
+  uasort($formats, '_better_formats_sort');
+  
   foreach ($formats as $format) {
     // If not showing selection remove all formats except default.
     if ($format->format !== $element['#format'] && !$show_selection) {
       continue;
     }
-    $options[$format->format] = $format->name;
+    if (!isset($settings['formats'][$format->format]) || !$settings['formats'][$format->format]['disable']) {
+      $options[$format->format] = $format->name;
+    }
     if ($show_tips) {
       $element['format']['guidelines'][$format->format] = array(
         '#theme' => 'filter_guidelines',
@@ -263,6 +286,13 @@ function better_formats_filter_process_format($element) {
 }
 
 /**
+ * Sort our formats by weight
+ */
+function _better_formats_sort($a, $b) {
+  return $a->weight > $b->weight;
+}
+
+/**
  * Implements hook_form_FORM_ID_alter().
  */
 function better_formats_form_field_ui_field_edit_form_alter(&$form, &$form_state, $form_id) {
@@ -271,10 +301,47 @@ function better_formats_form_field_ui_field_edit_form_alter(&$form, &$form_state
   if ($text_processing == 1 && variable_get('better_formats_per_field_core', 0)) {
     // Add a submit handler to save default values on empty fields.
     $form['#submit'][] = 'better_formats_form_field_ui_edit_form_submit';
+    $settings = isset($form['#instance']['settings']['better_formats']) ? $form['#instance']['settings']['better_formats'] : array();
+    // Add in our formats table
+    $form['instance']['settings'] += better_formats_format_table($settings);	
   }
 }
 
 /**
+ * Helper function to generate our draggable table form for format lists
+ * 
+ * @param $defaults
+ *   A keyed array of the default values for the form
+ */
+function better_formats_format_table($defaults) {
+   $formats = filter_formats();
+  $form = array();
+    $form['better_formats'] = array(
+      '#tree' => TRUE,
+      '#type' => 'fieldset',
+      '#title' => t('Input Formats'),
+      '#theme' => 'better_formats_filter_table'
+    );  
+  foreach ($formats as $key => $format) {
+    $form['better_formats']['formats'][$key]['name'] = array('#markup' => $format->name);
+    $form['better_formats']['formats'][$key]['weight'] = array(
+      '#type' => 'weight',
+      '#default_value' => isset($defaults['formats'][$key]) ? $defaults['formats'][$key]['weight'] : 0,
+      '#delta' => 50,
+    );
+    
+    $form['better_formats']['formats'][$key]['disable'] = array(
+      '#type' => 'checkbox',
+      '#default_value' => isset($defaults['formats'][$key]) ? $defaults['formats'][$key]['disable'] : 0,
+    );
+
+    $form['better_formats']['formats'][$key]['#weight'] = isset($defaults['formats'][$key]) ? $defaults['formats'][$key]['weight'] : 0;
+  }
+  
+  return $form;
+}
+
+/**
  * Submit handler for field instance edit form.
  *
  * Copied and slightly modifed from field_ui_field_edit_form_submit().
@@ -311,3 +378,41 @@ function better_formats_form_field_ui_edit_form_submit($form, &$form_state) {
   }
   // Messaging and redirect removed as this is added in the default handler.
 }
+
+/**
+ * @file
+ * Enhances Drupal's core input format settings.
+ */
+function theme_better_formats_filter_table(&$variables) {
+  $form = $variables['form'];
+
+  $rows = array();
+  $output = drupal_render($form['override']);
+  if (is_array($form)) {
+    $form['formats']['#sorted'] = FALSE;
+    foreach (element_children($form['formats'], TRUE) as $name) {
+
+      $form['formats'][$name]['weight']['#attributes']['class'][] = 'format-order-weight';
+      $rows[] = array(
+        'data' => array(
+          drupal_render($form['formats'][$name]['name']),
+          drupal_render($form['formats'][$name]['weight']),
+          drupal_render($form['formats'][$name]['disable']),
+        ),
+        'class' => array('draggable'),
+      );
+    }
+  }
+
+  $header = array(
+    t('Format'),
+    t('Weight'),
+    t('Disable')
+  );
+
+  $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'format-order')));
+  drupal_add_tabledrag('format-order', 'order', 'sibling', 'format-order-weight', NULL, NULL, TRUE);
+
+  return $output;
+}
+
