diff --git a/src/lib/parser/statement/mod.rs b/src/lib/parser/statement/mod.rs
index 5548f51619e63e99a90d94d61b850e0cba923f52..5733e278d2d0d75ce0ccc5487b15f55430414bc9 100644
--- a/src/lib/parser/statement/mod.rs
+++ b/src/lib/parser/statement/mod.rs
@@ -12,8 +12,8 @@ use shell::flow_control::Statement;
 /// `Statement`
 pub(crate) fn parse_and_validate<'a>(statement: Result<StatementVariant, StatementError>) -> Statement {
     match statement {
-        Ok(StatementVariant::And(statement)) => parse(statement),
-        Ok(StatementVariant::Or(statement)) => parse(statement),
+        Ok(StatementVariant::And(statement)) => Statement::And(Box::new(parse(statement))),
+        Ok(StatementVariant::Or(statement)) => Statement::Or(Box::new(parse(statement))),
         Ok(StatementVariant::Default(statement)) => parse(statement),
         Err(err) => {
             eprintln!("ion: {}", err);
diff --git a/src/lib/parser/statement/splitter.rs b/src/lib/parser/statement/splitter.rs
index 8b71a694c8275a6a6b228c9a01187ae4162b56d0..112871cb1e7f4b04541dda8ed1e7cf8219d354fd 100644
--- a/src/lib/parser/statement/splitter.rs
+++ b/src/lib/parser/statement/splitter.rs
@@ -3,7 +3,7 @@
 // - Validate syntax in methods
 
 use std::{
-    cmp::max, fmt::{self, Display, Formatter}, u16,
+    fmt::{self, Display, Formatter}, u16,
 };
 
 bitflags! {
@@ -122,18 +122,17 @@ impl<'a> StatementSplitter<'a> {
     }
 
     fn get_statement(&mut self, flags: Flags) -> StatementVariant<'a> {
-        self.flags.insert(flags);
-        match self.flags {
-            Flags::AND => {
+        let variant = if flags.contains(Flags::AND) {
+                self.flags.remove(Flags::AND);
                 StatementVariant::And(&self.data[..self.read - 1].trim())
-            }
-            Flags::OR => {
+            } else if flags.contains(Flags::OR) {
+                self.flags.remove(Flags::OR);
                 StatementVariant::Or(&self.data[..self.read - 1].trim())
-            }
-            _ => {
+            } else {
                 StatementVariant::Default(&self.data[self.start..self.read - 1].trim())
-            }
-        }
+            };
+        self.flags.insert(flags);
+        variant
     }
 }
 
@@ -146,8 +145,7 @@ impl<'a> Iterator for StatementSplitter<'a> {
         let mut else_found = false;
         let mut else_pos = 0;
         let mut error = None;
-        let c = self.data;
-        let mut bytes = c.bytes().skip(self.read);
+        let mut bytes = self.data.bytes().skip(self.read);
         while let Some(character) = bytes.next() {
             self.read += 1;
             match character {
@@ -326,6 +324,8 @@ impl<'a> Iterator for StatementSplitter<'a> {
                     if !output.is_empty() {
                         if "if" != *output {
                             self.read = else_pos;
+                            self.flags.remove(Flags::AND);
+                            self.flags.remove(Flags::OR);
                             return Some(Ok(StatementVariant::Default("else")));
                         }
                     }