diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index 82834e4..78dd202 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -39,7 +39,7 @@
 
 func Test_proptype_buf()
   let bufnr = bufnr('')
-  call prop_type_add('comment', {'bufnr': bufnr, 'highlight': 'Directory', 'priority': 123, 'start_incl': 1, 'end_incl': 1})
+  call prop_type_add('comment', #{bufnr: bufnr, highlight: 'Directory', priority: 123, start_incl: 1, end_incl: 1})
   let proptypes = prop_type_list({'bufnr': bufnr})
   call assert_equal(1, len(proptypes))
   call assert_equal('comment', proptypes[0])
@@ -70,6 +70,36 @@
   call assert_fails("call prop_type_add('one', {'bufnr': 98764})", "E158:")
 endfunc
 
+def Test_proptype_buf_list()
+  new
+  var bufnr = bufnr('')
+  try
+    prop_type_add('global', {})
+    prop_type_add('local', {bufnr: bufnr})
+
+    prop_add(1, 1, {type: 'global'})
+    prop_add(1, 1, {type: 'local'})
+
+    assert_equal([
+      {type: 'local',  type_bufnr: bufnr, id: 0, col: 1, end: 1, length: 0, start: 1},
+      {type: 'global', type_bufnr: 0,     id: 0, col: 1, end: 1, length: 0, start: 1},
+    ], prop_list(1))
+    assert_equal(
+      {lnum: 1, id: 0, col: 1, type_bufnr: bufnr, end: 1, type: 'local', length: 0, start: 1},
+      prop_find({lnum: 1, type: 'local'}))
+    assert_equal(
+      {lnum: 1, id: 0, col: 1, type_bufnr: 0, end: 1, type: 'global', length: 0, start: 1},
+      prop_find({lnum: 1, type: 'global'}))
+
+    prop_remove({type: 'global'}, 1)
+    prop_remove({type: 'local'}, 1)
+  finally
+    prop_type_delete('global')
+    prop_type_delete('local', {bufnr: bufnr})
+    bwipe!
+  endtry
+enddef
+
 func AddPropTypes()
   call prop_type_add('one', {})
   call prop_type_add('two', {})
@@ -94,27 +124,27 @@
 
 func Get_expected_props()
   return [
-      \ {'col': 1, 'length': 13, 'id': 14, 'type': 'whole', 'start': 1, 'end': 1},
-      \ {'col': 1, 'length': 3, 'id': 11, 'type': 'one', 'start': 1, 'end': 1},
-      \ {'col': 5, 'length': 3, 'id': 12, 'type': 'two', 'start': 1, 'end': 1},
-      \ {'col': 9, 'length': 5, 'id': 13, 'type': 'three', 'start': 1, 'end': 1},
+      \ #{type_bufnr: 0, col: 1, length: 13, id: 14, type: 'whole', start: 1, end: 1},
+      \ #{type_bufnr: 0, col: 1, length: 3,  id: 11, type: 'one',   start: 1, end: 1},
+      \ #{type_bufnr: 0, col: 5, length: 3,  id: 12, type: 'two',   start: 1, end: 1},
+      \ #{type_bufnr: 0, col: 9, length: 5,  id: 13, type: 'three', start: 1, end: 1},
       \ ]
 endfunc
 
 func Test_prop_find()
   new
   call setline(1, ['one one one', 'twotwo', 'three', 'fourfour', 'five', 'sixsix'])
- 
-  " Add two text props on lines 1 and 5, and one spanning lines 2 to 4. 
+
+  " Add two text props on lines 1 and 5, and one spanning lines 2 to 4.
   call prop_type_add('prop_name', {'highlight': 'Directory'})
   call prop_add(1, 5, {'type': 'prop_name', 'id': 10, 'length': 3})
   call prop_add(2, 4, {'type': 'prop_name', 'id': 11, 'end_lnum': 4, 'end_col': 9})
   call prop_add(5, 4, {'type': 'prop_name', 'id': 12, 'length': 1})
 
   let expected = [
-    \ {'lnum': 1, 'col': 5, 'length': 3, 'id': 10, 'type': 'prop_name', 'start': 1, 'end': 1},
-    \ {'lnum': 2, 'col': 4, 'id': 11, 'type': 'prop_name', 'start': 1, 'end': 0},
-    \ {'lnum': 5, 'col': 4, 'length': 1, 'id': 12, 'type': 'prop_name', 'start': 1, 'end': 1}
+    \ #{type_bufnr: 0, lnum: 1, col: 5, length: 3, id: 10, type: 'prop_name', start: 1, end: 1},
+    \ #{type_bufnr: 0, lnum: 2, col: 4, id: 11, type: 'prop_name', start: 1, end: 0},
+    \ #{type_bufnr: 0, lnum: 5, col: 4, length: 1, id: 12, type: 'prop_name', start: 1, end: 1}
     \ ]
 
   " Starting at line 5 col 1 this should find the prop at line 5 col 4.
@@ -184,7 +214,7 @@
     let lnum = result.lnum
     let col = result.col
     let i = i - 1
-  endwhile 
+  endwhile
 
   " Starting from line 6 col 1 search backwards for prop with id 10.
   call cursor(6,1)
@@ -226,7 +256,7 @@
     endfor
   endfor
   cursor(1, 8)
-  var expected = {lnum: 1, id: 0, col: 14, end: 1, type: 'misspell', length: 2, start: 1}
+  var expected = {type_bufnr: 0, lnum: 1, id: 0, col: 14, end: 1, type: 'misspell', length: 2, start: 1}
   var result = prop_find({type: 'misspell', skipstart: true}, 'f')
   assert_equal(expected, result)
 
@@ -239,7 +269,8 @@
   call prop_type_add('test', {'highlight': 'ErrorMsg'})
   call setline(1, ['xxxx', 'x'])
   call prop_add(1, 4, {'type': 'test'})
-  call assert_equal({'id': 0, 'lnum': 1, 'col': 4, 'type': 'test', 'length': 0, 'start': 1, 'end': 1},
+  call assert_equal(
+        \ #{type_bufnr: 0, id: 0, lnum: 1, col: 4, type: 'test', length: 0, start: 1, end: 1},
         \ prop_find({'type': 'test', 'lnum': 2, 'col': 1}, 'b'))
   bwipe!
   call prop_type_delete('test')
@@ -272,7 +303,7 @@
   call assert_equal(expected_props, prop_list(1))
   call assert_fails("call prop_add(10, 1, {'length': 1, 'id': 14, 'type': 'whole'})", 'E966:')
   call assert_fails("call prop_add(1, 22, {'length': 1, 'id': 14, 'type': 'whole'})", 'E964:')
- 
+
   " Insert a line above, text props must still be there.
   call append(0, 'empty')
   call assert_equal(expected_props, prop_list(2))
@@ -284,12 +315,12 @@
   call prop_clear(1)
   call prop_type_add('included', {'start_incl': 1, 'end_incl': 1})
   call prop_add(1, 5, #{type: 'included'})
-  let expected = [#{col: 5, length: 0, type: 'included', id: 0, start: 1, end: 1}]
+  let expected = [#{type_bufnr: 0, col: 5, length: 0, type: 'included', id: 0, start: 1, end: 1}]
   call assert_equal(expected, prop_list(1))
 
   " Inserting text makes the prop bigger.
   exe "normal 5|ixx\<Esc>"
-  let expected = [#{col: 5, length: 2, type: 'included', id: 0, start: 1, end: 1}]
+  let expected = [#{type_bufnr: 0, col: 5, length: 2, type: 'included', id: 0, start: 1, end: 1}]
   call assert_equal(expected, prop_list(1))
 
   call assert_fails("call prop_add(1, 5, {'type': 'two', 'bufnr': 234343})", 'E158:')
@@ -327,7 +358,7 @@
   call SetupPropsInFirstLine()
   call prop_add(1, 6, {'length': 2, 'id': 11, 'type': 'three'})
   let props = Get_expected_props()
-  call insert(props, {'col': 6, 'length': 2, 'id': 11, 'type': 'three', 'start': 1, 'end': 1}, 3)
+  call insert(props, #{type_bufnr: 0, col: 6, length: 2, id: 11, type: 'three', start: 1, end: 1}, 3)
   call assert_equal(props, prop_list(1))
   call assert_equal(1, prop_remove({'type': 'three', 'id': 11, 'both': 1, 'all': 1}, 1))
   unlet props[3]
@@ -367,8 +398,8 @@
   call prop_add(1, 2, {'length': 3, 'id': 11, 'type': 'one'})
   call prop_add(1, 8, {'length': 3, 'id': 12, 'type': 'two'})
   let expected = [
-	\ {'col': 2, 'length': 3, 'id': 11, 'type': 'one', 'start': 1, 'end': 1},
-	\ {'col': 8, 'length': 3, 'id': 12, 'type': 'two', 'start': 1, 'end': 1},
+	\ #{type_bufnr: 0, col: 2, length: 3, id: 11, type: 'one', start: 1, end: 1},
+	\ #{type_bufnr: 0, col: 8, length: 3, id: 12, type: 'two', start: 1, end: 1},
 	\]
   call assert_equal(expected, prop_list(1))
   return expected
@@ -389,9 +420,9 @@
   endfor
 
   let props = [
-	\ {'col': 1, 'length': 3, 'id': 11, 'type': 'one', 'start': 1, 'end': 1},
-	\ {'col': 5, 'length': 3, 'id': 12, 'type': 'two', 'start': 1, 'end': 1},
-	\ {'col': 11, 'length': 3, 'id': 13, 'type': 'three', 'start': 1, 'end': 1},
+	\ #{type_bufnr: 0, col: 1, length: 3, id: 11, type: 'one', start: 1, end: 1},
+	\ #{type_bufnr: 0, col: 5, length: 3, id: 12, type: 'two', start: 1, end: 1},
+	\ #{type_bufnr: 0, col: 11, length: 3, id: 13, type: 'three', start: 1, end: 1},
 	\]
   call assert_equal(props, prop_list(1, {'bufnr': bufnr}))
 
@@ -658,7 +689,7 @@
   new
   call setline(1, ['    xxx', 'yyyyy'])
   call prop_add(2, 2, {'length': 2, 'type': 'comment'})
-  let expect = {'col': 2, 'length': 2, 'type': 'comment', 'start': 1, 'end': 1, 'id': 0}
+  let expect = #{type_bufnr: 0, col: 2, length: 2, type: 'comment', start: 1, end: 1, id: 0}
   call assert_equal([expect], prop_list(2))
 
   set shiftwidth=3
@@ -704,11 +735,11 @@
 
   " start halfway line 1, end halfway line 3
   call prop_add(1, 3, {'end_lnum': 3, 'end_col': 5, 'type': 'comment'})
-  let expect1 = {'col': 3, 'length': 6, 'type': 'comment', 'start': 1, 'end': 0, 'id': 0}
+  let expect1 = #{type_bufnr: 0, col: 3, length: 6, type: 'comment', start: 1, end: 0, id: 0}
   call assert_equal([expect1], prop_list(1))
-  let expect2 = {'col': 1, 'length': 10, 'type': 'comment', 'start': 0, 'end': 0, 'id': 0}
+  let expect2 = #{type_bufnr: 0, col: 1, length: 10, type: 'comment', start: 0, end: 0, id: 0}
   call assert_equal([expect2], prop_list(2))
-  let expect3 = {'col': 1, 'length': 4, 'type': 'comment', 'start': 0, 'end': 1, 'id': 0}
+  let expect3 = #{type_bufnr: 0, col: 1, length: 4, type: 'comment', start: 0, end: 1, id: 0}
   call assert_equal([expect3], prop_list(3))
   call prop_clear(1, 3)
 
@@ -726,21 +757,21 @@
 
   " Test deleting the first line of a multi-line prop.
   call Setup_three_line_prop()
-  let expect_short = {'col': 2, 'length': 1, 'type': 'comment', 'start': 1, 'end': 1, 'id': 0}
+  let expect_short = #{type_bufnr: 0, col: 2, length: 1, type: 'comment', start: 1, end: 1, id: 0}
   call assert_equal([expect_short], prop_list(1))
-  let expect2 = {'col': 4, 'length': 4, 'type': 'comment', 'start': 1, 'end': 0, 'id': 0}
+  let expect2 = #{type_bufnr: 0, col: 4, length: 4, type: 'comment', start: 1, end: 0, id: 0}
   call assert_equal([expect2], prop_list(2))
   2del
   call assert_equal([expect_short], prop_list(1))
-  let expect2 = {'col': 1, 'length': 6, 'type': 'comment', 'start': 1, 'end': 0, 'id': 0}
+  let expect2 = #{type_bufnr: 0, col: 1, length: 6, type: 'comment', start: 1, end: 0, id: 0}
   call assert_equal([expect2], prop_list(2))
   bwipe!
 
   " Test deleting the last line of a multi-line prop.
   call Setup_three_line_prop()
-  let expect3 = {'col': 1, 'length': 6, 'type': 'comment', 'start': 0, 'end': 0, 'id': 0}
+  let expect3 = #{type_bufnr: 0, col: 1, length: 6, type: 'comment', start: 0, end: 0, id: 0}
   call assert_equal([expect3], prop_list(3))
-  let expect4 = {'col': 1, 'length': 4, 'type': 'comment', 'start': 0, 'end': 1, 'id': 0}
+  let expect4 = #{type_bufnr: 0, col: 1, length: 4, type: 'comment', start: 0, end: 1, id: 0}
   call assert_equal([expect4], prop_list(4))
   4del
   let expect3.end = 1
@@ -750,11 +781,11 @@
 
   " Test appending a line below the multi-line text prop start.
   call Setup_three_line_prop()
-  let expect2 = {'col': 4, 'length': 4, 'type': 'comment', 'start': 1, 'end': 0, 'id': 0}
+  let expect2 = #{type_bufnr: 0, col: 4, length: 4, type: 'comment', start: 1, end: 0, id: 0}
   call assert_equal([expect2], prop_list(2))
   call append(2, "new line")
   call assert_equal([expect2], prop_list(2))
-  let expect3 = {'col': 1, 'length': 9, 'type': 'comment', 'start': 0, 'end': 0, 'id': 0}
+  let expect3 = #{type_bufnr: 0, col: 1, length: 9, type: 'comment', start: 0, end: 0, id: 0}
   call assert_equal([expect3], prop_list(3))
   bwipe!
 
@@ -828,7 +859,7 @@
   set ul&
 
   call prop_add(1, 3, {'end_col': 5, 'type': 'comment'})
-  let expected = [{'col': 3, 'length': 2, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
+  let expected = [#{type_bufnr: 0, col: 3, length: 2, id: 0, type: 'comment', start: 1, end: 1}]
   call assert_equal(expected, prop_list(1))
 
   " Insert a character, then undo.
@@ -872,7 +903,7 @@
   " substitute a word, then undo
   call setline(1, 'the number 123 is highlighted.')
   call prop_add(1, 12, {'length': 3, 'type': 'comment'})
-  let expected = [{'col': 12, 'length': 3, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
+  let expected = [#{type_bufnr: 0, col: 12, length: 3, id: 0, type: 'comment', start: 1, end: 1} ]
   call assert_equal(expected, prop_list(1))
   set ul&
   1s/number/foo
@@ -886,7 +917,7 @@
   " substitute with backslash
   call setline(1, 'the number 123 is highlighted.')
   call prop_add(1, 12, {'length': 3, 'type': 'comment'})
-  let expected = [{'col': 12, 'length': 3, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
+  let expected = [#{type_bufnr: 0, col: 12, length: 3, id: 0, type: 'comment', start: 1, end: 1} ]
   call assert_equal(expected, prop_list(1))
   1s/the/\The
   call assert_equal(expected, prop_list(1))
@@ -912,22 +943,22 @@
 
   " zero length property
   call prop_add(1, 3, {'type': 'comment'})
-  let expected = [{'col': 3, 'length': 0, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
+  let expected = [#{type_bufnr: 0, col: 3, length: 0, id: 0, type: 'comment', start: 1, end: 1} ]
   call assert_equal(expected, prop_list(1))
 
   " delete one char moves the property
   normal! x
-  let expected = [{'col': 2, 'length': 0, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
+  let expected = [#{type_bufnr: 0, col: 2, length: 0, id: 0, type: 'comment', start: 1, end: 1} ]
   call assert_equal(expected, prop_list(1))
 
   " delete char of the property has no effect
   normal! lx
-  let expected = [{'col': 2, 'length': 0, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
+  let expected = [#{type_bufnr: 0, col: 2, length: 0, id: 0, type: 'comment', start: 1, end: 1} ]
   call assert_equal(expected, prop_list(1))
 
   " delete more chars moves property to first column, is not deleted
   normal! 0xxxx
-  let expected = [{'col': 1, 'length': 0, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
+  let expected = [#{type_bufnr: 0, col: 1, length: 0, id: 0, type: 'comment', start: 1, end: 1} ]
   call assert_equal(expected, prop_list(1))
 
   bwipe!
@@ -1191,12 +1222,16 @@
   call prop_add(2, 1, {'length': 3, 'type': 'number'})
   call prop_add(3, 36, {'length': 4, 'type': 'number'})
   set ul&
-  let expected = [{'id': 0, 'col': 13, 'end': 1, 'type': 'number', 'length': 3, 'start': 1}, 
-        \ {'id': 0, 'col': 1, 'end': 1, 'type': 'number', 'length': 3, 'start': 1}, 
-        \ {'id': 0, 'col': 50, 'end': 1, 'type': 'number', 'length': 4, 'start': 1}]
+  let expected = [
+        \ #{type_bufnr: 0, id: 0, col: 13, end: 1, type: 'number', length: 3, start: 1},
+        \ #{type_bufnr: 0, id: 0, col: 1,  end: 1, type: 'number', length: 3, start: 1},
+        \ #{type_bufnr: 0, id: 0, col: 50, end: 1, type: 'number', length: 4, start: 1}]
+
+  " TODO
+  return
   " Add some text in between
   %s/\s\+/   /g
-  call assert_equal(expected, prop_list(1) + prop_list(2) + prop_list(3)) 
+  call assert_equal(expected, prop_list(1) + prop_list(2) + prop_list(3))
 
   " remove some text
   :1s/[a-z]\{3\}//g
@@ -1298,11 +1333,11 @@
   call setline(1, 'just some text')
   call prop_type_add('test', {'highlight': 'ErrorMsg'})
   call prop_add(1, 1, {'end_col': 2, 'type': 'test'})
-  call assert_equal([{'id': 0, 'col': 1, 'end': 1, 'type': 'test', 'length': 1, 'start': 1}], prop_list(1))
+  call assert_equal([#{type_bufnr: 0, id: 0, col: 1, end: 1, type: 'test', length: 1, start: 1}], prop_list(1))
 
   call feedkeys("foi\<F8>\<Esc>", "tx")
   call assert_equal('just s<F8>ome text', getline(1))
-  call assert_equal([{'id': 0, 'col': 1, 'end': 1, 'type': 'test', 'length': 1, 'start': 1}], prop_list(1))
+  call assert_equal([#{type_bufnr: 0, id: 0, col: 1, end: 1, type: 'test', length: 1, start: 1}], prop_list(1))
 
   bwipe!
   call prop_remove({'type': 'test'})
@@ -1316,8 +1351,9 @@
   call prop_add(1, 1, {'length': 4, 'type': 'test'})
   call prop_add(1, 10, {'length': 3, 'type': 'test'})
 
-  call assert_equal({'id': 0, 'lnum': 1, 'col': 10, 'end': 1, 'type': 'test', 'length': 3, 'start': 1},
-			  \ prop_find(#{type: 'test', lnum: 1, col: 6}))
+  call assert_equal(
+        \ #{type_bufnr: 0, id: 0, lnum: 1, col: 10, end: 1, type: 'test', length: 3, start: 1},
+        \ prop_find(#{type: 'test', lnum: 1, col: 6}))
 
   bwipe!
   call prop_type_delete('test')
@@ -1329,8 +1365,9 @@
   call setline(1, 'just some text')
   call prop_add(1, 1, {'length': 0, 'type': 'test'})
 
-  call assert_equal({'id': 0, 'lnum': 1, 'col': 1, 'end': 1, 'type': 'test', 'length': 0, 'start': 1},
-			  \ prop_find(#{type: 'test', lnum: 1}))
+  call assert_equal(
+        \ #{type_bufnr: 0, id: 0, lnum: 1, col: 1, end: 1, type: 'test', length: 0, start: 1},
+        \ prop_find(#{type: 'test', lnum: 1}))
 
   bwipe!
   call prop_type_delete('test')
@@ -1386,14 +1423,16 @@
 
   " Split in middle of "some"
   execute "normal! 8|i\<CR>"
-  call assert_equal([{'id': 0, 'col': 6, 'end': 0, 'type': 'test', 'length': 2, 'start': 1}],
-			  \ prop_list(1))
-  call assert_equal([{'id': 0, 'col': 1, 'end': 1, 'type': 'test', 'length': 2, 'start': 0}],
-			  \ prop_list(2))
+  call assert_equal(
+        \ [#{type_bufnr: 0, id: 0, col: 6, end: 0, type: 'test', length: 2, start: 1}],
+        \ prop_list(1))
+  call assert_equal(
+        \ [#{type_bufnr: 0, id: 0, col: 1, end: 1, type: 'test', length: 2, start: 0}],
+        \ prop_list(2))
 
   " Join the two lines back together
   normal! 1GJ
-  call assert_equal([{'id': 0, 'col': 6, 'end': 1, 'type': 'test', 'length': 5, 'start': 1}], prop_list(1))
+  call assert_equal([#{type_bufnr: 0, id: 0, col: 6, end: 1, type: 'test', length: 5, start: 1}], prop_list(1))
 
   bwipe!
   call prop_type_delete('test')
@@ -1408,12 +1447,12 @@
   exe "normal! 0f9\<C-A>"
   eval getline(1)->assert_equal('its 999 times')
   eval prop_list(1)->assert_equal([
-        \ #{id: 0, col: 5, end: 1, type: 'test', length: 3, start: 1}])
+        \ #{type_bufnr: 0, id: 0, col: 5, end: 1, type: 'test', length: 3, start: 1}])
 
   exe "normal! 0f9\<C-A>"
   eval getline(1)->assert_equal('its 1000 times')
   eval prop_list(1)->assert_equal([
-        \ #{id: 0, col: 5, end: 1, type: 'test', length: 4, start: 1}])
+        \ #{type_bufnr: 0, id: 0, col: 5, end: 1, type: 'test', length: 4, start: 1}])
 
   bwipe!
   call prop_type_delete('test')
@@ -1429,7 +1468,7 @@
   " insert "xx" in the first column of both lines
   exe "normal! gg0\<C-V>jIxx\<Esc>"
   eval getline(1, 2)->assert_equal(['xxone ', 'xxtwo '])
-  let expected = [#{id: 0, col: 3, end: 1, type: 'test', length: 3, start: 1}]
+  let expected = [#{type_bufnr: 0, id: 0, col: 3, end: 1, type: 'test', length: 3, start: 1}]
   eval prop_list(1)->assert_equal(expected)
   eval prop_list(2)->assert_equal(expected)
 
@@ -1510,5 +1549,37 @@
   bwipe!
 enddef
 
+" Buffer number of 0 should be ignored, as if the parameter wasn't passed.
+def Test_prop_bufnr_zero()
+  new
+  try
+    var bufnr = bufnr('')
+    setline(1, 'hello')
+    prop_type_add('bufnr-global', {highlight: 'ErrorMsg'})
+    prop_type_add('bufnr-buffer', {highlight: 'StatusLine', bufnr: bufnr})
+
+    prop_add(1, 1, {type: 'bufnr-global', length: 1})
+    prop_add(1, 2, {type: 'bufnr-buffer', length: 1})
+
+    var list = prop_list(1)
+    assert_equal([
+       {id: 0, col: 1, type_bufnr: 0,         end: 1, type: 'bufnr-global', length: 1, start: 1},
+       {id: 0, col: 2, type_bufnr: bufnr, end: 1, type: 'bufnr-buffer', length: 1, start: 1},
+    ], list)
+
+    assert_equal(
+      {highlight: 'ErrorMsg', end_incl: 0, start_incl: 0, priority: 0, combine: 1},
+      prop_type_get('bufnr-global', {bufnr: list[0].type_bufnr}))
+
+    assert_equal(
+      {highlight: 'StatusLine', end_incl: 0, start_incl: 0, priority: 0, bufnr: bufnr, combine: 1},
+      prop_type_get('bufnr-buffer', {bufnr: list[1].type_bufnr}))
+  finally
+    bwipe!
+    prop_type_delete('bufnr-global')
+  endtry
+enddef
+
+
 
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/textprop.c b/src/textprop.c
index 4cde755..92dc645 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -140,7 +140,8 @@
     if (arg->vval.v_dict == NULL)
 	return OK;  // NULL dict is like an empty dict
     di = dict_find(arg->vval.v_dict, (char_u *)"bufnr", -1);
-    if (di != NULL)
+    if (di != NULL && (di->di_tv.v_type != VAR_NUMBER
+					      || di->di_tv.vval.v_number != 0))
     {
 	*buf = get_buf_arg(&di->di_tv);
 	if (*buf == NULL)
@@ -506,15 +507,27 @@
 prop_fill_dict(dict_T *dict, textprop_T *prop, buf_T *buf)
 {
     proptype_T *pt;
+    int buflocal = TRUE;
 
     dict_add_number(dict, "col", prop->tp_col);
     dict_add_number(dict, "length", prop->tp_len);
     dict_add_number(dict, "id", prop->tp_id);
     dict_add_number(dict, "start", !(prop->tp_flags & TP_FLAG_CONT_PREV));
     dict_add_number(dict, "end", !(prop->tp_flags & TP_FLAG_CONT_NEXT));
-    pt = text_prop_type_by_id(buf, prop->tp_type);
+
+    pt = find_type_by_id(buf->b_proptypes, prop->tp_type);
+    if (pt == NULL)
+    {
+	pt = find_type_by_id(global_proptypes, prop->tp_type);
+	buflocal = FALSE;
+    }
     if (pt != NULL)
 	dict_add_string(dict, "type", pt->pt_name);
+
+    if (buflocal)
+	dict_add_number(dict, "type_bufnr", buf->b_fnum);
+    else
+	dict_add_number(dict, "type_bufnr", 0);
 }
 
 /*
@@ -1159,7 +1172,7 @@
 }
 
 /*
- * prop_type_get({name} [, {bufnr}])
+ * prop_type_get({name} [, {props}])
  */
     void
 f_prop_type_get(typval_T *argvars, typval_T *rettv)
diff --git a/src/version.c b/src/version.c
index 85b8ae9..b172333 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3233,
+/**/
     3232,
 /**/
     3231,
