diff --git a/src/main.rs b/src/main.rs
index 7be09f0..957f5e3 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -247,9 +247,15 @@ fn evaluate(mut a: Vec<Token>) -> Result<Vec<Token>, &'static str> {
     // If multiplication
     // If division
     let mut i = 0usize;
+    let mut modified: bool = false;
     'a: loop {
         if i >= a.len() {
-            break 'a;
+            if modified {
+                modified = false;
+                i = 0;
+            } else {
+                break 'a;
+            }
         }
         let token = &a[i];
         match token {
@@ -258,12 +264,14 @@ fn evaluate(mut a: Vec<Token>) -> Result<Vec<Token>, &'static str> {
                 a.remove(i);
                 let lo = a.remove(i - 1).constant();
                 a.insert(i - 1, Token::Constant(lo * ro));
+                modified = true;
             }
             Token::Divide => {
                 let ro = a.remove(i + 1).constant();
                 a.remove(i);
                 let lo = a.remove(i - 1).constant();
                 a.insert(i - 1, Token::Constant(lo / ro));
+                modified = true;
             }
             _ => {}
         }
@@ -272,10 +280,19 @@ fn evaluate(mut a: Vec<Token>) -> Result<Vec<Token>, &'static str> {
     // If addition
     // If subtraction
     let mut i = 0usize;
+    let mut modified: bool = false;
     'a: loop {
-        if i >= a.len() {
+        if a.len() == 1 {
             break 'a;
         }
+        if i >= a.len() {
+            if modified {
+                modified = false;
+            } else {
+                return Err("Expression did not simplify");
+            }
+            i = 0;
+        }
         let token = &a[i];
         match token {
             Token::Add => {
@@ -283,20 +300,20 @@ fn evaluate(mut a: Vec<Token>) -> Result<Vec<Token>, &'static str> {
                 a.remove(i);
                 let lo = a.remove(i - 1).constant();
                 a.insert(i - 1, Token::Constant(lo + ro));
+                modified = true;
             }
             Token::Subtract => {
                 let ro = a.remove(i + 1).constant();
                 a.remove(i);
                 let lo = a.remove(i - 1).constant();
                 a.insert(i - 1, Token::Constant(lo - ro));
+                modified = true;
             }
             _ => {}
         }
         i += 1;
     }
-    if a.len() != 1 {
-        return Err("Expression did not simplify");
-    }
+    if a.len() != 1 {}
     Ok(a)
 }