diff --git a/src/testdir/test87.in b/src/testdir/test87.in
index 1223ca9..6b89117 100644
--- a/src/testdir/test87.in
+++ b/src/testdir/test87.in
@@ -5,8 +5,8 @@
 :set noswapfile
 :if !has('python3') | e! test.ok | wq! test.out | endif
 :lang C
-:py3 import vim
 :fun Test()
+:py3 import vim
 :let l = []
 :py3 l=vim.bindeval('l')
 :py3 f=vim.bindeval('function("strlen")')
@@ -51,6 +51,9 @@
 :  $put =string(key) . ' : ' . string(Val)
 :  unlet key Val
 :endfor
+:py3 del dk
+:py3 del di
+:py3 del dv
 :"
 :" removing items with del
 :py3 del l[2]
@@ -169,12 +172,12 @@
 :unlockvar! l
 :"
 :" Function calls
-:function New(...)
-:return ['NewStart']+a:000+['NewEnd']
-:endfunction
-:function DictNew(...) dict
-:return ['DictNewStart']+a:000+['DictNewEnd', self]
-:endfunction
+:fun New(...)
+:   return ['NewStart']+a:000+['NewEnd']
+:endfun
+:fun DictNew(...) dict
+:   return ['DictNewStart']+a:000+['DictNewEnd', self]
+:endfun
 :let l=[function('New'), function('DictNew')]
 :py3 l=vim.bindeval('l')
 :py3 l.extend(list(l[0](1, 2, 3)))
@@ -204,7 +207,8 @@
 :   $put ='[0.0, 0.0]'
 :endif
 :let messages=[]
-:py3 <<EOF
+:delfunction DictNew
+py3 <<EOF
 d=vim.bindeval('{}')
 m=vim.bindeval('messages')
 def em(expr, g=globals(), l=locals()):
@@ -213,15 +217,17 @@
     except Exception as e:
         m.extend([e.__class__.__name__])
 
-em('d["abc"]')
-em('d["abc"]="\\0"')
-em('d["abc"]=vim')
+em('d["abc1"]')
+em('d["abc1"]="\\0"')
+em('d["abc1"]=vim')
 em('d[""]=1')
 em('d["a\\0b"]=1')
 em('d[b"a\\0b"]=1')
 
-em('d.pop("abc")')
+em('d.pop("abc1")')
 em('d.popitem()')
+del em
+del m
 EOF
 :$put =messages
 :unlet messages
@@ -233,8 +239,8 @@
 :    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';')
 :    $put =toput
 :endfor
-:silent! let d.abc=1
-:silent! let dl.abc=1
+:silent! let d.abc2=1
+:silent! let dl.abc3=1
 :py3 d.locked=True
 :py3 dl.locked=False
 :silent! let d.def=1
@@ -300,12 +306,15 @@
             time.sleep(0.1)
 
 t = T()
+del T
 t.start()
 EOF
 :sleep 1
 :py3 t.running = False
 :py3 t.join()
 :py3 l[0] = t.t > 8  # check if the background thread is working
+:py3 del time
+:py3 del threading
 :$put =string(l)
 :"
 :" settrace
@@ -326,12 +335,14 @@
 EOF
 :py3 sys.settrace(traceit)
 :py3 trace_main()
+:py3 del traceit
+:py3 del trace_main
 :py3 sys.settrace(None)
 :$put =string(l)
 :"
 :" Vars
 :let g:foo = 'bac'
-:let w:abc = 'def'
+:let w:abc3 = 'def'
 :let b:baz = 'bar'
 :let t:bar = 'jkl'
 :try
@@ -340,7 +351,7 @@
 :  put =py3eval('vim.vvars[''exception'']')
 :endtry
 :put =py3eval('vim.vars[''foo'']')
-:put =py3eval('vim.current.window.vars[''abc'']')
+:put =py3eval('vim.current.window.vars[''abc3'']')
 :put =py3eval('vim.current.buffer.vars[''baz'']')
 :put =py3eval('vim.current.tabpage.vars[''bar'']')
 :"
@@ -388,16 +399,16 @@
         vim.command('let exc=' + repr(e.__class__.__name__))
         return 0
 EOF
-:function E(s)
+:fun E(s)
 :   python3 e(vim.eval('a:s'))
-:endfunction
-:function Ev(s)
+:endfun
+:fun Ev(s)
 :   let r=py3eval('ev(vim.eval("a:s"))')
 :   if exists('exc')
 :       throw exc
 :   endif
 :   return r
