diff --git a/keymap/vim.js b/keymap/vim.js
index 2763b5134f4ba3c52cd34f95b60632e00471028b..0310baded7d2571bae6c30d8a41111ec8b5114d3 100644
--- a/keymap/vim.js
+++ b/keymap/vim.js
@@ -986,9 +986,6 @@
     }
     RegisterController.prototype = {
       pushText: function(registerName, operator, text, linewise, blockwise) {
-        if (linewise && text.charAt(0) == '\n') {
-          text = text.slice(1) + '\n';
-        }
         if (linewise && text.charAt(text.length - 1) !== '\n'){
           text += '\n';
         }
diff --git a/test/vim_test.js b/test/vim_test.js
index d107e82cac9214b1548cef99a974f2ad1e52cebe..86a544756ac19bcff1354bdb6b3c19f3ce803bc1 100644
--- a/test/vim_test.js
+++ b/test/vim_test.js
@@ -955,6 +955,10 @@ testVim('yy_multiply_repeat', function(cm, vim, helpers) {
   is(register.linewise);
   eqCursorPos(curStart, cm.getCursor());
 });
+testVim('2dd_blank_P', function(cm, vim, helpers) {
+  helpers.doKeys('2', 'd', 'd', 'P');
+  eq('\na\n\n', cm.getValue());
+}, { value: '\na\n\n' });
 // Change commands behave like d commands except that it also enters insert
 // mode. In addition, when the change is linewise, an additional newline is
 // inserted so that insert mode starts on that line.