diff --git a/src/parser/quotes.rs b/src/parser/quotes.rs
index eac72934854f4787a1bc6d36e2eb7024ce61217b..87084cefa35535888d147a49bda0128dad0a7701 100644
--- a/src/parser/quotes.rs
+++ b/src/parser/quotes.rs
@@ -2,11 +2,12 @@ use std::str;
 
 bitflags! {
     pub struct Flags : u8 {
-        const BACKSL = 1;
-        const SQUOTE = 2;
-        const DQUOTE = 4;
-        const TRIM   = 8;
-        const ARRAY  = 16;
+        const SQUOTE = 1;
+        const DQUOTE = 2;
+        const TRIM   = 4;
+        const ARRAY  = 8;
+        const COMM   = 16;
+        const EOF    = 32;
     }
 }
 
@@ -14,6 +15,7 @@ pub(crate) struct QuoteTerminator {
     buffer:     String,
     eof:        Option<String>,
     eof_buffer: String,
+    array:      usize,
     read:       usize,
     flags:      Flags,
 }
@@ -24,6 +26,7 @@ impl QuoteTerminator {
             buffer:     input,
             eof:        None,
             eof_buffer: String::new(),
+            array:      0,
             read:       0,
             flags:      Flags::empty(),
         }
@@ -46,15 +49,13 @@ impl QuoteTerminator {
             line.trim() == eof
         } else {
             {
-                let mut eof_found = false;
-                let mut comment = false;
+                let mut instance = Flags::empty();
                 {
                     let mut bytes = self.buffer.bytes().skip(self.read);
                     while let Some(character) = bytes.next() {
                         self.read += 1;
                         match character {
-                            _ if self.flags.contains(BACKSL) => self.flags ^= BACKSL,
-                            b'\\' => self.flags ^= BACKSL,
+                            b'\\' => { let _ = bytes.next(); },
                             b'\'' if !self.flags.intersects(DQUOTE) => self.flags ^= SQUOTE,
                             b'"' if !self.flags.intersects(SQUOTE) => self.flags ^= DQUOTE,
                             b'<' if !self.flags.contains(SQUOTE | DQUOTE) => {
@@ -66,26 +67,28 @@ impl QuoteTerminator {
                                             str::from_utf8_unchecked(&as_bytes[self.read..])
                                         };
                                         self.eof = Some(eof_phrase.trim().to_owned());
-                                        eof_found = true;
+                                        instance |= EOF;
                                         break;
                                     }
                                 }
                             }
                             b'[' if !self.flags.intersects(DQUOTE | SQUOTE) => {
                                 self.flags |= ARRAY;
+                                self.array += 1;
                             }
                             b']' if !self.flags.intersects(DQUOTE | SQUOTE) => {
-                                self.flags -= ARRAY;
+                                self.array -= 1;
+                                if self.array == 0 { self.flags -= ARRAY }
                             }
                             b'#' if !self.flags.intersects(DQUOTE | SQUOTE) => {
                                 if self.read > 1 {
                                     let character = self.buffer.as_bytes().get(self.read - 2).unwrap();
                                     if [b' ', b'\n'].contains(character) {
-                                        comment = true;
+                                        instance |= COMM;
                                         break
                                     }
                                 } else {
-                                    comment = true;
+                                    instance |= COMM;
                                     break
                                 }
                             }
@@ -93,10 +96,10 @@ impl QuoteTerminator {
                         }
                     }
                 }
-                if eof_found {
+                if instance.contains(EOF) {
                     self.buffer.push('\n');
                     return false;
-                } else if comment {
+                } else if instance.contains(COMM) {
                     self.buffer.truncate(self.read - 1);
                     return !self.flags.intersects(SQUOTE | DQUOTE | ARRAY);
                 }