-:endfunction
+:endfun
 :py3 gopts1=vim.options
 :py3 wopts1=vim.windows[2].options
 :py3 wopts2=vim.windows[0].options
@@ -412,7 +423,7 @@
 :let lst+=[['operatorfunc',   'A',   'B',   'C',   2,      0,    1,      0    ]]
 :let lst+=[['number',         0,     1,     1,     0,      1,    0,      1    ]]
 :let lst+=[['numberwidth',    2,     3,     5,     -100,   0,    0,      1    ]]
-:let lst+=[['colorcolumn',    '+1',  '+2',  '+3',  'abc',  0,    0,      1    ]]
+:let lst+=[['colorcolumn',    '+1',  '+2',  '+3',  'abc4',  0,    0,      1    ]]
 :let lst+=[['statusline',     '1',   '2',   '4',   0,      0,    1,      1    ]]
 :let lst+=[['autoindent',     0,     1,     1,     2,      1,    0,      2    ]]
 :let lst+=[['shiftwidth',     0,     2,     1,     3,      0,    0,      2    ]]
@@ -462,10 +473,27 @@
 :   endfor
 :   call RecVars(oname)
 :endfor
+:delfunction RecVars
+:delfunction E
+:delfunction Ev
+:py3 del ev
+:py3 del e
 :only
 :for buf in g:bufs[1:]
 :   execute 'bwipeout!' buf
 :endfor
+:py3 del gopts1
+:py3 del wopts1
+:py3 del wopts2
+:py3 del wopts3
+:py3 del bopts1
+:py3 del bopts2
+:py3 del bopts3
+:py3 del oval1
+:py3 del oval2
+:py3 del oval3
+:py3 del oname
+:py3 del invval
 :"
 :" Test buffer object
 :vnew
@@ -485,7 +513,7 @@
 # Tests BufferAppend and BufferItem
 cb.append(b[0])
 # Tests BufferSlice and BufferAssSlice
-cb.append('abc') # Will be overwritten
+cb.append('abc5') # Will be overwritten
 cb[-1:] = b[:-2]
 # Test BufferLength and BufferAssSlice
 cb.append('def') # Will not be overwritten
@@ -509,13 +537,14 @@
 cb.append(b.name[-11:].replace(os.path.sep, '/'))
 cb.name = old_name
 cb.append(cb.name[-17:].replace(os.path.sep, '/'))
+del old_name
 # Test CheckBuffer
 for _b in vim.buffers:
     if _b is not cb:
         vim.command('bwipeout! ' + str(_b.number))
 del _b
 cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid)))
-for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")'):
+for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc6")'):
     try:
         exec(expr)
     except vim.error:
@@ -525,6 +554,7 @@
         # Should not happen in any case
         cb.append('No exception for ' + expr)
 vim.command('cd .')
+del b
 EOF
 :"
 :" Test vim.buffers object
@@ -558,6 +588,7 @@
     # Check indexing: vim.buffers[number].number == number
     cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + repr(b))
     prevnum = b.number
+del prevnum
 
 cb.append(str(len(vim.buffers)))
 
@@ -581,6 +612,8 @@
     next(i4)
 except StopIteration:
     cb.append('StopIteration')
+del i4
+del bnums
 EOF
 :"
 :" Test vim.{tabpage,window}list and vim.{tabpage,window} objects
@@ -622,7 +655,11 @@
                     raise ValueError
             except Exception as e:
                 cb.append('!!!!!! Error while getting attribute ' + attr + ': ' + e.__class__.__name__)
+        del aval
+        del attr
         w.cursor = (len(w.buffer), 0)
+del W
+del Cursor
 cb.append('Number of windows in current tab page: ' + str(len(vim.windows)))
 if list(vim.windows) != list(vim.current.tabpage.windows):
     cb.append('!!!!!! Windows differ')
@@ -635,6 +672,7 @@
 cb.append('Current tab page: ' + repr(vim.current.tabpage))
 cb.append('Current window: ' + repr(vim.current.window) + ': ' + H(vim.current.window) + ' is ' + H(vim.current.tabpage.window))
 cb.append('Current buffer: ' + repr(vim.current.buffer) + ': ' + H(vim.current.buffer) + ' is ' + H(vim.current.window.buffer)+ ' is ' + H(vim.current.tabpage.window.buffer))
+del H
 # Assigning: fails
 try:
     vim.current.window = vim.tabpages[0].window
@@ -646,6 +684,7 @@
         setattr(vim.current, attr, None)
     except TypeError:
         cb.append('Type error at assigning None to vim.current.' + attr)
