diff --git a/src/ex_cmdidxs.h b/src/ex_cmdidxs.h
index 609a81d..0b13a6c 100644
--- a/src/ex_cmdidxs.h
+++ b/src/ex_cmdidxs.h
@@ -14,23 +14,23 @@
   /* g */ 184,
   /* h */ 190,
   /* i */ 200,
-  /* j */ 221,
-  /* k */ 223,
-  /* l */ 228,
-  /* m */ 291,
-  /* n */ 309,
-  /* o */ 329,
-  /* p */ 341,
-  /* q */ 382,
-  /* r */ 385,
-  /* s */ 405,
-  /* t */ 475,
-  /* u */ 522,
-  /* v */ 533,
-  /* w */ 554,
-  /* x */ 568,
-  /* y */ 578,
-  /* z */ 579
+  /* j */ 220,
+  /* k */ 222,
+  /* l */ 227,
+  /* m */ 290,
+  /* n */ 308,
+  /* o */ 328,
+  /* p */ 340,
+  /* q */ 381,
+  /* r */ 384,
+  /* s */ 404,
+  /* t */ 474,
+  /* u */ 521,
+  /* v */ 532,
+  /* w */ 553,
+  /* x */ 567,
+  /* y */ 577,
+  /* z */ 578
 };
 
 /*
@@ -49,7 +49,7 @@
   /* f */ {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 10,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0 },
   /* g */ {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  2,  0,  0,  4,  5,  0,  0,  0,  0 },
   /* h */ {  5,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
-  /* i */ {  1,  0,  0,  0,  0,  3,  0,  0,  0,  4,  0,  5,  6,  0,  0, 15,  0,  0, 16,  0, 18,  0,  0,  0,  0,  0 },
+  /* i */ {  1,  0,  0,  0,  0,  3,  0,  0,  0,  4,  0,  5,  6,  0,  0,  0,  0,  0, 15,  0, 17,  0,  0,  0,  0,  0 },
   /* j */ {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0 },
   /* k */ {  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
   /* l */ {  3, 11, 15, 19, 20, 25, 28, 33,  0,  0,  0, 35, 38, 41, 45, 51,  0, 53, 62, 54, 55, 59, 61,  0,  0,  0 },
@@ -69,4 +69,4 @@
   /* z */ {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 }
 };
 
-static const int command_count = 596;
+static const int command_count = 595;
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 0659f87..d217cd9 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -761,9 +761,6 @@
 EXCMD(CMD_interface,	"interface",	ex_class,
 	EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE|EX_EXPORT,
 	ADDR_NONE),
-EXCMD(CMD_iput,		"iput",		ex_iput,
-	EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_REGSTR|EX_TRLBAR|EX_ZEROR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
-	ADDR_LINES),
 EXCMD(CMD_isearch,	"isearch",	ex_findpat,
 	EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK,
 	ADDR_LINES),
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 341cc38..80ec8a1 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -231,7 +231,6 @@
 #endif
 static void	ex_operators(exarg_T *eap);
 static void	ex_put(exarg_T *eap);
-static void	ex_iput(exarg_T *eap);
 static void	ex_copymove(exarg_T *eap);
 static void	ex_submagic(exarg_T *eap);
 static void	ex_join(exarg_T *eap);
@@ -2373,7 +2372,7 @@
 	    goto doend;
 	}
 #endif
