diff --git a/runtime/autoload/python.vim b/runtime/autoload/python.vim
index e45dbd9..1eaad09 100644
--- a/runtime/autoload/python.vim
+++ b/runtime/autoload/python.vim
@@ -3,13 +3,19 @@
 let s:keepcpo= &cpo
 set cpo&vim
 
-" searchpair() can be slow, limit the time to 150 msec or what is put in
-" g:pyindent_searchpair_timeout
-let s:searchpair_timeout = get(g:, 'pyindent_searchpair_timeout', 150)
-
-" Identing inside parentheses can be very slow, regardless of the searchpair()
-" timeout, so let the user disable this feature if he doesn't need it
-let s:disable_parentheses_indenting = get(g:, 'pyindent_disable_parentheses_indenting', v:false)
+" need to inspect some old g:pyindent_* variables to be backward compatible
+let g:python_indent = extend(get(g:, 'python_indent', {}), #{
+  \ closed_paren_align_last_line: v:true,
+  \ open_paren: get(g:, 'pyindent_open_paren', 'shiftwidth() * 2'),
+  \ nested_paren: get(g:, 'pyindent_nested_paren', 'shiftwidth()'),
+  \ continue: get(g:, 'pyindent_continue', 'shiftwidth() * 2'),
+  "\ searchpair() can be slow, limit the time to 150 msec or what is put in
+  "\ g:python_indent.searchpair_timeout
+  \ searchpair_timeout: get(g:, 'pyindent_searchpair_timeout', 150),
+  "\ Identing inside parentheses can be very slow, regardless of the searchpair()
+  "\ timeout, so let the user disable this feature if he doesn't need it
+  \ disable_parentheses_indenting: get(g:, 'pyindent_disable_parentheses_indenting', v:false),
+  \ }, 'keep')
 
 let s:maxoff = 50       " maximum number of lines to look backwards for ()
 
@@ -18,7 +24,7 @@
           \ {-> synstack('.', col('.'))
           \   ->map({_, id -> id->synIDattr('name')})
           \   ->match('\%(Comment\|Todo\|String\)$') >= 0},
-          \ [0, a:fromlnum - s:maxoff]->max(), s:searchpair_timeout)
+          \ [0, a:fromlnum - s:maxoff]->max(), g:python_indent.searchpair_timeout)
 endfunction
 
 " See if the specified line is already user-dedented from the expected value.
@@ -38,7 +44,7 @@
     if a:lnum > 1 && getline(a:lnum - 2) =~ '\\$'
       return indent(a:lnum - 1)
     endif
-    return indent(a:lnum - 1) + (exists("g:pyindent_continue") ? eval(g:pyindent_continue) : (shiftwidth() * 2))
+    return indent(a:lnum - 1) + get(g:, 'pyindent_continue', g:python_indent.continue)->eval()
   endif
 
   " If the start of the line is in a string don't change the indent.
@@ -55,7 +61,7 @@
     return 0
   endif
 
-  if s:disable_parentheses_indenting == 1
+  if g:python_indent.disable_parentheses_indenting == 1
     let plindent = indent(plnum)
     let plnumstart = plnum
   else
@@ -70,8 +76,12 @@
     "         100, 200, 300, 400)
     call cursor(a:lnum, 1)
     let [parlnum, parcol] = s:SearchBracket(a:lnum, 'nbW')
-    if parlnum > 0 && parcol != col([parlnum, '$']) - 1
-      return parcol
+    if parlnum > 0
+      if parcol != col([parlnum, '$']) - 1
+        return parcol
+      elseif getline(a:lnum) =~ '^\s*[])}]' && !g:python_indent.closed_paren_align_last_line
+        return indent(parlnum)
+      endif
     endif
 
     call cursor(plnum, 1)
@@ -123,9 +133,11 @@
           " When the start is inside parenthesis, only indent one 'shiftwidth'.
           let [pp, _] = s:SearchBracket(a:lnum, 'bW')
           if pp > 0
-            return indent(plnum) + (exists("g:pyindent_nested_paren") ? eval(g:pyindent_nested_paren) : shiftwidth())
+            return indent(plnum)
+              \ + get(g:, 'pyindent_nested_paren', g:python_indent.nested_paren)->eval()
           endif
-          return indent(plnum) + (exists("g:pyindent_open_paren") ? eval(g:pyindent_open_paren) : (shiftwidth() * 2))
+          return indent(plnum)
+            \ + get(g:, 'pyindent_open_paren', g:python_indent.open_paren)->eval()
         endif
         if plnumstart == p
           return indent(plnum)
