diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt
index de26bf2..f35134a 100644
--- a/runtime/doc/popup.txt
+++ b/runtime/doc/popup.txt
@@ -189,6 +189,9 @@
 				\ })
 <		Use {options} to change the properties.
 
+		Can also be used as a |method|: >
+			GetText()->popup_atcursor({})
+
 
 popup_beval({what}, {options})			*popup_beval()*
 		Show the {what} above the position from 'ballooneval' and
@@ -203,7 +206,9 @@
 <		Use {options} to change the properties.
 		See |popup_beval_example| for an example use.
 
-
+		Can also be used as a |method|: >
+			GetText()->popup_beval({})
+<
 							*popup_clear()*
 popup_clear()	Emergency solution to a misbehaving plugin: close all popup
 		windows for the current tab and global popups.
@@ -218,6 +223,8 @@
 		it will be passed as the second argument of the callback.
 		Otherwise zero is passed to the callback.
 
+		Can also be used as a |method|: >
+			GetPopup()->popup_close()
 
 popup_create({what}, {options})				*popup_create()*
 		Open a popup window showing {what}, which is either:
@@ -240,6 +247,8 @@
 			call setbufline(bufnr, 2, 'second line')
 <		In case of failure zero is returned.
 
+		Can also be used as a |method|: >
+			GetText()->popup_create({})
 
 popup_dialog({what}, {options})				*popup_dialog()*
 		Just like |popup_create()| but with these default options: >
@@ -261,6 +270,8 @@
 <		By default the dialog can be dragged, so that text below it
 		can be read if needed.
 
+		Can also be used as a |method|: >
+			GetText()->popup_dialog({})
 
 popup_filter_menu({id}, {key})				*popup_filter_menu()*
 		Filter that can be used for a popup. These keys can be used:
@@ -337,6 +348,8 @@
 
 		If popup window {id} is not found an empty Dict is returned.
 
+		Can also be used as a |method|: >
+			GetPopup()->popup_getoptions()
 
 popup_getpos({id})					*popup_getpos()*
 		Return the position and size of popup {id}.  Returns a Dict
@@ -361,6 +374,8 @@
 
 		If popup window {id} is not found an empty Dict is returned.
 
+		Can also be used as a |method|: >
+			GetPopup()->popup_getpos()
 
 popup_hide({id})						*popup_hide()*
 		If {id} is a displayed popup, hide it now. If the popup has a
@@ -369,6 +384,8 @@
 		If window {id} does not exist nothing happens.  If window {id}
 		exists but is not a popup window an error is given. *E993*
 
+		Can also be used as a |method|: >
+			GetPopup()->popup_hide()
 
 popup_locate({row}, {col})				 *popup_locate()*
 		Return the |window-ID| of the popup at screen position {row}
@@ -406,6 +423,8 @@
 				\ callback: 'ColorSelected',
 				\ })
 
+<		Can also be used as a |method|: >
+			GetChoices()->popup_menu({})
 
 popup_move({id}, {options})					*popup_move()*
 		Move popup {id} to the position specified with {options}.
@@ -422,6 +441,8 @@
 		For {id} see `popup_hide()`.
 		For other options see |popup_setoptions()|.
 
+		Can also be used as a |method|: >
+			GetPopup()->popup_move(options)
 
 popup_notification({what}, {options})			 *popup_notification()*
 		Show the {what} for 3 seconds at the top of the Vim window.
@@ -449,6 +470,8 @@
 		notifications.
 		Use {options} to change the properties.
 
+		Can also be used as a |method|: >
+			GetText()->popup_notification({})
 
 popup_show({id})						*popup_show()*
 		If {id} is a hidden popup, show it now.
@@ -485,6 +508,9 @@
 		For "hidden" use |popup_hide()| and |popup_show()|.
 		"tabpage" cannot be changed.
 
+		Can also be used as a |method|: >
+			GetPopup()->popup_setoptions(options)
+
 popup_settext({id}, {text})				*popup_settext()*
 		Set the text of the buffer in popup win {id}. {text} is the
 		same as supplied to |popup_create()|, except that a buffer
@@ -492,6 +518,8 @@
 		Does not change the window size or position, other than caused
 		by the different text.
 
