diff --git a/autoload/ale/list.vim b/autoload/ale/list.vim
index 6486d906..63d51ab5 100644
--- a/autoload/ale/list.vim
+++ b/autoload/ale/list.vim
@@ -36,10 +36,12 @@ function! ale#list#SetLists(buffer, loclist) abort
     if len(a:loclist) > 0 || g:ale_keep_list_window_open
         let l:winnr = winnr()
 
-        if g:ale_set_quickfix
-            copen
-        elseif g:ale_set_loclist
-            lopen
+        if !ale#list#IsQuickfixOpen()
+          if g:ale_set_quickfix
+              copen
+          elseif g:ale_set_loclist
+              lopen
+          endif
         endif
 
         " If focus changed, restore it (jump to the last window).
diff --git a/test/test_list_opening.vader b/test/test_list_opening.vader
index 942f592f..6d0164fd 100644
--- a/test/test_list_opening.vader
+++ b/test/test_list_opening.vader
@@ -49,6 +49,10 @@ Execute(The quickfix window should open for just the loclist):
   call ale#list#SetLists(bufnr('%'), g:loclist)
   Assert ale#list#IsQuickfixOpen()
 
+  " Clear the list and it should close again.
+  call ale#list#SetLists(bufnr('%'), [])
+  Assert !ale#list#IsQuickfixOpen()
+
 Execute(The quickfix window should stay open for just the loclist):
   let g:ale_open_list = 1
   let g:ale_keep_list_window_open = 1
@@ -76,6 +80,10 @@ Execute(The quickfix window should open for the quickfix list):
   call ale#list#SetLists(bufnr('%'), g:loclist)
   Assert ale#list#IsQuickfixOpen()
 
+  " Clear the list and it should close again.
+  call ale#list#SetLists(bufnr('%'), [])
+  Assert !ale#list#IsQuickfixOpen()
+
 Execute(The quickfix window should stay open for the quickfix list):
   let g:ale_set_quickfix = 1
   let g:ale_open_list = 1