diff --git a/columns_filter.css b/columns_filter.css
index b035c7f..c12603c 100644
--- a/columns_filter.css
+++ b/columns_filter.css
@@ -1,12 +1,18 @@
-.content .content-column {
-  float: left;
+.columns-filter-section {
+  display: table;
+  table-layout: fixed;
+  width: 100%;
 }
-.content .content-column-2 {
+.columns-filter-section .content-column {
+  display: table-cell;
+  vertical-align: top;
+}
+.columns-filter-section .content-column-2 {
   width: 50%;
 }
-.content .content-column-3 {
+.columns-filter-section .content-column-3 {
   width: 33%;
 }
-.content .content-column-4 {
+.columns-filter-section .content-column-4 {
   width: 25%;
 }
diff --git a/columns_filter.info b/columns_filter.info
index b66aac5..b1e5375 100644
--- a/columns_filter.info
+++ b/columns_filter.info
@@ -6,3 +6,10 @@ files[] = columns_filter.module
 files[] = plugins/columnbreak.inc
 
 stylesheets[all][] = columns_filter.css
+
+; Information added by drupal.org packaging script on 2013-09-30
+version = "7.x-1.x-dev"
+core = "7.x"
+project = "columns_filter"
+datestamp = "1380559649"
+
diff --git a/columns_filter.module b/columns_filter.module
index 76cf3c7..3281602 100644
--- a/columns_filter.module
+++ b/columns_filter.module
@@ -1,8 +1,15 @@
 <?php
 
+define('COLUMNS_FILTER_SECTION_MARKER', '<!--section-->');
+define('COLUMNS_FILTER_COLUMN_MARKER', '<!--column-->');
+define('COLUMNS_FILTER_SECTION_PLACEHOLDER', '####COLUMNS_FILTER_SECTION####');
+define('COLUMNS_FILTER_COLUMN_PLACEHOLDER', '####COLUMNS_FILTER_COLUMN####');
+
 /**
  * @file
- * Columns input filter: use <!--column--> to create a column break.
+ * Columns input filter:
+ * - use <!--column--> to create a column break
+ * - use <!--section--> to create a section break
  * Must be placed after the HTML filter and above the line break converter filter:
  *  - HTML filter
  *  - Columns filter
@@ -33,8 +40,9 @@ function columns_filter_filter_info() {
  * @see hook_filter_FILTER_prepare()
  */
 function columns_filter_filter_prepare($text, $filter, $format, $langcode, $cache, $cache_id) {
-  $column_marker = '<!--column-->';
-  return str_replace($column_marker, '####COLUMN_FILTER_COLUMN####', $text);
+  $search = array(COLUMNS_FILTER_SECTION_MARKER, COLUMNS_FILTER_COLUMN_MARKER);
+  $replace = array(COLUMNS_FILTER_SECTION_PLACEHOLDER, COLUMNS_FILTER_COLUMN_PLACEHOLDER);
+  return str_replace($search, $replace, $text);
 }
 
 /**
@@ -45,17 +53,20 @@ function columns_filter_filter_prepare($text, $filter, $format, $langcode, $cach
  * @see hook_filter_FILTER_process()
  */
 function columns_filter_filter_process($text, $filter, $format, $langcode, $cache, $cache_id) {
-  $column_marker = '####COLUMN_FILTER_COLUMN####';
-
-  $pieces = explode($column_marker, $text);
-  $columns = count($pieces);
+  $sections = explode(COLUMNS_FILTER_SECTION_PLACEHOLDER, $text);
 
-  // Only one column.
-  if ($columns < 2) {
-    return theme('columns_filter_single_column', array('text' => $text));
+  $output = '';
+  foreach ($sections as $section) {
+    $columns = explode(COLUMNS_FILTER_COLUMN_PLACEHOLDER, $section);
+    if (count($columns) < 2) {
+      $output .= theme('columns_filter_single_column', array('text' => $section));
+    }
+    else {
+      $output .= theme('columns_filter_columns', array('cols' => $columns));
+    }
   }
 
-  return theme('columns_filter_columns', array('cols' => $pieces));
+  return $output;
 }
 
 /**
@@ -64,7 +75,7 @@ function columns_filter_filter_process($text, $filter, $format, $langcode, $cach
  * @see hook_filter_FILTER_tips()
  */
 function columns_filter_filter_tips($filter, $format, $long) {
-  return t("&lt;!--column--> creates a column break.");
+  return t("&lt;!--section--&gt; creates a section break. &lt;!--column--&gt; creates a column break. Always add a section break before first column content AND after last column content.");
 }
 
 /**
@@ -115,7 +126,9 @@ function theme_columns_filter_columns($variables) {
     $processed_text .= '<div' . drupal_attributes($attributes) . '>' . trim($col) . "</div>";
   }
 
-  return $processed_text;
+  drupal_add_css(drupal_get_path('module', 'columns_filter') . '/columns_filter.css');
+
+  return '<div class="columns-filter-section">' . $processed_text . '</div>';
 }
 
 /**
diff --git a/plugins/columnbreak.inc b/plugins/columnbreak.inc
index 35b9643..5192a79 100644
--- a/plugins/columnbreak.inc
+++ b/plugins/columnbreak.inc
@@ -6,16 +6,40 @@
  */
 
 /**
- * Implements hook_wysiwyg_plugin().
+ * Implements hook_INCLUDE_plugin().
  */
 function columns_filter_columnbreak_plugin() {
+  $plugin_path = drupal_get_path('module', 'columns_filter') . '/plugins/columnbreak';
+
+  $plugins['sectionbreak'] = array(
+    'title' => t('Section break'),
+    'vendor url' => 'http://drupal.org/project/columns_filter',
+    'icon path' => $plugin_path . '/images',
+    'icon file' => 'sectionbreak.png',
+    'icon title' => t('Insert a section break'),
+    'settings' => array(
+      'text' => 'section',
+      'class' => 'wysiwyg-sectionbreak',
+      'path' => $plugin_path,
+    ),
+    'js path' => $plugin_path,
+    'js file' => 'columnbreak.js',
+    'css path' => $plugin_path,
+    'css file' => 'columnbreak.css',
+  );
+
   $plugins['columnbreak'] = array(
     'title' => t('Column break'),
     'vendor url' => 'http://drupal.org/project/columns_filter',
-    'icon file' => 'columnbreak.gif',
+    'icon path' => $plugin_path . '/images',
+    'icon file' => 'columnbreak.png',
     'icon title' => t('Insert a column break'),
-    'settings' => array(),
+    'settings' => array(
+      'text' => 'column',
+      'class' => 'wysiwyg-columnbreak',
+      'path' => $plugin_path,
+    ),
   );
+
   return $plugins;
 }
-
diff --git a/plugins/columnbreak/columnbreak.css b/plugins/columnbreak/columnbreak.css
index ef1c205..0d14f8b 100644
--- a/plugins/columnbreak/columnbreak.css
+++ b/plugins/columnbreak/columnbreak.css
@@ -6,5 +6,15 @@
   margin-top: 1em;
   width: 100%;
   height: 12px;
-  background: transparent url(images/colbreaktext.gif) no-repeat center top;
+  background: transparent url(images/columnbreaktext.png) no-repeat center top;
+}
+
+.wysiwyg-sectionbreak {
+  display: block;
+  border: 0;
+  border-top: 1px dotted #ccc;
+  margin-top: 1em;
+  width: 100%;
+  height: 12px;
+  background: transparent url(images/sectionbreaktext.png) no-repeat center top;
 }
diff --git a/plugins/columnbreak/columnbreak.js b/plugins/columnbreak/columnbreak.js
index 9c0c23b..8e1ef26 100644
--- a/plugins/columnbreak/columnbreak.js
+++ b/plugins/columnbreak/columnbreak.js
@@ -1,56 +1,73 @@
 (function ($) {
-  Drupal.wysiwyg.plugins['columnbreak'] = {
 
-    /**
-     * Return whether the passed node belongs to this plugin.
-     */
-    isNode: function(node) {
-      return ($(node).is('img.wysiwyg-columnbreak'));
-    },
+  /**
+   * Execute the button.
+   */
+  var invoke = function (data, settings, instanceId) {
+    if (data.format == 'html') {
+      var content = _getPlaceholder(settings);
+    }
+    else {
+      var content = '<!--' + settings.text + '-->';
+    }
+    if (typeof content != 'undefined') {
+      Drupal.wysiwyg.instances[instanceId].insert(content);
+    }
+  };
 
-    /**
-     * Execute the button.
-     */
-    invoke: function(data, settings, instanceId) {
-      if (data.format == 'html') {
-        var content = this._getPlaceholder(settings);
-      }
-      else {
-        var content = '<!--column-->';
-      }
-      if (typeof content != 'undefined') {
-        Drupal.wysiwyg.instances[instanceId].insert(content);
-      }
-    },
+  /**
+   * Replace all marker tags with images.
+   */
+  var attach = function (content, settings, instanceId) {
+    content = content.replace(new RegExp('<!--' + settings.text + '-->', "g"), _getPlaceholder(settings));
+    return content;
+  };
 
-    /**
-     * Replace all <!--column--> tags with images.
-     */
-    attach: function(content, settings, instanceId) {
-      content = content.replace(/<!--column-->/g, this._getPlaceholder(settings));
-      return content;
-    },
+  /**
+   * Replace images with comment tags in content upon detaching editor.
+   */
+  var detach = function (content, settings, instanceId) {
+    var $content = $('<div>' + content + '</div>'); // No .outerHTML() in jQuery :(
+    // #404532: document.createComment() required or IE will strip the comment.
+    // #474908: IE 8 breaks when using jQuery methods to replace the elements.
+    // @todo Add a generic implementation for all Drupal plugins for this.
+    $.each($('img.' + settings.class, $content), function (i, elem) {
+      elem.parentNode.insertBefore(document.createComment(settings.text), elem);
+      elem.parentNode.removeChild(elem);
+    });
+    return $content.html();
+  };
 
+  /**
+   * Helper function to return a HTML placeholder.
+   */
+  function _getPlaceholder(settings) {
+    var text = '&lt;--' + settings.text + '--&gt;';
+    return '<img src="' + settings.path + '/images/spacer.gif" alt="' + text + '" title="' + text + '" class="' + settings.class + ' drupal-content" />';
+  }
+
+  Drupal.wysiwyg.plugins['sectionbreak'] = {
     /**
-     * Replace images with <!--column--> tags in content upon detaching editor.
+     * Return whether the passed node belongs to this plugin.
      */
-    detach: function(content, settings, instanceId) {
-      var $content = $('<div>' + content + '</div>'); // No .outerHTML() in jQuery :(
-      // #404532: document.createComment() required or IE will strip the comment.
-      // #474908: IE 8 breaks when using jQuery methods to replace the elements.
-      // @todo Add a generic implementation for all Drupal plugins for this.
-      $.each($('img.wysiwyg-columnbreak', $content), function (i, elem) {
-        elem.parentNode.insertBefore(document.createComment('column'), elem);
-        elem.parentNode.removeChild(elem);
-      });
-      return $content.html();
+    isNode: function (node) {
+      return ($(node).is('img.wysiwyg-sectionbreak'));
     },
-
+    invoke: invoke,
+    attach: attach,
+    detach: detach
+  };
+  
+  Drupal.wysiwyg.plugins['columnbreak'] = {
     /**
-     * Helper function to return a HTML placeholder.
+     * Return whether the passed node belongs to this plugin.
      */
-    _getPlaceholder: function (settings) {
-      return '<img src="' + settings.path + '/images/spacer.gif" alt="&lt;--column-&gt;" title="&lt;--column--&gt;" class="wysiwyg-columnbreak drupal-content" />';
-    }
+    isNode: function (node) {
+      return ($(node).is('img.wysiwyg-columnbreak'));
+    },
+    invoke: invoke,
+    attach: attach,
+    detach: detach
   };
+
 })(jQuery);
diff --git a/plugins/columnbreak/images/columnbreak.png b/plugins/columnbreak/images/columnbreak.png
new file mode 100644
index 0000000..b64d4c1
Binary files /dev/null and b/plugins/columnbreak/images/columnbreak.png differ
diff --git a/plugins/columnbreak/images/columnbreaktext.png b/plugins/columnbreak/images/columnbreaktext.png
new file mode 100644
index 0000000..e7fafd5
Binary files /dev/null and b/plugins/columnbreak/images/columnbreaktext.png differ
diff --git a/plugins/columnbreak/images/sectionbreak.png b/plugins/columnbreak/images/sectionbreak.png
new file mode 100644
index 0000000..586091a
Binary files /dev/null and b/plugins/columnbreak/images/sectionbreak.png differ
diff --git a/plugins/columnbreak/images/sectionbreaktext.png b/plugins/columnbreak/images/sectionbreaktext.png
new file mode 100644
index 0000000..2b70a61
Binary files /dev/null and b/plugins/columnbreak/images/sectionbreaktext.png differ
diff --git a/plugins/columnbreak/langs/en.js b/plugins/columnbreak/langs/en.js
index b36f97f..acf2131 100644
--- a/plugins/columnbreak/langs/en.js
+++ b/plugins/columnbreak/langs/en.js
@@ -3,4 +3,8 @@
     title: 'Insert column break',
     desc: 'Separate this content into columns'
   });
+  tinyMCE.addToLang('sectionbreak', {
+    title: 'Insert section break',
+    desc: 'Separate this content into sections'
+  });
 })(jQuery);
