diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt
index a66fbb3..7fb6a59 100644
--- a/runtime/doc/gui.txt
+++ b/runtime/doc/gui.txt
@@ -1,4 +1,4 @@
-*gui.txt*       For Vim version 8.0.  Last change: 2017 Aug 27
+*gui.txt*       For Vim version 8.0.  Last change: 2017 Sep 16
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -784,10 +784,31 @@
 from the main menu bar.  You must then use the |:popup| or |:tearoff| command
 to display it.
 
+							*window-toolbar*
+Each window can have a local toolbar.  This uses the first line of the window,
+thus reduces the space for the text by one line.
+
+Only text can be used.  When using Unicode special characters can be used to
+make the items look like icons.
+
+If the items do not fit then the last ones cannot be used.  The toolbar does
+not wrap.
+
+Example for debugger tools: >
+	amenu 1.10 WinBar.Step :Step<CR>
+	amenu 1.20 WinBar.Next :Next<CR>
+	amenu 1.30 WinBar.Finish :Finish<CR>
+	amenu 1.40 WinBar.Cont :Continue<CR>
+<
+The window toolbar uses the ToolbarLine and ToolbarButton highlight groups.
+
 							*popup-menu*
 In the Win32, GTK+, Motif, Athena and Photon GUI, you can define the
 special menu "PopUp".  This is the menu that is displayed when the right mouse
 button is pressed, if 'mousemodel' is set to popup or popup_setpos.
+Example: >
+    nnoremenu 1.40 PopUp.&Paste	"+gP
+    menu PopUp
 
 
 5.3 Showing What Menus Are Mapped To			*showing-menus*
diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt
index aad8e4a..bce1d6f 100644
--- a/runtime/doc/terminal.txt
+++ b/runtime/doc/terminal.txt
@@ -1,4 +1,4 @@
-*terminal.txt*	For Vim version 8.0.  Last change: 2017 Sep 14
+*terminal.txt*	For Vim version 8.0.  Last change: 2017 Sep 17
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -226,7 +226,7 @@
 contents of the terminal window is under control of Vim, the job output is
 suspended.  CTRL-\ CTRL-N does the same.
 
-Terminal-Job mode is where |tmap| mappings are applied. Keys sent by
+Terminal-Job mode is where |:tmap| mappings are applied. Keys sent by
 |term_sendkeys()| are not subject to tmap, but keys from |feedkeys()| are.
 
 							*E946*
@@ -234,7 +234,7 @@
 commands, Visually mark text, yank text, etc.  But you cannot change the
 contents of the buffer.  The commands that would start insert mode, such as
 'i' and 'a', return to Terminal-Job mode.  The window will be updated to show
-the contents of the terminal.
+the contents of the terminal. |:startinsert| is ineffective.
 
 In Terminal-Normal mode the statusline and window title show "(Terminal)".  If
 the job ends while in Terminal-Normal mode this changes to
@@ -372,6 +372,14 @@
  :Finish    execute the gdb "finish" command
  :Continue  execute the gdb "continue" command
 
+The plugin adds a window toolbar with these entries:
+  Step	    :Step
+  Next	    :Over
+  Finish    :Finish
+  Cont	    :Continue
+  Eval	    :Evaluate
+This way you can use the mouse to perform the most common commands.
+
 
 Inspecting variables ~
 
diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
index ffd53fa..d23a883 100644
--- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
@@ -104,6 +104,11 @@
   call win_gotoid(s:gdbwin)
 
   let s:breakpoints = {}
+
+  augroup TermDebug
+    au BufRead * call s:BufRead()
+    au BufUnload * call s:BufUnloaded()
+  augroup END
 endfunc
 
 func s:EndDebug(job, status)
@@ -120,6 +125,8 @@
   if s:save_columns > 0
     let &columns = s:save_columns
   endif
+
+  au! TermDebug
 endfunc
 
 " Handle a message received from gdb on the GDB/MI interface.
@@ -132,7 +139,7 @@
       let msg = msg[1:]
     endif
     if msg != ''
-      if msg =~ '^\*\(stopped\|running\)'
+      if msg =~ '^\(\*stopped\|\*running\|=thread-selected\)'
 	call s:HandleCursor(msg)
       elseif msg =~ '^\^done,bkpt=' || msg =~ '^=breakpoint-created,'
 	call s:HandleNewBreakpoint(msg)