-	if (valid_yank_reg(*ea.arg, ((ea.cmdidx != CMD_put && ea.cmdidx != CMD_iput)
+	if (valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
 					      && !IS_USER_CMDIDX(ea.cmdidx))))
 	{
 	    ea.regname = *ea.arg++;
@@ -8522,25 +8521,6 @@
 }
 
 /*
- * ":iput".
- */
-    static void
-ex_iput(exarg_T *eap)
-{
-    // ":0iput" works like ":1iput!".
-    if (eap->line2 == 0)
-    {
-	eap->line2 = 1;
-	eap->forceit = TRUE;
-    }
-    curwin->w_cursor.lnum = eap->line2;
-    check_cursor_col();
-    do_put(eap->regname, NULL, eap->forceit ? BACKWARD : FORWARD, 1L,
-						      PUT_LINE|PUT_CURSLINE
-						      |PUT_FIXINDENT);
-}
-
-/*
  * Handle ":copy" and ":move".
  */
     static void
diff --git a/src/proto/vim9cmds.pro b/src/proto/vim9cmds.pro
index 12f0560..bd2b5c2 100644
--- a/src/proto/vim9cmds.pro
+++ b/src/proto/vim9cmds.pro
@@ -26,7 +26,7 @@
 int get_defer_var_idx(cctx_T *cctx);
 char_u *compile_defer(char_u *arg_start, cctx_T *cctx);
 char_u *compile_mult_expr(char_u *arg, int cmdidx, long cmd_count, cctx_T *cctx);
-char_u *compile_put(char_u *arg, exarg_T *eap, cctx_T *cctx, int fixindent);
+char_u *compile_put(char_u *arg, exarg_T *eap, cctx_T *cctx);
 char_u *compile_exec(char_u *line_arg, exarg_T *eap, cctx_T *cctx);
 char_u *compile_script(char_u *line, cctx_T *cctx);
 char_u *compile_substitute(char_u *arg, exarg_T *eap, cctx_T *cctx);
diff --git a/src/proto/vim9instr.pro b/src/proto/vim9instr.pro
index 641648f..3fcf08c 100644
--- a/src/proto/vim9instr.pro
+++ b/src/proto/vim9instr.pro
@@ -68,7 +68,7 @@
 int generate_MULT_EXPR(cctx_T *cctx, isntype_T isn_type, int count);
 int generate_ECHOWINDOW(cctx_T *cctx, int count, long time);
 int generate_SOURCE(cctx_T *cctx, int sid);
-int generate_PUT(cctx_T *cctx, int regname, linenr_T lnum, int fixindent);
+int generate_PUT(cctx_T *cctx, int regname, linenr_T lnum);
 int generate_LOCKUNLOCK(cctx_T *cctx, char_u *line, int is_arg);
 int generate_EXEC_copy(cctx_T *cctx, isntype_T isntype, char_u *line);
 int generate_EXEC(cctx_T *cctx, isntype_T isntype, char_u *str);
diff --git a/src/testdir/test_put.vim b/src/testdir/test_put.vim
index 51909bf..94e4f47 100644
--- a/src/testdir/test_put.vim
+++ b/src/testdir/test_put.vim
Binary files differ
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index 26a3f09..900bf8a 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -1350,59 +1350,6 @@
   bwipe!
 enddef
 
-def Test_iput()
-  new
-  set noexpandtab
-
-  call feedkeys("i\<Tab>foo", 'x')
-
-  @p = "ppp"
-  iput p
-  call assert_equal("\<Tab>ppp", getline(2))
-
-  iput ="below"
-  assert_equal("\<Tab>below", getline(3))
-  iput! ="above"
-  assert_equal("\<Tab>above", getline(3))
-  assert_equal("\<Tab>below", getline(4))
-
-  :2iput =['a', 'b', 'c']
-  assert_equal(["\<Tab>ppp", "\<Tab>a", "\<Tab>b", "\<Tab>c", "\<Tab>above"], getline(2, 6))
-
-  :0iput =  "\<Tab>\<Tab>first"
-  assert_equal("\<Tab>first", getline(1))
-  :1iput! ="first again"
-  assert_equal("\<Tab>first again", getline(1))
-
-  bw!
-  v9.CheckDefFailure(['iput =xxx'], 'E1001:')
-enddef
-
-def Test_iput_with_linebreak()
-  new
-  var lines =<< trim END
-    vim9script
-    ip =split('abc', '\zs')
-            ->join()
-  END
-  v9.CheckScriptSuccess(lines)
-  getline(2)->assert_equal('a b c')
-  bwipe!
-enddef
-
-def Test_iput_not_put()
-  new
-  call feedkeys("ggS\<Tab>foo", 'x')
-  @a = "putting"
-  :0iput a
-  assert_equal("\<Tab>putting", getline(1))
-  put a
-  assert_equal("putting", getline(2))
-  iput a
-  assert_equal("putting", getline(3))
-  bwipe!
-enddef
-
 def Test_command_star_range()
   new
   setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
diff --git a/src/version.c b/src/version.c
index b633dc8..435c27d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1215,
+/**/
     1214,
 /**/
     1213,
diff --git a/src/vim9.h b/src/vim9.h
index 7c731fa..63d7116 100644
--- a/src/vim9.h
+++ b/src/vim9.h
@@ -200,7 +200,6 @@
     ISN_USEDICT,    // use or clear dict saved by ISN_MEMBER/ISN_STRINGMEMBER
 
     ISN_PUT,	    // ":put", uses isn_arg.put
-    ISN_IPUT,	    // ":iput", uses isn_arg.put
 
     ISN_CMDMOD,	    // set cmdmod
     ISN_CMDMOD_REV, // undo ISN_CMDMOD
diff --git a/src/vim9cmds.c b/src/vim9cmds.c
index aeb742e..f8ebfb1 100644
--- a/src/vim9cmds.c
+++ b/src/vim9cmds.c
@@ -2161,12 +2161,9 @@
 /*
  * :put r
  * :put ={expr}
- * or if fixindent == TRUE
- * :iput r
- * :iput ={expr}
  */
     char_u *
-compile_put(char_u *arg, exarg_T *eap, cctx_T *cctx, int fixindent)
+compile_put(char_u *arg, exarg_T *eap, cctx_T *cctx)
 {
     char_u	*line = arg;
     linenr_T	lnum;
@@ -2205,8 +2202,7 @@
 	    --lnum;
     }
 
-    generate_PUT(cctx, eap->regname, lnum, fixindent);
-
+    generate_PUT(cctx, eap->regname, lnum);
     return line;
 }
 
