diff --git a/runtime/indent/xml.vim b/runtime/indent/xml.vim
index 413a3dd..da65417 100644
--- a/runtime/indent/xml.vim
+++ b/runtime/indent/xml.vim
@@ -2,8 +2,9 @@
 " Maintainer: Christian Brabandt <cb@256bit.org>
 " Repository: https://github.com/chrisbra/vim-xml-ftplugin
 " Previous Maintainer: Johannes Zellner <johannes@zellner.org>
-" Last Changed: 2019 Dec 02
+" Last Changed: 2020 Nov 4th
 " Last Change:
+" 20200529 - Handle empty closing tags correctly
 " 20191202 - Handle docbk filetype
 " 20190726 - Correctly handle non-tagged data
 " 20190204 - correctly handle wrap tags
@@ -45,7 +46,7 @@
 endif
 
 if !exists('b:xml_indent_close')
-    let b:xml_indent_close = '.\{-}</'
+    let b:xml_indent_close = '.\{-}</\|/>.\{-}'
     " end pre tag, e.g. </address>
     " let b:xml_indent_close = '.\{-}</\(address\)\@!'
 endif
@@ -81,7 +82,7 @@
 
 " [-- return the sum of indents of a:lnum --]
 fun! <SID>XmlIndentSum(line, style, add)
-    if <SID>IsXMLContinuation(a:line) && a:style == 0
+    if <SID>IsXMLContinuation(a:line) && a:style == 0 && !<SID>IsXMLEmptyClosingTag(a:line)
         " no complete tag, add one additional indent level
         " but only for the current line
         return a:add + shiftwidth()
@@ -131,13 +132,25 @@
         endif
         let syn_name_end   = synIDattr(synID(a:lnum, strlen(curline) - 1, 1), 'name')
         let syn_name_start = synIDattr(synID(a:lnum, match(curline, '\S') + 1, 1), 'name')
+        let prev_syn_name_end   = synIDattr(synID(ptag, strlen(pline) - 1, 1), 'name')
+        " not needed (yet?)
+        " let prev_syn_name_start = synIDattr(synID(ptag, match(pline, '\S') + 1, 1), 'name')
     endif
 
     if syn_name_end =~ 'Comment' && syn_name_start =~ 'Comment'
         return <SID>XmlIndentComment(a:lnum)
     elseif empty(syn_name_start) && empty(syn_name_end) && a:use_syntax_check
         " non-xml tag content: use indent from 'autoindent'
-        return pind + shiftwidth()
+        if pline =~ b:xml_indent_close
+            return pind
+        elseif !empty(prev_syn_name_end)
+            " only indent by an extra shiftwidth, if the previous line ends
+            " with an XML like tag
+           return pind + shiftwidth()
+        else
+            " no extra indent, looks like a text continuation line
+           return pind
+        endif
     endif
 
     " Get indent from previous tag line
@@ -157,15 +170,28 @@
     return a:line !~ '>\s*$'
 endfunc
 
+func! <SID>IsXMLEmptyClosingTag(line)
+    " Checks whether the line ends with an empty closing tag such as <lb/>
+    return a:line =~? '<[^>]*/>\s*$'
+endfunc
+
 " return indent for a commented line,
 " the middle part might be indented one additional level
 func! <SID>XmlIndentComment(lnum)
-    let ptagopen = search(b:xml_indent_open, 'bnW')
+    let ptagopen = search('.\{-}<[:A-Z_a-z]\_[^/]\{-}>.\{-}', 'bnW')
     let ptagclose = search(b:xml_indent_close, 'bnW')
     if getline(a:lnum) =~ '<!--'
         " if previous tag was a closing tag, do not add
         " one additional level of indent
         if ptagclose > ptagopen && a:lnum > ptagclose
+            " If the previous tag was closed on the same line as it was
+            " declared, we should indent with its indent level.
+            if !<SID>IsXMLContinuation(getline(ptagclose))
+                return indent(ptagclose)
+            else
+                return indent(ptagclose) - shiftwidth()
+            endif
+        elseif ptagclose == ptagopen
             return indent(ptagclose)
         else
             " start of comment, add one indentation level