@@ -161,6 +168,14 @@
 
   " TODO: can the K mapping be restored?
   nnoremap K :Evaluate<CR>
+
+  if has('menu')
+    amenu WinBar.Step :Step<CR>
+    amenu WinBar.Next :Over<CR>
+    amenu WinBar.Finish :Finish<CR>
+    amenu WinBar.Cont :Continue<CR>
+    amenu WinBar.Eval :Evaluate<CR>
+  endif
 endfunc
 
 " Delete installed debugger commands in the current window.
@@ -176,6 +191,15 @@
   delcommand Program
 
   nunmap K
+
+  if has('menu')
+    aunmenu WinBar.Step
+    aunmenu WinBar.Next
+    aunmenu WinBar.Finish
+    aunmenu WinBar.Cont
+    aunmenu WinBar.Eval
+  endif
+
   exe 'sign unplace ' . s:pc_id
   for key in keys(s:breakpoints)
     exe 'sign unplace ' . (s:break_id + key)
@@ -232,7 +256,15 @@
 
 " Handle the result of data-evaluate-expression
 func s:HandleEvaluate(msg)
-  echomsg '"' . s:evalexpr . '": ' . substitute(a:msg, '.*value="\(.*\)"', '\1', '')
+  let value = substitute(a:msg, '.*value="\(.*\)"', '\1', '')
+  let value = substitute(value, '\\"', '"', 'g')
+  echomsg '"' . s:evalexpr . '": ' . value
+
+  if s:evalexpr[0] != '*' && value =~ '^0x' && value !~ '"$'
+    " Looks like a pointer, also display what it points to.
+    let s:evalexpr = '*' . s:evalexpr
+    call term_sendkeys(s:commbuf, '-data-evaluate-expression "' . s:evalexpr . "\"\r")
+  endif
 endfunc
 
 " Handle an error.
@@ -247,10 +279,10 @@
 
   if win_gotoid(s:startwin)
     let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '')
-    if a:msg =~ '^\*stopped' && filereadable(fname)
+    if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname)
       let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '')
       if lnum =~ '^[0-9]*$'
-	if expand('%:h') != fname
+	if expand('%:p') != fnamemodify(fname, ':p')
 	  if &modified
 	    " TODO: find existing window
 	    exe 'split ' . fnameescape(fname)
@@ -260,7 +292,7 @@
 	  endif
 	endif
 	exe lnum
-	exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fnameescape(fname)
+	exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fname
 	setlocal signcolumn=yes
       endif
     else
@@ -288,11 +320,17 @@
 
   let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '')
   let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '')
-
-  exe 'sign place ' . (s:break_id + nr) . ' line=' . lnum . ' name=debugBreakpoint file=' . fnameescape(fname)
-
   let entry['fname'] = fname
   let entry['lnum'] = lnum
+
+  if bufloaded(fname)
+    call s:PlaceSign(nr, entry)
+  endif
+endfunc
+
+func s:PlaceSign(nr, entry)
+  exe 'sign place ' . (s:break_id + a:nr) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint file=' . a:entry['fname']
+  let a:entry['placed'] = 1
 endfunc
 
 " Handle deleting a breakpoint
@@ -302,6 +340,33 @@
   if nr == 0
     return
   endif
-  exe 'sign unplace ' . (s:break_id + nr)
-  unlet s:breakpoints[nr]
+  if has_key(s:breakpoints, nr)
+    let entry = s:breakpoints[nr]
+    if has_key(entry, 'placed')
+      exe 'sign unplace ' . (s:break_id + nr)
+      unlet entry['placed']
+    endif
+    unlet s:breakpoints[nr]
+  endif
 endfunc
+
+" Handle a BufRead autocommand event: place any signs.
+func s:BufRead()
+  let fname = expand('<afile>:p')
+  for [nr, entry] in items(s:breakpoints)
+    if entry['fname'] == fname
+      call s:PlaceSign(nr, entry)
+    endif
+  endfor
+endfunc
+
+" Handle a BufUnloaded autocommand event: unplace any signs.
+func s:BufUnloaded()
+  let fname = expand('<afile>:p')
+  for [nr, entry] in items(s:breakpoints)
+    if entry['fname'] == fname
+      let entry['placed'] = 0
+    endif
+  endfor
+endfunc
+