+del attr
 
 # Assigning: success
 vim.current.tabpage = vim.tabpages[-2]
@@ -661,8 +700,13 @@
 for b in vim.buffers:
     if b is not cb:
         vim.command('bwipeout! ' + str(b.number))
+del b
 cb.append('w.valid: ' + repr([w.valid for w in ws]))
 cb.append('t.valid: ' + repr([t.valid for t in ts]))
+del w
+del t
+del ts
+del ws
 EOF
 :tabonly!
 :only!
@@ -681,6 +725,8 @@
     ('vim.current.tabpage',              'TabPage'),
 ):
     cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
+del expr
+del attr
 EOF
 :"
 :" Test __dir__() method
@@ -706,15 +752,15 @@
 :$put =string(py3eval('vim.Dictionary(a=1)'))
 :$put =string(py3eval('vim.Dictionary(((''a'', 1),))'))
 :$put =string(py3eval('vim.List()'))
-:$put =string(py3eval('vim.List(iter(''abc''))'))
+:$put =string(py3eval('vim.List(iter(''abc7''))'))
 :$put =string(py3eval('vim.Function(''tr'')'))
 :"
 :" Test stdout/stderr
 :redir => messages
-:py3 sys.stdout.write('abc') ; sys.stdout.write('def')
-:py3 sys.stderr.write('abc') ; sys.stderr.write('def')
-:py3 sys.stdout.writelines(iter('abc'))
-:py3 sys.stderr.writelines(iter('abc'))
+:py3 sys.stdout.write('abc8') ; sys.stdout.write('def')
+:py3 sys.stderr.write('abc9') ; sys.stderr.write('def')
+:py3 sys.stdout.writelines(iter('abcA'))
+:py3 sys.stderr.writelines(iter('abcB'))
 :redir END
 :$put =string(substitute(messages, '\d\+', '', 'g'))
 :" Test subclassing
@@ -735,7 +781,7 @@
         return [super(DupList, self).__getitem__(idx)] * 2
 
 dl = DupList()
-dl2 = DupList(iter('abc'))
+dl2 = DupList(iter('abcC'))
 dl.extend(dl2[0])
 
 class DupFun(vim.Function):
@@ -748,6 +794,19 @@
 :$put =string(py3eval('dl'))
 :$put =string(py3eval('dl2'))
 :$put =string(py3eval('df(2)'))
