diff --git a/src/buffer.c b/src/buffer.c
index 5f8b1ad..50aa9e8 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -3076,6 +3076,8 @@
 	wip->wi_fpos.lnum = lnum;
 	wip->wi_fpos.col = col;
     }
+    if (win != NULL)
+	wip->wi_changelistidx = win->w_changelistidx;
     if (copy_options && win != NULL)
     {
 	// Save the window-specific option values.
@@ -3210,6 +3212,8 @@
     }
     else
 	copy_winopt(&curwin->w_allbuf_opt, &curwin->w_onebuf_opt);
+    if (wip != NULL)
+	curwin->w_changelistidx = wip->wi_changelistidx;
 
 #ifdef FEAT_FOLDING
     // Set 'foldlevel' to 'foldlevelstart' if it's not negative.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 4829673..e56b505 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -4724,6 +4724,7 @@
     int		i;
     list_T	*l;
     dict_T	*d;
+    int		changelistindex;
 
     if (rettv_list_alloc(rettv) != OK)
 	return;
@@ -4745,13 +4746,25 @@
     if (list_append_list(rettv->vval.v_list, l) == FAIL)
 	return;
     /*
-     * The current window change list index tracks only the position in the
-     * current buffer change list. For other buffers, use the change list
-     * length as the current index.
+     * The current window change list index tracks only the position for the
+     * current buffer. For other buffers use the stored index for the current
+     * window, or, if that's not available, the change list length.
      */
-    list_append_number(rettv->vval.v_list,
-	    (varnumber_T)((buf == curwin->w_buffer)
-		? curwin->w_changelistidx : buf->b_changelistlen));
+    if (buf == curwin->w_buffer)
+    {
+	changelistindex = curwin->w_changelistidx;
+    }
+    else
+    {
+	wininfo_T	*wip;
+
+	FOR_ALL_BUF_WININFO(buf, wip)
+	    if (wip->wi_win == curwin)
+		break;
+	changelistindex = wip != NULL ? wip->wi_changelistidx
+							: buf->b_changelistlen;
+    }
+    list_append_number(rettv->vval.v_list, (varnumber_T)changelistindex);
 
     for (i = 0; i < buf->b_changelistlen; ++i)
     {
diff --git a/src/structs.h b/src/structs.h
index 5ad606e..670e0d2 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -343,6 +343,7 @@
     int		wi_fold_manual;	// copy of w_fold_manual
     garray_T	wi_folds;	// clone of w_folds
 #endif
+    int		wi_changelistidx; // copy of w_changelistidx
 };
 
 /*
diff --git a/src/testdir/test_changelist.vim b/src/testdir/test_changelist.vim
index 872b87a..f429968 100644
--- a/src/testdir/test_changelist.vim
+++ b/src/testdir/test_changelist.vim
@@ -1,6 +1,28 @@
 " Tests for the changelist functionality
 
 " Tests for the getchangelist() function
+func Test_changelist_index()
+  edit Xfile1.txt
+  exe "normal iabc\<C-G>u\ndef\<C-G>u\nghi"
+  call assert_equal(3, getchangelist('%')[1])
+  " Move one step back in the changelist.
+  normal 2g;
+
+  hide edit Xfile2.txt
+  exe "normal iabcd\<C-G>u\ndefg\<C-G>u\nghij"
+  call assert_equal(3, getchangelist('%')[1])
+  " Move to the beginning of the changelist.
+  normal 99g;
+
+  " Check the changelist indices.
+  call assert_equal(0, getchangelist('%')[1])
+  call assert_equal(1, getchangelist('#')[1])
+
+  bwipe!
+  call delete('Xfile1.txt')
+  call delete('Xfile2.txt')
+endfunc
+
 func Test_getchangelist()
   bwipe!
   enew
@@ -11,6 +33,7 @@
   call writefile(['line1', 'line2', 'line3'], 'Xfile2.txt')
 
   edit Xfile1.txt
+  let buf_1 = bufnr()
   exe "normal 1Goline\<C-G>u1.1"
   exe "normal 3Goline\<C-G>u2.1"
   exe "normal 5Goline\<C-G>u3.1"
@@ -22,6 +45,7 @@
 	      \ getchangelist('%'))
 
   hide edit Xfile2.txt
+  let buf_2 = bufnr()
   exe "normal 1GOline\<C-G>u1.0"
   exe "normal 2Goline\<C-G>u2.0"
   call assert_equal([[
@@ -33,10 +57,12 @@
   call assert_equal([[
 	      \ {'lnum' : 2, 'col' : 4, 'coladd' : 0},
 	      \ {'lnum' : 4, 'col' : 4, 'coladd' : 0},
-	      \ {'lnum' : 6, 'col' : 4, 'coladd' : 0}], 3], getchangelist(2))
+	      \ {'lnum' : 6, 'col' : 4, 'coladd' : 0}], 2],
+	      \ getchangelist(buf_1))
   call assert_equal([[
 	      \ {'lnum' : 1, 'col' : 6, 'coladd' : 0},
-	      \ {'lnum' : 3, 'col' : 6, 'coladd' : 0}], 2], getchangelist(3))
+	      \ {'lnum' : 3, 'col' : 6, 'coladd' : 0}], 2],
+	      \ getchangelist(buf_2))
 
   bwipe!
   call delete('Xfile1.txt')
diff --git a/src/version.c b/src/version.c
index fdb2e46..57e1fed 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4731,
+/**/
     4730,
 /**/
     4729,
