diff --git a/7.0.044 b/7.0.044
new file mode 100644
index 0000000..8b0f011
--- /dev/null
+++ b/7.0.044
@@ -0,0 +1,211 @@
+To: vim-dev@vim.org
+Subject: Patch 7.0.044
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.044
+Problem:    Perl: setting a buffer line in another buffer may result in
+	    changing the current buffer.
+Solution:   Properly change to the buffer to be changed.
+Files:	    src/if_perl.xs
+
+
+*** ../vim-7.0.043/src/if_perl.xs	Tue Mar  7 00:18:16 2006
+--- src/if_perl.xs	Thu Jun 22 21:22:18 2006
+***************
+*** 1056,1062 ****
+      int i;
+      long lnum;
+      char *line;
+-     buf_T *savebuf;
+      PPCODE:
+      if (buf_valid(vimbuf))
+      {
+--- 1056,1061 ----
+***************
+*** 1069,1082 ****
+  	    line = SvPV(ST(i),PL_na);
+  	    if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
+  	    {
+! 		savebuf = curbuf;
+  		curbuf = vimbuf;
+  		if (u_savesub(lnum) == OK)
+  		{
+  		    ml_replace(lnum, (char_u *)line, TRUE);
+  		    changed_bytes(lnum, 0);
+  		}
+! 		curbuf = savebuf;
+  	    }
+  	}
+      }
+--- 1068,1098 ----
+  	    line = SvPV(ST(i),PL_na);
+  	    if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
+  	    {
+!     #ifdef FEAT_AUTOCMD
+! 		aco_save_T	aco;
+! 
+! 		/* set curwin/curbuf for "vimbuf" and save some things */
+! 		aucmd_prepbuf(&aco, vimbuf);
+!     #else
+! 		buf_T	*save_curbuf = curbuf;
+! 
+  		curbuf = vimbuf;
++ 		curwin->w_buffer = vimbuf;
++     #endif
+  		if (u_savesub(lnum) == OK)
+  		{
+  		    ml_replace(lnum, (char_u *)line, TRUE);
+  		    changed_bytes(lnum, 0);
+  		}
+! 
+!     #ifdef FEAT_AUTOCMD
+! 		/* restore curwin/curbuf and a few other things */
+! 		aucmd_restbuf(&aco);
+! 		/* Careful: autocommands may have made "vimbuf" invalid! */
+!     #else
+! 		curwin->w_buffer = save_curbuf;
+! 		curbuf = save_curbuf;
+!     #endif
+  	    }
+  	}
+      }
+***************
+*** 1087,1093 ****
+  
+      PREINIT:
+      long i, lnum = 0, count = 0;
+-     buf_T *savebuf;
+      PPCODE:
+      if (buf_valid(vimbuf))
+      {
+--- 1103,1108 ----
+***************
+*** 1114,1129 ****
+  	    {
+  		if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
+  		{
+! 		    savebuf = curbuf;
+  		    curbuf = vimbuf;
+  		    if (u_savedel(lnum, 1) == OK)
+  		    {
+  			ml_delete(lnum, 0);
+  			deleted_lines_mark(lnum, 1L);
+! 			if (savebuf == curbuf)
+  			    check_cursor();
+  		    }
+! 		    curbuf = savebuf;
+  		    update_curbuf(VALID);
+  		}
+  	    }
+--- 1129,1159 ----
+  	    {
+  		if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
+  		{
+! 		    buf_T	*save_curbuf = curbuf;
+!     #ifdef FEAT_AUTOCMD
+! 		    aco_save_T	aco;
+! 
+! 		    /* set curwin/curbuf for "vimbuf" and save some things */
+! 		    aucmd_prepbuf(&aco, vimbuf);
+!     #else
+  		    curbuf = vimbuf;
++ 		    curwin->w_buffer = vimbuf;
++     #endif
+  		    if (u_savedel(lnum, 1) == OK)
+  		    {
+  			ml_delete(lnum, 0);
+  			deleted_lines_mark(lnum, 1L);
+! 			if (save_curbuf == curbuf)
+  			    check_cursor();
+  		    }
+!     #ifdef FEAT_AUTOCMD
+! 		    /* restore curwin/curbuf and a few other things */
+! 		    aucmd_restbuf(&aco);
+! 		    /* Careful: autocommands may have made "vimbuf" invalid! */
+!     #else
+! 		    curwin->w_buffer = save_curbuf;
+! 		    curbuf = save_curbuf;
+!     #endif
+  		    update_curbuf(VALID);
+  		}
+  	    }
+***************
+*** 1138,1144 ****
+      int		i;
+      long	lnum;
+      char	*line;
+-     buf_T	*savebuf;
+      PPCODE:
+      if (buf_valid(vimbuf))
+      {
+--- 1168,1173 ----
+***************
+*** 1151,1164 ****
+  	    line = SvPV(ST(i),PL_na);
+  	    if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
+  	    {
+! 		savebuf = curbuf;
+  		curbuf = vimbuf;
+  		if (u_inssub(lnum + 1) == OK)
+  		{
+  		    ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
+  		    appended_lines_mark(lnum, 1L);
+  		}
+! 		curbuf = savebuf;
+  		update_curbuf(VALID);
+  	    }
+  	}
+--- 1180,1210 ----
+  	    line = SvPV(ST(i),PL_na);
+  	    if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
+  	    {
+!     #ifdef FEAT_AUTOCMD
+! 		aco_save_T	aco;
+! 
+! 		/* set curwin/curbuf for "vimbuf" and save some things */
+! 		aucmd_prepbuf(&aco, vimbuf);
+!     #else
+! 		buf_T	*save_curbuf = curbuf;
+! 
+  		curbuf = vimbuf;
++ 		curwin->w_buffer = vimbuf;
++     #endif
+  		if (u_inssub(lnum + 1) == OK)
+  		{
+  		    ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
+  		    appended_lines_mark(lnum, 1L);
+  		}
+! 
+!     #ifdef FEAT_AUTOCMD
+! 		/* restore curwin/curbuf and a few other things */
+! 		aucmd_restbuf(&aco);
+! 		/* Careful: autocommands may have made "vimbuf" invalid! */
+!     #else
+! 		curwin->w_buffer = save_curbuf;
+! 		curbuf = save_curbuf;
+!     #endif
+  		update_curbuf(VALID);
+  	    }
+  	}
+*** ../vim-7.0.043/src/version.c	Tue Aug  8 16:30:51 2006
+--- src/version.c	Tue Aug  8 16:45:40 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     44,
+  /**/
+
+-- 
+Momento mori, ergo carpe diem
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///