+		Can also be used as a |method|: >
+			GetPopup()->popup_settext('hello')
 
 ==============================================================================
 3. Usage						*popup-usage*
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 4fbecc3..784132f 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -633,26 +633,26 @@
     {"perleval",	1, 1, 0,	  f_perleval},
 #endif
 #ifdef FEAT_TEXT_PROP
-    {"popup_atcursor",	2, 2, 0,	  f_popup_atcursor},
-    {"popup_beval",	2, 2, 0,	  f_popup_beval},
+    {"popup_atcursor",	2, 2, FEARG_1,	  f_popup_atcursor},
+    {"popup_beval",	2, 2, FEARG_1,	  f_popup_beval},
     {"popup_clear",	0, 0, 0,	  f_popup_clear},
-    {"popup_close",	1, 2, 0,	  f_popup_close},
-    {"popup_create",	2, 2, 0,	  f_popup_create},
-    {"popup_dialog",	2, 2, 0,	  f_popup_dialog},
+    {"popup_close",	1, 2, FEARG_1,	  f_popup_close},
+    {"popup_create",	2, 2, FEARG_1,	  f_popup_create},
+    {"popup_dialog",	2, 2, FEARG_1,	  f_popup_dialog},
     {"popup_filter_menu", 2, 2, 0,	  f_popup_filter_menu},
     {"popup_filter_yesno", 2, 2, 0,	  f_popup_filter_yesno},
     {"popup_findinfo",	0, 0, 0,	  f_popup_findinfo},
     {"popup_findpreview", 0, 0, 0,	  f_popup_findpreview},
-    {"popup_getoptions", 1, 1, 0,	  f_popup_getoptions},
-    {"popup_getpos",	1, 1, 0,	  f_popup_getpos},
-    {"popup_hide",	1, 1, 0,	  f_popup_hide},
+    {"popup_getoptions", 1, 1, FEARG_1,	  f_popup_getoptions},
+    {"popup_getpos",	1, 1, FEARG_1,	  f_popup_getpos},
+    {"popup_hide",	1, 1, FEARG_1,	  f_popup_hide},
     {"popup_locate",	2, 2, 0,	  f_popup_locate},