+:$put =string(py3eval('dl') is# py3eval('dl'))
+:$put =string(py3eval('dd') is# py3eval('dd'))
+:$put =string(py3eval('df'))
+:delfunction Put
+py3 << EOF
+del DupDict
+del DupList
+del DupFun
+del dd
+del dl
+del dl2
+del df
+EOF
 :"
 :" Test chdir
 py3 << EOF
@@ -761,6 +820,7 @@
 os.chdir('testdir')
 cb.append(str(fnamemodify('.', ':p:h:t')))
 cb.append(vim.eval('@%'))
+del fnamemodify
 EOF
 :"
 :" Test errors
@@ -784,11 +844,11 @@
         cb.append(expr + '::' + repr((e.__class__, e)))
 
 d = vim.Dictionary()
-ned = vim.Dictionary(foo='bar', baz='abc')
+ned = vim.Dictionary(foo='bar', baz='abcD')
 dl = vim.Dictionary(a=1)
 dl.locked = True
 l = vim.List()
-ll = vim.List('abc')
+ll = vim.List('abcE')
 ll.locked = True
 f = vim.Function('string')
 fd = vim.Function('F')
@@ -825,11 +885,11 @@
     # pydict_to_tv
     stringtochars_test(expr % '{%s : 1}')
     if recurse:
-        convertfrompyobject_test(expr % '{"abc" : %s}', False)
+        convertfrompyobject_test(expr % '{"abcF" : %s}', False)
     # pymap_to_tv
     stringtochars_test(expr % 'Mapping({%s : 1})')
     if recurse:
-        convertfrompyobject_test(expr % 'Mapping({"abc" : %s})', False)
+        convertfrompyobject_test(expr % 'Mapping({"abcG" : %s})', False)
     # pyseq_to_tv
     iter_test(expr)
     return subexpr_test(expr, 'ConvertFromPyObject', (
@@ -872,7 +932,7 @@
         raise NotImplementedError
 
     def keys(self):
-        return list("abc")
+        return list("abcH")
 
 class FailingMapping(object):
     def __getitem__(self):
@@ -914,7 +974,7 @@
 ee('vim.strwidth(1)')
 cb.append("> Dictionary")
 cb.append(">> DictionaryConstructor")
-ee('vim.Dictionary("abc")')
+ee('vim.Dictionary("abcI")')
 ##! Not checked: py_dict_alloc failure
 cb.append(">> DictionarySetattr")
 ee('del d.locked')
@@ -929,6 +989,7 @@
 ee('dl.pop("a")')
 cb.append(">> DictionaryIterNext")
 ee('for i in ned: ned["a"] = 1')
+del i
 cb.append(">> DictionaryAssItem")
 ee('dl["b"] = 1')
 stringtochars_test('d[%s] = 1')
@@ -958,7 +1019,7 @@
 ee('ll[1] = 2')
 ee('l[1000] = 3')
 cb.append(">> ListAssSlice")
-ee('ll[1:100] = "abc"')
+ee('ll[1:100] = "abcJ"')
 iter_test('l[:] = %s')
 convertfrompyobject_test('l[:] = [%s]')
 cb.append(">> ListConcatInPlace")
@@ -989,8 +1050,8 @@
 ee('vim.current.window.buffer = 0')
 ee('vim.current.window.cursor = (100000000, 100000000)')
 ee('vim.current.window.cursor = True')
-ee('vim.current.window.height = "abc"')
-ee('vim.current.window.width  = "abc"')
+ee('vim.current.window.height = "abcK"')
+ee('vim.current.window.width  = "abcL"')
 ee('vim.current.window.xxxxxx = True')
 cb.append("> WinList")
 cb.append(">> WinListItem")
@@ -1000,7 +1061,7 @@
 ee('vim.current.buffer[0] = "\\na"')
 cb.append(">> SetBufferLine (indirect)")
 ee('vim.current.buffer[0] = True')
-cb.append(">> SetBufferLines (indirect)")
+cb.append(">> SetBufferLineList (indirect)")
 ee('vim.current.buffer[:] = True')
 ee('vim.current.buffer[:] = ["\\na", "bc"]')
 cb.append(">> InsertBufferLines (indirect)")
@@ -1018,7 +1079,7 @@
 ee('vim.current.buffer.xxx = True')
 cb.append(">> BufferMark")
 ee('vim.current.buffer.mark(0)')
-ee('vim.current.buffer.mark("abc")')
+ee('vim.current.buffer.mark("abcM")')
 ee('vim.current.buffer.mark("!")')
 cb.append(">> BufferRange")
 ee('vim.current.buffer.range(1, 2, 3)')
@@ -1035,7 +1096,28 @@
 ee('vim.current.window = True')
 ee('vim.current.tabpage = True')
 ee('vim.current.xxx = True')
+del d
+del ned
+del dl
+del l
+del ll
+del f
+del fd
+del fdel
+del subexpr_test
+del stringtochars_test
+del Mapping
+del convertfrompyobject_test
+del convertfrompymapping_test
+del iter_test
+del FailingTrue
+del FailingIter
+del FailingIterNext
+del FailingMapping
+del FailingMappingKey
+del FailingList
 EOF
+:delfunction F
 :"
 :" Test import
 py3 << EOF
@@ -1049,6 +1131,10 @@
 cb.append(before.dir)
 import after
 cb.append(after.dir)
+del before
+del after
+del d
+del ddir
 EOF
 :"
 :" Test exceptions
@@ -1057,18 +1143,48 @@
 :endfun
 py3 << EOF
 Exe = vim.bindeval('function("Exe")')
-ee('vim.command("throw \'abc\'")')
+ee('vim.command("throw \'abcN\'")')
 ee('Exe("throw \'def\'")')
 ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")')
 ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")')
 ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")')
 ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")')
+del Exe
+EOF
+:delfunction Exe
+:"
+:" Cleanup
+py3 << EOF
+del cb
+del ee
+del sys
+del os
+del vim
 EOF
 :endfun
 :"
-:call Test()
+:fun RunTest()
+:let checkrefs = !empty($PYTHONDUMPREFS)
+:let start = getline(1, '$')
+:for i in range(checkrefs ? 10 : 1)
+:   if i != 0
+:       %d _
+:       call setline(1, start)
+:   endif
+:   call Test()
+:   if i == 0
+:       let result = getline(1, '$')
+:   endif
+:endfor
+:if checkrefs
+:   %d _
+:   call setline(1, result)
+:endif
+:endfun
 :"
-:delfunc Test
+:call RunTest()
+:delfunction RunTest
+:delfunction Test
 :call garbagecollect(1)
 :"
 :/^start:/,$wq! test.out
