diff --git a/a1/src/edu/wmich/cs3310/a1/Controller.java b/a1/src/edu/wmich/cs3310/a1/Controller.java
deleted file mode 100644
index 778a40134d173ecee81fb0380271679713615b6b..0000000000000000000000000000000000000000
--- a/a1/src/edu/wmich/cs3310/a1/Controller.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package edu.wmich.cs3310.a1;
-
-
-public class Controller {
-
-    //region Variables
-
-
-
-    //endregion Variables
-
-
-
-    //region Controllers
-
-    public Controller() {
-
-    }
-
-    //endregion Controllers
-
-
-
-    //region Methods
-
-
-
-    //endregion Methods
-
-}
diff --git a/a1/src/edu/wmich/cs3310/a1/Main.java b/a1/src/edu/wmich/cs3310/a1/Main.java
index f55608c39f830289276310e84353b6c8eb5c1c38..9968636255c56d8c0657c3b881324f0ec4194c23 100644
--- a/a1/src/edu/wmich/cs3310/a1/Main.java
+++ b/a1/src/edu/wmich/cs3310/a1/Main.java
@@ -1,9 +1,11 @@
 package edu.wmich.cs3310.a1;
 
+import java.io.IOException;
+
 
 public class Main {
-    public static void main(String[] args) {
+    public static void main(String[] args) throws IOException {
         // Create class to run program from non-static source.
-        Controller controller = new Controller();
+        StackQueueDemo controller = new StackQueueDemo();
     }
 }
diff --git a/a1/src/edu/wmich/cs3310/a1/QueueCheckBalancedParentheses.java b/a1/src/edu/wmich/cs3310/a1/QueueCheckBalancedParentheses.java
new file mode 100644
index 0000000000000000000000000000000000000000..594d8365c4447c60ed6f19f2656f9170680abd00
--- /dev/null
+++ b/a1/src/edu/wmich/cs3310/a1/QueueCheckBalancedParentheses.java
@@ -0,0 +1,88 @@
+package edu.wmich.cs3310.a1;
+
+import edu.wmich.cs3310.a1.DataStructures.CharNode;
+import edu.wmich.cs3310.a1.DataStructures.CharQueue;
+
+
+public class QueueCheckBalancedParentheses extends CharQueue{
+
+    //region Variables
+
+    private String text;
+    CharNode tempNode;
+
+    //endregion Variables
+
+
+
+    //region Constructors
+
+    /**
+     * Base constructor.
+     */
+    public QueueCheckBalancedParentheses() {
+
+    }
+
+    //endregion Constructors
+
+
+
+    //region Properties
+
+    /**
+     * Setter for text variable.
+     * @param value String value to set.
+     */
+    private void setText(String value) {
+        text = value;
+    }
+
+    //endregion Properties
+
+
+
+    //region Methods
+
+    /**
+     * Checks for parenthesis balance.
+     * Returns int based on number of unpaired parens.
+     * @param value String to parse for parens.
+     * @return Number of unpaired parens.
+     */
+    public int CheckBalancedParenthesis(String value) {
+        setText(value);
+        int stringLength = text.length();
+        int index = 0;
+        int leftCounter = 0;
+        int rightCounter = 0;
+
+        while (index < stringLength) {
+            this.Enqueue(text.charAt(index));
+            index++;
+        }
+
+        while ((tempNode = this.Dequeue()) != null) {
+
+            // Check for left paren.
+            if (tempNode.myData() == '(') {
+                leftCounter++;
+            }
+
+            // Check for right paren.
+            if (tempNode.myData() == ')') {
+                if (leftCounter < 1) {
+                    // No match. Increasing counter.
+                    rightCounter++;
+                } else {
+                    // Paren has match. Decreasing counter.
+                    leftCounter--;
+                }
+            }
+        }
+        return (rightCounter + leftCounter);
+    }
+
+    //endregion Methods
+
+}
diff --git a/a1/src/edu/wmich/cs3310/a1/StackCheckBalancedParentheses.java b/a1/src/edu/wmich/cs3310/a1/StackCheckBalancedParentheses.java
new file mode 100644
index 0000000000000000000000000000000000000000..de5a7734af9ce7d7ed502414fd5934481071b567
--- /dev/null
+++ b/a1/src/edu/wmich/cs3310/a1/StackCheckBalancedParentheses.java
@@ -0,0 +1,87 @@
+package edu.wmich.cs3310.a1;
+
+import edu.wmich.cs3310.a1.DataStructures.CharNode;
+import edu.wmich.cs3310.a1.DataStructures.CharStack;
+
+
+public class StackCheckBalancedParentheses extends CharStack {
+
+    //region Variables
+
+    private String text;
+    CharNode tempNode;
+
+    //endregion Variables
+
+
+
+    //region Constructors
+
+    /**
+     * Base constructor.
+     */
+    public StackCheckBalancedParentheses() {
+
+    }
+
+    //endregion Constructors
+
+
+
+    //region Properties
+
+    /**
+     * Setter for text variable.
+     * @param value String value to set.
+     */
+    private void setText(String value) {
+        text = value;
+    }
+
+    //endregion Properties
+
+
+
+    //region Methods
+
+    /**
+     * Checks for parenthesis balance.
+     * Returns int based on number of unpaired parens.
+     * @param value String to parse for parens.
+     * @return Number of unpaired parens.
+     */
+    public int CheckBalancedParenthesis(String value) {
+        setText(value);
+        int stringLength = text.length();
+        int index = 0;
+        int leftCounter = 0;
+        int rightCounter = 0;
+
+        while (index < stringLength) {
+            this.Push(text.charAt(index));
+            index++;
+        }
+
+        while ((tempNode = this.Pop()) != null) {
+
+            // Check for right paren.
+            if (tempNode.myData() == ')') {
+                rightCounter++;
+            }
+
+            // Check for left paren.
+            if (tempNode.myData() == '(') {
+                if (rightCounter < 1) {
+                    // No match. Increasing counter.
+                    leftCounter++;
+                } else {
+                    // Paren has match. Decreasing counter.
+                    rightCounter--;
+                }
+            }
+        }
+        return (rightCounter + leftCounter);
+    }
+
+    //endregion Methods
+}
diff --git a/a1/src/edu/wmich/cs3310/a1/StackQueueDemo.java b/a1/src/edu/wmich/cs3310/a1/StackQueueDemo.java
new file mode 100644
index 0000000000000000000000000000000000000000..baf0d36a64878d2325eade59e84aa167cae217a7
--- /dev/null
+++ b/a1/src/edu/wmich/cs3310/a1/StackQueueDemo.java
@@ -0,0 +1,149 @@
+package edu.wmich.cs3310.a1;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Scanner;
+
+
+public class StackQueueDemo {
+
+    //region Variables
+
+    private int stackBalance;
+    private int queueBalance;
+    private boolean runBool;
+    private String userInputString;
+    private StackCheckBalancedParentheses stackCheck;
+    private QueueCheckBalancedParentheses queueCheck;
+    private Scanner reader = new Scanner(System.in); // For user input.
+    private Scanner scanner;                        // For file reading.
+
+
+    //endregion Variables
+
+
+
+    //region Controllers
+
+    /**
+     * Base controller.
+     */
+    public StackQueueDemo() throws IOException{
+        runBool = true;
+        stackCheck = new StackCheckBalancedParentheses();
+        queueCheck = new QueueCheckBalancedParentheses();
+
+        while (runBool) {
+            PrintHelp();
+            userInputString = GetUserInput();
+            switch (userInputString) {
+                case "1":
+                    userInputString = GetUserInput("Enter Path:");
+                    ReadFile(userInputString);
+                    break;
+                case "2":
+                    userInputString = GetUserInput();
+                    ProcessString(userInputString, false);
+                    break;
+                case "3":
+                    runBool = false;
+                    break;
+                default:
+                    break;
+            }
+        }
+
+    }
+
+    //endregion Controllers
+
+
+
+    //region Methods
+
+    /**
+     * Prints help to user interface.
+     */
+    private void PrintHelp() {
+        System.out.println();
+        System.out.println("Type '1' to select a file to read.");
+        System.out.println("Type '2' to enter a string to read.");
+        System.out.println("Type '3' to exit program");
+        System.out.println();
+    }
+
+
+    /**
+     * Acquire user input.
+     * @return String of user's input.
+     */
+    private String GetUserInput() {
+        String tempString;
+
+        System.out.print("$ ");
+        tempString = reader.next().trim();
+        System.out.println();
+
+        return tempString;
+    }
+
+
+    /**
+     * Prompt for and acquire user input.
+     * @param promptString String to show user.
+     * @return String of user's input.
+     */
+    private String GetUserInput(String promptString) {
+        String tempString;
+
+        System.out.print(promptString);
+        tempString = reader.next().trim();
+        System.out.println();
+
+        return tempString;
+    }
+
+
+    /**
+     * Reads file in line by line. Any blank lines are ignored.
+     * @param fileString String to file location.
+     */
+    private void ReadFile(String fileString) {
+        String tempString;
+        try {
+            Path filePath = Paths.get(fileString);
+
+            scanner = new Scanner(filePath);
+            while (scanner.hasNextLine()) {
+                tempString = scanner.nextLine();
+                if (!(tempString.trim().equals(""))) {
+                    ProcessString(tempString, true);
+                }
+            }
+        } catch (Exception e) {
+            System.out.println("No such path exists.");
+        }
+    }
+
+
+    /**
+     * Processes string by parsing it through both queue and stack paren classes.
+     * @param lineString String to parse for parenthesis.
+     * @param printBool Inicates if string should be printed for user display.
+     */
+    private void ProcessString(String lineString, boolean printBool) {
+        if (printBool) {
+            System.out.println(lineString);
+        }
+        stackBalance = stackCheck.CheckBalancedParenthesis(lineString);
+        queueBalance = queueCheck.CheckBalancedParenthesis(lineString);
+        System.out.println("Stack balance: " + stackBalance);
+        System.out.println("Queue balance: " + queueBalance);
+        System.out.println();
+    }
+
+
+    //endregion Methods
+
+}
diff --git a/a1/tests/QueueParenTests.java b/a1/tests/QueueParenTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e06e779abe75cf23e8e8343e1b4ecf25f989c77
--- /dev/null
+++ b/a1/tests/QueueParenTests.java
@@ -0,0 +1,93 @@
+
+import org.junit.Before;
+import org.junit.Assert;
+import org.junit.Test;
+
+import edu.wmich.cs3310.a1.QueueCheckBalancedParentheses;
+
+
+/**
+ * Tests for QueueCheckBalancedParentheses Class.
+ */
+public class QueueParenTests {
+
+    //region Variables
+
+    QueueCheckBalancedParentheses aQueue;
+
+    //endregion Variables
+
+
+
+    //region Tests
+
+    @Before
+    public void setUp() {
+        aQueue = new QueueCheckBalancedParentheses();
+    }
+
+
+    @Test
+    public void Test_Paren_Equal() {
+        Assert.assertEquals(0, aQueue.CheckBalancedParenthesis(""));
+        Assert.assertEquals(0, aQueue.CheckBalancedParenthesis("()"));
+        Assert.assertEquals(0, aQueue.CheckBalancedParenthesis("(())"));
+        Assert.assertEquals(0, aQueue.CheckBalancedParenthesis("()()"));
+        Assert.assertEquals(0, aQueue.CheckBalancedParenthesis("((()))"));
+    }
+
+
+    @Test
+    public void Test_Paren_Unbalanced_by_One() {
+        Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("("));
+        Assert.assertEquals(1, aQueue.CheckBalancedParenthesis(")"));
+        Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("()("));
+        Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("())"));
+        Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("(()"));
+        Assert.assertEquals(1, aQueue.CheckBalancedParenthesis(")()"));
+        Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("()()("));
+        Assert.assertEquals(1, aQueue.CheckBalancedParenthesis("()())"));
+    }
+
+
+    @Test
+    public void Test_Paren_Unbalanced_by_Two() {
+        Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("(("));
+        Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("))"));
+        Assert.assertEquals(2, aQueue.CheckBalancedParenthesis(")("));
+        Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("()(("));
+        Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("()))"));
+        Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("((()"));
+        Assert.assertEquals(2, aQueue.CheckBalancedParenthesis("))()"));
+        Assert.assertEquals(2, aQueue.CheckBalancedParenthesis(")()("));
+    }
+
+
+    @Test
+    public void Test_Paren_Unbalanced_by_Three() {
+        Assert.assertEquals(3, aQueue.CheckBalancedParenthesis("((("));
+        Assert.assertEquals(3, aQueue.CheckBalancedParenthesis(")))"));
+        Assert.assertEquals(3, aQueue.CheckBalancedParenthesis("()((("));
+        Assert.assertEquals(3, aQueue.CheckBalancedParenthesis("())))"));
+        Assert.assertEquals(3, aQueue.CheckBalancedParenthesis("(((()"));
+        Assert.assertEquals(3, aQueue.CheckBalancedParenthesis(")))()"));
+        Assert.assertEquals(3, aQueue.CheckBalancedParenthesis(")()(("));
+        Assert.assertEquals(3, aQueue.CheckBalancedParenthesis(")()))"));
+    }
+
+
+    @Test
+    public void Test_Paren_Unbalanced_by_Four() {
+        Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("(((("));
+        Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("))))"));
+        Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("()(((("));
+        Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("()))))"));
+        Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("((((()"));
+        Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("))))()"));
+        Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("))()(("));
+        Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("((()(("));
+        Assert.assertEquals(4, aQueue.CheckBalancedParenthesis("))()))"));
+    }
+
+    //endregion Tests
+}
diff --git a/a1/tests/StackParenTests.java b/a1/tests/StackParenTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..e75c13f8321b7490fb3206a7aee5850199f28bcd
--- /dev/null
+++ b/a1/tests/StackParenTests.java
@@ -0,0 +1,93 @@
+
+import org.junit.Before;
+import org.junit.Assert;
+import org.junit.Test;
+
+import edu.wmich.cs3310.a1.StackCheckBalancedParentheses;
+
+
+/**
+ * Tests for StackCheckBalancedParentheses Class.
+ */
+public class StackParenTests {
+
+    //region Variables
+
+    StackCheckBalancedParentheses aStack;
+
+    //endregion Variables
+
+
+
+    //region Tests
+
+    @Before
+    public void setUp() {
+        aStack = new StackCheckBalancedParentheses();
+    }
+
+
+    @Test
+    public void Test_Paren_Equal() {
+        Assert.assertEquals(0, aStack.CheckBalancedParenthesis(""));
+        Assert.assertEquals(0, aStack.CheckBalancedParenthesis("()"));
+        Assert.assertEquals(0, aStack.CheckBalancedParenthesis("(())"));
+        Assert.assertEquals(0, aStack.CheckBalancedParenthesis("()()"));
+        Assert.assertEquals(0, aStack.CheckBalancedParenthesis("((()))"));
+    }
+
+
+    @Test
+    public void Test_Paren_Unbalanced_by_One() {
+        Assert.assertEquals(1, aStack.CheckBalancedParenthesis("("));
+        Assert.assertEquals(1, aStack.CheckBalancedParenthesis(")"));
+        Assert.assertEquals(1, aStack.CheckBalancedParenthesis("()("));
+        Assert.assertEquals(1, aStack.CheckBalancedParenthesis("())"));
+        Assert.assertEquals(1, aStack.CheckBalancedParenthesis("(()"));
+        Assert.assertEquals(1, aStack.CheckBalancedParenthesis(")()"));
+        Assert.assertEquals(1, aStack.CheckBalancedParenthesis("()()("));
+        Assert.assertEquals(1, aStack.CheckBalancedParenthesis("()())"));
+    }
+
+
+    @Test
+    public void Test_Paren_Unbalanced_by_Two() {
+        Assert.assertEquals(2, aStack.CheckBalancedParenthesis("(("));
+        Assert.assertEquals(2, aStack.CheckBalancedParenthesis("))"));
+        Assert.assertEquals(2, aStack.CheckBalancedParenthesis(")("));
+        Assert.assertEquals(2, aStack.CheckBalancedParenthesis("()(("));
+        Assert.assertEquals(2, aStack.CheckBalancedParenthesis("()))"));
+        Assert.assertEquals(2, aStack.CheckBalancedParenthesis("((()"));
+        Assert.assertEquals(2, aStack.CheckBalancedParenthesis("))()"));
+        Assert.assertEquals(2, aStack.CheckBalancedParenthesis(")()("));
+    }
+
+
+    @Test
+    public void Test_Paren_Unbalanced_by_Three() {
+        Assert.assertEquals(3, aStack.CheckBalancedParenthesis("((("));
+        Assert.assertEquals(3, aStack.CheckBalancedParenthesis(")))"));
+        Assert.assertEquals(3, aStack.CheckBalancedParenthesis("()((("));
+        Assert.assertEquals(3, aStack.CheckBalancedParenthesis("())))"));
+        Assert.assertEquals(3, aStack.CheckBalancedParenthesis("(((()"));
+        Assert.assertEquals(3, aStack.CheckBalancedParenthesis(")))()"));
+        Assert.assertEquals(3, aStack.CheckBalancedParenthesis(")()(("));
+        Assert.assertEquals(3, aStack.CheckBalancedParenthesis(")()))"));
+    }
+
+
+    @Test
+    public void Test_Paren_Unbalanced_by_Four() {
+        Assert.assertEquals(4, aStack.CheckBalancedParenthesis("(((("));
+        Assert.assertEquals(4, aStack.CheckBalancedParenthesis("))))"));
+        Assert.assertEquals(4, aStack.CheckBalancedParenthesis("()(((("));
+        Assert.assertEquals(4, aStack.CheckBalancedParenthesis("()))))"));
+        Assert.assertEquals(4, aStack.CheckBalancedParenthesis("((((()"));
+        Assert.assertEquals(4, aStack.CheckBalancedParenthesis("))))()"));
+        Assert.assertEquals(4, aStack.CheckBalancedParenthesis("))()(("));
+        Assert.assertEquals(4, aStack.CheckBalancedParenthesis("((()(("));
+        Assert.assertEquals(4, aStack.CheckBalancedParenthesis("))()))"));
+    }
+
+    //endregion Tests
+}