-    {"popup_menu",	2, 2, 0,	  f_popup_menu},
-    {"popup_move",	2, 2, 0,	  f_popup_move},
-    {"popup_notification", 2, 2, 0,	  f_popup_notification},
-    {"popup_setoptions", 2, 2, 0,	  f_popup_setoptions},
-    {"popup_settext",	2, 2, 0,	  f_popup_settext},
-    {"popup_show",	1, 1, 0,	  f_popup_show},
+    {"popup_menu",	2, 2, FEARG_1,	  f_popup_menu},
+    {"popup_move",	2, 2, FEARG_1,	  f_popup_move},
+    {"popup_notification", 2, 2, FEARG_1, f_popup_notification},
+    {"popup_setoptions", 2, 2, FEARG_1,	  f_popup_setoptions},
+    {"popup_settext",	2, 2, FEARG_1,	  f_popup_settext},
+    {"popup_show",	1, 1, FEARG_1,	  f_popup_show},
 #endif
 #ifdef FEAT_FLOAT
     {"pow",		2, 2, FEARG_1,	  f_pow},
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index 36cf306..03cada3 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -145,7 +145,7 @@
 	\ scrollbar: 0,
 	\ visible: 1}
   let winid = popup_create('hello border', #{line: 2, col: 3, border: []})",
-  call assert_equal(with_border_or_padding, popup_getpos(winid))
+  call assert_equal(with_border_or_padding, winid->popup_getpos())
   let options = popup_getoptions(winid)
   call assert_equal([], options.border)
   call assert_false(has_key(options, "padding"))
@@ -337,7 +337,7 @@
   call assert_equal(3, popup_getoptions(winid).firstline)
   call popup_setoptions(winid, #{firstline: 1})
   call assert_equal(1, popup_getoptions(winid).firstline)
-  call popup_close(winid)
+  eval winid->popup_close()
 
   let winid = popup_create(['xxx']->repeat(50), #{
 	\ maxheight: 3,
@@ -878,7 +878,7 @@
   " buffer is still listed but hidden
   call assert_match(winbufnr(winid) .. 'u h.*\[Popup\]', execute('ls u'))
 
-  call popup_show(winid)
+  eval winid->popup_show()
   redraw
   let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
   call assert_equal('world', line)
@@ -894,7 +894,7 @@
   call assert_fails('call popup_hide(win_getid())', 'E993:')
 
   " no error non-existing window
-  call popup_hide(1234234)
+  eval 1234234->popup_hide()
   call popup_show(41234234)
 
   bwipe!
@@ -920,7 +920,7 @@
   let line = join(map(range(1, 6), 'screenstring(2, v:val)'), '')
   call assert_equal('~world', line)
 
-  call popup_move(winid, #{line: 1})
+  eval winid->popup_move(#{line: 1})
   redraw
   let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '')
   call assert_equal('hworld', line)
@@ -1076,7 +1076,7 @@
 
   call cursor(3, 4)
   redraw
-  let winid = popup_atcursor('vim', {})
+  let winid = 'vim'->popup_atcursor({})
   redraw
   let line = join(map(range(1, 17), 'screenstring(2, v:val)'), '')
   call assert_equal('xxxvimxxxxxxxxxxx', line)
@@ -1144,7 +1144,7 @@
 	set balloonexpr=BalloonExpr()
 	set balloondelay=100
 	func BalloonExpr()
-	  let s:winid = popup_beval([v:beval_text], {})
+	  let s:winid = [v:beval_text]->popup_beval({})
 	  return ''
 	endfunc
 	func Hover()
@@ -1199,7 +1199,7 @@
     return 0
   endfunc
 
-  let winid = popup_create('something', #{filter: 'MyPopupFilter'})
+  let winid = 'something'->popup_create(#{filter: 'MyPopupFilter'})
   redraw
 
   " e is consumed by the filter
@@ -1787,7 +1787,7 @@
   let lines =<< trim END
     let opts = #{wrap: 0}
     let p = popup_create('test', opts)
-    call popup_settext(p, 'this is a text')
+    eval p->popup_settext('this is a text')
   END
 
   call writefile(lines, 'XtestPopupSetText')
@@ -1840,7 +1840,7 @@
     let s:cb_winid = a:id
     let s:cb_res = a:res
   endfunc
-  let winid = popup_dialog('make a choice', #{hidden: 1,
+  let winid = 'make a choice'->popup_dialog(#{hidden: 1,
 	  \ filter: 'popup_filter_yesno',
 	  \ callback: 'QuitCallback',
 	  \ })
@@ -2020,7 +2020,7 @@
 	\ maxheight: 10,
 	\ })
   for top in range(1, 20)
-    call popup_setoptions(winid, #{firstline: top})
+    eval winid->popup_setoptions(#{firstline: top})
     redraw
     call assert_equal(19, popup_getpos(winid).width)
   endfor
@@ -2100,8 +2100,9 @@
     call setline(1, range(1, 20))
     hi ScrollThumb ctermbg=blue
     hi ScrollBar ctermbg=red
-    call popup_menu(['one', 'two', 'three', 'four', 'five',
-	  \ 'six', 'seven', 'eight', 'nine'], #{
+    eval ['one', 'two', 'three', 'four', 'five',
+	  \ 'six', 'seven', 'eight', 'nine']
+	  \ ->popup_menu(#{
 	  \ minwidth: 8,
 	  \ maxheight: 3,
 	  \ })
@@ -2435,7 +2436,7 @@
       call setline(1, 'text text text text text text text ')
       func ChangeColor()
 	let id = popup_findinfo()
-	call popup_setoptions(id, #{highlight: 'InfoPopup'})
+	eval id->popup_setoptions(#{highlight: 'InfoPopup'})
       endfunc
   END
   return lines
@@ -2522,7 +2523,7 @@
 func Test_popupwin_recycle_bnr()
   let bufnr = popup_notification('nothing wrong', {})->winbufnr()
   call popup_clear()
-  let winid = popup_notification('nothing wrong', {})
+  let winid = 'nothing wrong'->popup_notification({})
   call assert_equal(bufnr, winbufnr(winid))
   call popup_clear()
 endfunc
diff --git a/src/version.c b/src/version.c
index fb68068..515564d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1982,
+/**/
     1981,
 /**/
     1980,
