diff --git a/insert.module b/insert.module
index cb727eb..b71ff79 100644
--- a/insert.module
+++ b/insert.module
@@ -53,6 +53,9 @@ function insert_theme() {
       'arguments' => array('element' => NULL),
       'template' => 'templates/insert-widget',
     ),
+    'insert_field_widget_settings_styles' => array(
+      'arguments' => array('element' => NULL),
+    ),
 
     // Theme functions in includes/insert.inc.
     'insert_image' => array(
@@ -201,8 +204,8 @@ function insert_element_process($element) {
     drupal_add_js(array('insert' => array('widgets' => array($widget_type => $insert_settings))), 'setting');
   }
 
-  if ($element['fid']['#value']) {
-    $insert_styles = array_filter((array) $widget_settings['insert_styles']);
+  if ($element['fid']['#value']) {;
+    $insert_styles = !empty($widget_settings['insert_styles']['<all>']) ? drupal_map_assoc(array_keys(insert_styles())) : array_filter((array) $widget_settings['insert_styles']);
     $default = !empty($widget_settings['insert_default']) ? $widget_settings['insert_default'] : 'auto';
     if (!isset($insert_styles[$default])) {
       $insert_styles[$default] = $default;
@@ -301,8 +304,10 @@ function insert_widget_form($widget) {
     '#title' => t('Enabled insert styles'),
     '#type' => 'checkboxes',
     '#options' => insert_styles_list(),
-    '#default_value' => (array) $widget['insert_styles'],
-    '#description' => t('Select which styles should be available when sending items to text areas. If no styles are selected, the option to use a style is not displayed.'),
+    '#default_value' => !empty($widget['insert_styles']['<all>']) ? array_keys(insert_styles_list()) : (array) $widget['insert_styles'],
+    '#description' => t('Select which styles should be available when sending items to text areas. If no styles are selected, the option to use a style is not displayed. If all styles are selected, new styles will be enabled by default.'),
+    '#element_validate' => array('insert_field_widget_settings_styles_validate'),
+    '#theme' => 'insert_field_widget_settings_styles',
   );
 
   $form['insert']['insert_default'] = array(
@@ -333,6 +338,34 @@ function insert_widget_form($widget) {
 }
 
 /**
+ * An #element_validate function for the styles list on the settings form.
+ */
+function insert_field_widget_settings_styles_validate($element, &$form_state) {
+  if (array_values($element['#value']) == array_keys($element['#options'])) {
+    form_set_value($element, array('<all>' => '<all>'), $form_state);
+  }
+}
+
+/**
+ * Theme the output of the styles list on the settings form.
+ */
+function theme_insert_field_widget_settings_styles($element) {
+  drupal_add_js('misc/tableselect.js');
+
+  $header = array(
+    array('class' => 'select-all', 'data' => ' ' . t('Select all')),
+  );
+
+  $rows = array();
+  foreach ($element['#options'] as $key => $label) {
+    $row = array();
+    $row[] = drupal_render($element[$key]);
+    $rows[] = $row;
+  }
+  return theme('table', $header, $rows);
+}
+
+/**
  * Utility function to create a URL for Insert.
  *
  * This is modeled after file_create_url(), but with the modification that it
