diff --git a/src/testdir/shared.vim b/src/testdir/shared.vim
index 8db388a..eb43cf4 100644
--- a/src/testdir/shared.vim
+++ b/src/testdir/shared.vim
@@ -139,7 +139,7 @@
     endif
     sleep 10m
   endfor
-  return timeout
+  throw 'WaitFor() timed out after ' . timeout . ' msec'
 endfunc
 
 " Wait for up to a given milliseconds.
diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim
index 9dba0c4..5709bf8 100644
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -709,7 +709,7 @@
     call ch_sendraw(handle, "double this\n")
     call ch_sendraw(handle, "quit\n")
     sp pipe-output
-    call WaitFor('line("$") >= 6 && g:Ch_bufClosed == "yes"')
+    call WaitFor('line("$") == ' . len(expected) . ' && g:Ch_bufClosed == "yes"')
     call assert_equal(expected, getline(1, '$'))
     if a:nomod
       call assert_equal(0, &modifiable)
@@ -804,7 +804,7 @@
     call ch_sendraw(handle, "doubleerr this\n")
     call ch_sendraw(handle, "quit\n")
     sp pipe-err
-    call WaitFor('line("$") >= 5')
+    call WaitFor('line("$") == ' . len(expected))
     call assert_equal(expected, getline(1, '$'))
     if a:nomod
       call assert_equal(0, &modifiable)
@@ -1130,12 +1130,14 @@
   let job = job_start([s:python, '-c', 
         \ 'import sys; [sys.stdout.write(".") and sys.stdout.flush() for _ in range(10000)]'], options)
   call assert_equal("run", job_status(job))
-  call WaitFor('len(join(getline(2,line("$")),"") >= 10000')
+  call WaitFor('len(join(getline(1, "$"), "")) >= 10000', 3000)
   try
-    for line in getline(2, '$')
-      let line = substitute(line, '^\.*', '', '')
-      call assert_equal('', line)
+    let totlen = 0
+    for line in getline(1, '$')
+      call assert_equal('', substitute(line, '^\.*', '', ''))
+      let totlen += len(line)
     endfor
+    call assert_equal(10000, totlen)
   finally
     call job_stop(job)
     bwipe!
@@ -1300,24 +1302,25 @@
   endif
   call ch_log('Test_close_and_exit_cb')
 
-  let dict = {'ret': {}}
-  func dict.close_cb(ch) dict
+  let g:retdict = {'ret': {}}
+  func g:retdict.close_cb(ch) dict
     let self.ret['close_cb'] = job_status(ch_getjob(a:ch))
   endfunc
-  func dict.exit_cb(job, status) dict
+  func g:retdict.exit_cb(job, status) dict
     let self.ret['exit_cb'] = job_status(a:job)
   endfunc
 
   let g:job = job_start('echo', {
-        \ 'close_cb': dict.close_cb,
-        \ 'exit_cb': dict.exit_cb,
+        \ 'close_cb': g:retdict.close_cb,
+        \ 'exit_cb': g:retdict.exit_cb,
         \ })
   call assert_equal('run', job_status(g:job))
   unlet g:job
-  call WaitFor('len(dict.ret) >= 2')
-  call assert_equal(2, len(dict.ret))
-  call assert_match('^\%(dead\|run\)', dict.ret['close_cb'])
-  call assert_equal('dead', dict.ret['exit_cb'])
+  call WaitFor('len(g:retdict.ret) >= 2')
+  call assert_equal(2, len(g:retdict.ret))
+  call assert_match('^\%(dead\|run\)', g:retdict.ret['close_cb'])
+  call assert_equal('dead', g:retdict.ret['exit_cb'])
+  unlet g:retdict
 endfunc
 
 """"""""""
@@ -1547,13 +1550,14 @@
     return
   endif
 
-  let job = job_start([s:python, '-c', 'import time;time.sleep(10)'])
+  let g:job = job_start([s:python, '-c', 'import time;time.sleep(10)'])
   try
-    call job_stop(job)
-    call WaitFor('"dead" == job_status(job)')
-    call assert_equal('dead', job_status(job))
+    call job_stop(g:job)
+    call WaitFor('"dead" == job_status(g:job)')
+    call assert_equal('dead', job_status(g:job))
   finally
-    call job_stop(job, 'kill')
+    call job_stop(g:job, 'kill')
+    unlet g:job
   endtry
 endfunc
 
@@ -1585,7 +1589,7 @@
   split testout
   1,$delete
   call job_start('cat test_channel.vim', {'out_io': 'buffer', 'out_name': 'testout'})
-  call WaitFor('line("$") > g:linecount')
+  call WaitFor('line("$") >= g:linecount')
   call assert_inrange(g:linecount, g:linecount + 1, line('$'))
   bwipe!
 endfunc
diff --git a/src/testdir/test_netbeans.vim b/src/testdir/test_netbeans.vim
index 7bffeb2..4ac03db 100644
--- a/src/testdir/test_netbeans.vim
+++ b/src/testdir/test_netbeans.vim
@@ -27,7 +27,7 @@
 
   " Opening README.txt will result in a setDot command
   call WaitFor('len(readfile("Xnetbeans")) > 4')
-  call WaitFor('getcurpos()[1] == 2')
+  call WaitFor('getcurpos()[1] == 3')
   let pos = getcurpos()
   call assert_equal(3, pos[1])
   call assert_equal(20, pos[2])
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 95c1b98..967cd8f 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -705,7 +705,7 @@
 
   enew
   let buf = term_start(cmd, {'curwin': bufnr('')})
-  let job = term_getjob(buf)
+  let g:job = term_getjob(buf)
   call term_wait(buf, 50)
 
   " ascii + composing
@@ -742,8 +742,9 @@
   call assert_equal("\u00a0\u0308", l[3].chars)
 
   call term_sendkeys(buf, "exit\r")
-  call WaitFor('job_status(job) == "dead"')
-  call assert_equal('dead', job_status(job))
+  call WaitFor('job_status(g:job) == "dead"')
+  call assert_equal('dead', job_status(g:job))
   bwipe!
+  unlet g:job
   let &encoding = save_enc
 endfunc
diff --git a/src/version.c b/src/version.c
index a46fb77..5230212 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1245,
+/**/
     1244,
 /**/
     1243,
