Index: plugins/break/break.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/wysiwyg/plugins/break/break.js,v
retrieving revision 1.6
diff -u -p -r1.6 break.js
--- plugins/break/break.js	13 Jun 2009 01:14:43 -0000	1.6
+++ plugins/break/break.js	11 Sep 2009 03:45:39 -0000
@@ -38,6 +38,13 @@ Drupal.wysiwyg.plugins['break'] = {
    * Replace all <!--break--> tags with images.
    */
   attach: function(content, settings, instanceId) {
+    // Remove unnecessary paragraph.
+    content = content.replace(/<p><!--break--><\/p>/ig, this._getPlaceholder(settings));
+    // Move breaks starting at the beginning of paragraphs to before them.
+    content = content.replace(/<p><!--break-->(<[^p])/ig, this._getPlaceholder(settings) + '<p>$1');
+    // Move breaks starting at the end of to after the paragraphs.
+    content = content.replace(/([^p]>)<!--break--><\/p>/ig, '$1</p>' + this._getPlaceholder(settings));
+    // Other breaks.
     content = content.replace(/<!--break-->/g, this._getPlaceholder(settings));
     return content;
   },
@@ -51,8 +58,31 @@ Drupal.wysiwyg.plugins['break'] = {
     // #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-break', $content), function (i, elem) {
-      elem.parentNode.insertBefore(document.createComment('break'), elem);
-      elem.parentNode.removeChild(elem);
+      if (elem.parentNode.nodeName.toLowerCase() == 'p') {
+        // The placeholder was wrapped in a paragraph.
+        if (elem.parentNode.childNodes.length > 1) {
+          if (!elem.previousSibling) {
+            // Insert the break before the paragraph.
+            elem.parentNode.parentNode.insertBefore(document.createComment('break'), elem.parentNode);
+          }
+          else {
+            // Insert the break after the paragraph.
+            elem.parentNode.parentNode.appendChild(document.createComment('break'));
+          }
+          // Remove the placeholder image.
+          elem.parentNode.removeChild(elem);
+        }
+        else {
+          // It's an empty paragraph and safe to remove.
+          elem.parentNode.parentNode.insertBefore(document.createComment('break'), elem.parentNode);
+          elem.parentNode.parentNode.removeChild(elem.parentNode);
+        }
+      }
+      else {
+        // Just replace the placeholder.
+        elem.parentNode.insertBefore(document.createComment('break'), elem);
+        elem.parentNode.removeChild(elem);
+      }
     });
     return $content.html();
   },
