diff --git a/src/wysihtml5.js b/src/wysihtml5.js
index 4d4a0581..47e8efa6 100644
--- a/src/wysihtml5.js
+++ b/src/wysihtml5.js
@@ -31,6 +31,7 @@ import "wysihtml5/keyboard/break_list";
import "wysihtml5/keyboard/shortcuts";
import "wysihtml5/keyboard/delete_images";
import "wysihtml5/keyboard/delete_block_elements";
+import "wysihtml5/keyboard/line_break";
// Text Substitutions
import "wysihtml5/text_substitutions/auto_link";
diff --git a/src/wysihtml5/keyboard/line_break.js b/src/wysihtml5/keyboard/line_break.js
new file mode 100644
index 00000000..8c732d3f
--- /dev/null
+++ b/src/wysihtml5/keyboard/line_break.js
@@ -0,0 +1,31 @@
+import { Constants } from "../constants";
+import { Composer } from "../views/composer";
+import dom from "../dom";
+
+/**
+ * Emulate native browser behaviour of Shift-Enter inserting a
instead
+ * of a new paragraph.
+**/
+Composer.RegisterKeyboardHandler(function(e) {
+ return (
+ e.type === "keydown" &&
+ e.keyCode == Constants.ENTER_KEY &&
+ e.shiftKey
+ );
+}, function(editor, composer, e) {
+ var breakElement = document.createElement("br"),
+ selectedNode = composer.selection.getSelectedNode();
+ e.preventDefault();
+
+ if (selectedNode.nodeName === "P") {
+ selectedNode.appendChild(breakElement);
+ } else if (selectedNode.nodeName === "BR") {
+ dom.insert(breakElement).after(selectedNode);
+ } else {
+ var initialBreakElement = document.createElement("br");
+ dom.insert(initialBreakElement).after(selectedNode);
+ dom.insert(breakElement).after(initialBreakElement);
+ }
+
+ composer.selection.setAfter(breakElement);
+});