diff --git a/src/vim9compile.c b/src/vim9compile.c
index cb7b948..9d0bf71 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -4595,12 +4595,7 @@
 
 	    case CMD_put:
 		    ea.cmd = cmd;
-		    line = compile_put(p, &ea, cctx, FALSE);
-		    break;
-
-	    case CMD_iput:
-		    ea.cmd = cmd;
-		    line = compile_put(p, &ea, cctx, TRUE);
+		    line = compile_put(p, &ea, cctx);
 		    break;
 
 	    case CMD_substitute:
diff --git a/src/vim9execute.c b/src/vim9execute.c
index aa0e086..4b69dfa 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -3253,57 +3253,6 @@
 }
 
 /*
- * do ISN_PUT or ISN_IPUT instruction depending on fixindent parameter
- */
-    static void
-isn_put_do (ectx_T *ectx, isn_T *iptr, typval_T *tv, int fixindent) {
-    int		regname = iptr->isn_arg.put.put_regname;
-    linenr_T	lnum = iptr->isn_arg.put.put_lnum;
-    char_u	*expr = NULL;
-    int		dir = FORWARD;
-
-    if (lnum < -2)
-    {
-	// line number was put on the stack by ISN_RANGE
-	tv = STACK_TV_BOT(-1);
-	curwin->w_cursor.lnum = tv->vval.v_number;
-	if (lnum == LNUM_VARIABLE_RANGE_ABOVE)
-	    dir = BACKWARD;
-	--ectx->ec_stack.ga_len;
-    }
-    else if (lnum == -2)
-	// :put! above cursor
-	dir = BACKWARD;
-    else if (lnum >= 0)
-    {
-	curwin->w_cursor.lnum = lnum;
-	if (lnum == 0)
-	    // check_cursor() below will move to line 1
-	    dir = BACKWARD;
-    }
-
-    if (regname == '=')
-    {
-	tv = STACK_TV_BOT(-1);
-	if (tv->v_type == VAR_STRING)
-	    expr = tv->vval.v_string;
-	else
-	{
-	    expr = typval2string(tv, TRUE); // allocates value
-	    clear_tv(tv);
-	}
-	--ectx->ec_stack.ga_len;
-    }
-    check_cursor();
-
-    if (fixindent)
-	do_put(regname, expr, dir, 1L, PUT_LINE|PUT_CURSLINE|PUT_FIXINDENT);
-    else
-	do_put(regname, expr, dir, 1L, PUT_LINE|PUT_CURSLINE);
-    vim_free(expr);
-}
-
-/*
  * Execute instructions in execution context "ectx".
  * Return OK or FAIL;
  */
@@ -5999,10 +5948,48 @@
 		break;
 
 	    case ISN_PUT:
-		isn_put_do(ectx, iptr, tv, FALSE);
-		break;
-	    case ISN_IPUT:
-		isn_put_do(ectx, iptr, tv, TRUE);
+		{
+		    int		regname = iptr->isn_arg.put.put_regname;
+		    linenr_T	lnum = iptr->isn_arg.put.put_lnum;
+		    char_u	*expr = NULL;
+		    int		dir = FORWARD;
+
+		    if (lnum < -2)
+		    {
+			// line number was put on the stack by ISN_RANGE
+			tv = STACK_TV_BOT(-1);
+			curwin->w_cursor.lnum = tv->vval.v_number;
+			if (lnum == LNUM_VARIABLE_RANGE_ABOVE)
+			    dir = BACKWARD;
+			--ectx->ec_stack.ga_len;
+		    }
+		    else if (lnum == -2)
+			// :put! above cursor
+			dir = BACKWARD;
+		    else if (lnum >= 0)
+		    {
+			curwin->w_cursor.lnum = lnum;
+			if (lnum == 0)
+			    // check_cursor() below will move to line 1
+			    dir = BACKWARD;
+		    }
+
+		    if (regname == '=')
+		    {
+			tv = STACK_TV_BOT(-1);
+			if (tv->v_type == VAR_STRING)
+			    expr = tv->vval.v_string;
+			else
+			{
+			    expr = typval2string(tv, TRUE); // allocates value
+			    clear_tv(tv);
+			}
+			--ectx->ec_stack.ga_len;
+		    }
+		    check_cursor();
+		    do_put(regname, expr, dir, 1L, PUT_LINE|PUT_CURSLINE);
+		    vim_free(expr);
+		}
 		break;
 
 	    case ISN_CMDMOD:
@@ -7632,18 +7619,7 @@
 						 iptr->isn_arg.put.put_regname,
 					     (long)iptr->isn_arg.put.put_lnum);
 		break;
-	    case ISN_IPUT:
-		if (iptr->isn_arg.put.put_lnum == LNUM_VARIABLE_RANGE_ABOVE)
-		    smsg("%s%4d PUT %c above range",
-				  pfx, current, iptr->isn_arg.put.put_regname);
-		else if (iptr->isn_arg.put.put_lnum == LNUM_VARIABLE_RANGE)
-		    smsg("%s%4d PUT %c range",
-				  pfx, current, iptr->isn_arg.put.put_regname);
-		else
-		    smsg("%s%4d PUT %c %ld", pfx, current,
-						 iptr->isn_arg.put.put_regname,
-					     (long)iptr->isn_arg.put.put_lnum);
-		break;
+
 	    case ISN_CMDMOD:
 		{
 		    char_u  *buf;
@@ -7870,4 +7846,5 @@
     return OK;
 }
 
+
 #endif // FEAT_EVAL
diff --git a/src/vim9instr.c b/src/vim9instr.c
index 4b1de2b..86fddd9 100644
--- a/src/vim9instr.c
+++ b/src/vim9instr.c
@@ -2188,17 +2188,15 @@
 }
 
 /*
- * Generate an ISN_PUT or ISN_IPUT instruction depending on fixindent.
+ * Generate an ISN_PUT instruction.
  */
     int
-generate_PUT(cctx_T *cctx, int regname, linenr_T lnum, int fixindent)
+generate_PUT(cctx_T *cctx, int regname, linenr_T lnum)
 {
     isn_T	*isn;
 
     RETURN_OK_IF_SKIP(cctx);
-    isn = (fixindent) ? generate_instr(cctx, ISN_IPUT) :
-			generate_instr(cctx, ISN_PUT);
-    if (isn == NULL)
+    if ((isn = generate_instr(cctx, ISN_PUT)) == NULL)
 	return FAIL;
     isn->isn_arg.put.put_regname = regname;
     isn->isn_arg.put.put_lnum = lnum;
