diff --git a/a2/src/edu/wmich/cs3310/a2/Controller.java b/a2/src/edu/wmich/cs3310/a2/Controller.java
index 86db3c6aeb1345be71b8855e19686013d761def2..1f0a59de6fa7656a5e7a1182624412f29f8ca422 100644
--- a/a2/src/edu/wmich/cs3310/a2/Controller.java
+++ b/a2/src/edu/wmich/cs3310/a2/Controller.java
@@ -3,8 +3,8 @@ package edu.wmich.cs3310.a2;
 import java.util.Random;
 import java.util.Scanner;
 
-import edu.wmich.cs3310.a2.DataStructures.CharNode;
-import edu.wmich.cs3310.a2.DataStructures.CharQueue;
+import edu.wmich.cs3310.a2.DataStructures.LinkedNode;
+import edu.wmich.cs3310.a2.DataStructures.LinkedQueue;
 
 
 /**
@@ -24,11 +24,11 @@ public class Controller {
     private char[] mergeArray;
     private char[] insertArray;
     private char[] bInsertArray;
-    private CharQueue bubbleList = new CharQueue();
-    private CharQueue selectList = new CharQueue();
-    private CharQueue mergeList = new CharQueue();
-    private CharQueue insertList = new CharQueue();
-    private CharQueue bInsertList = new CharQueue();
+    private LinkedQueue bubbleList = new LinkedQueue();
+    private LinkedQueue selectList = new LinkedQueue();
+    private LinkedQueue mergeList = new LinkedQueue();
+    private LinkedQueue insertList = new LinkedQueue();
+    private LinkedQueue bInsertList = new LinkedQueue();
 
     //endregion Variables
 
@@ -75,8 +75,8 @@ public class Controller {
     protected void PopulateData() {
         int index = 0;
         int randomInt;
-        CharNode tempNode;
-        CharQueue tempQueue = new CharQueue();
+        LinkedNode tempNode;
+        LinkedQueue tempQueue = new LinkedQueue();
 
         // Initialize arrays.
         bubbleArray = new char[charNumber];
@@ -96,16 +96,16 @@ public class Controller {
         // Take unsorted list and populate all other data structures with.
         index = 0;
         while ((tempNode = tempQueue.Dequeue()) != null) {
-            bubbleArray[index] = tempNode.myData();
-            bubbleList.Enqueue(tempNode.myData());
-            selectArray[index] = tempNode.myData();
-            selectList.Enqueue(tempNode.myData());
-            mergeArray[index] = tempNode.myData();
-            mergeList.Enqueue(tempNode.myData());
-            insertArray[index] = tempNode.myData();
-            insertList.Enqueue(tempNode.myData());
-            bInsertArray[index] = tempNode.myData();
-            bInsertList.Enqueue(tempNode.myData());
+            bubbleArray[index] = tempNode.data();
+            bubbleList.Enqueue(tempNode.data());
+            selectArray[index] = tempNode.data();
+            selectList.Enqueue(tempNode.data());
+            mergeArray[index] = tempNode.data();
+            mergeList.Enqueue(tempNode.data());
+            insertArray[index] = tempNode.data();
+            insertList.Enqueue(tempNode.data());
+            bInsertArray[index] = tempNode.data();
+            bInsertList.Enqueue(tempNode.data());
             index++;
         }
     }
@@ -166,8 +166,8 @@ public class Controller {
     protected void ListBubbleSort() {
         boolean wasSorted = true;
         char tempChar;
-        CharNode currentNode = bubbleList.headNode();
-        CharNode lastUnsortedNode = bubbleList.tailNode();
+        LinkedNode currentNode = bubbleList.headNode();
+        LinkedNode lastUnsortedNode = bubbleList.tailNode();
 
         // Loop until one iteration does NOT change values.
         while (wasSorted) {
@@ -176,16 +176,16 @@ public class Controller {
             // Loop through all unsorted values.
             while (currentNode != lastUnsortedNode) {
                 // Check current and next values.
-                if (currentNode.myData() > currentNode.nextNode().myData()) {
-                    tempChar = currentNode.myData();
-                    currentNode.myData(currentNode.nextNode().myData());
-                    currentNode.nextNode().myData(tempChar);
+                if (currentNode.data() > currentNode.next().data()) {
+                    tempChar = currentNode.data();
+                    currentNode.data(currentNode.next().data());
+                    currentNode.next().data(tempChar);
                     wasSorted = true;
                 }
-                currentNode = currentNode.nextNode();
+                currentNode = currentNode.next();
             }
             currentNode = bubbleList.headNode();
-            lastUnsortedNode = lastUnsortedNode.prevNode();
+            lastUnsortedNode = lastUnsortedNode.prev();
         }
     }
 
@@ -231,33 +231,33 @@ public class Controller {
     protected void ListSelectionSort() {
         int currentIndex;
         int selectedIndex;
-        CharNode tempNode;
-        CharNode currentNode;
-        CharNode selectedNode;
-        CharQueue tempQueue = new CharQueue();
+        LinkedNode tempNode;
+        LinkedNode currentNode;
+        LinkedNode selectedNode;
+        LinkedQueue tempQueue = new LinkedQueue();
 
         // Loop until all values are sorted.
         while (selectList.headNode() != null) {
             selectedIndex = 0;
             currentIndex = 1;
             selectedNode = selectList.headNode();
-            currentNode = selectedNode.nextNode();
+            currentNode = selectedNode.next();
 
             // Find node of "highest" letter.
             while(currentNode != null) {
 
                 // Compare values.
-                if (currentNode.myData() < selectedNode.myData()) {
+                if (currentNode.data() < selectedNode.data()) {
                     selectedIndex = currentIndex;
                     selectedNode = currentNode;
                 }
                 currentIndex++;
-                currentNode = currentNode.nextNode();
+                currentNode = currentNode.next();
             }
 
             // Remove found node and add to new "sorted" list.
             tempNode = selectList.Delete(selectedIndex);
-            tempQueue.Enqueue(tempNode.myData());
+            tempQueue.Enqueue(tempNode.data());
         }
 
         selectList = tempQueue;
@@ -332,16 +332,16 @@ public class Controller {
      * @param highIndex Highest index for given queue section.
      * @return
      */
-    protected CharQueue ListMergeSort(CharQueue unsortedQueue, int lowIndex, int highIndex) {
+    protected LinkedQueue ListMergeSort(LinkedQueue unsortedQueue, int lowIndex, int highIndex) {
         int index;
         int midIndex;
-        CharNode tempNode;
-        CharQueue firstHalf = new CharQueue();
-        CharQueue secondHalf = new CharQueue();
-        CharQueue sortedQueue;
+        LinkedNode tempNode;
+        LinkedQueue firstHalf = new LinkedQueue();
+        LinkedQueue secondHalf = new LinkedQueue();
+        LinkedQueue sortedQueue;
 
         // Base Case. If list is only one node large, back out of recursion.
-        if ((unsortedQueue.headNode() == null) || (unsortedQueue.headNode().nextNode() == null)) {
+        if ((unsortedQueue.headNode() == null) || (unsortedQueue.headNode().next() == null)) {
             return unsortedQueue;
         }
 
@@ -352,15 +352,15 @@ public class Controller {
         tempNode = mergeList.Retrieve(lowIndex);
         for (index = 0; index < ((midIndex + 1) - lowIndex); index++) {
 
-            firstHalf.Enqueue(tempNode.myData());
-            tempNode = tempNode.nextNode();
+            firstHalf.Enqueue(tempNode.data());
+            tempNode = tempNode.next();
         }
 
         // Right half.
         tempNode = mergeList.Retrieve(midIndex + 1);
         for (index = 0; index < (highIndex - midIndex); index++) {
-            secondHalf.Enqueue(tempNode.myData());
-            tempNode = tempNode.nextNode();
+            secondHalf.Enqueue(tempNode.data());
+            tempNode = tempNode.next();
         }
         firstHalf = ListMergeSort(firstHalf, lowIndex, midIndex);
         secondHalf = ListMergeSort(secondHalf, (midIndex + 1), highIndex);
@@ -378,9 +378,9 @@ public class Controller {
      * @param midIndex Ending index of first half/starting index of second half.
      * @param highIndex Ending index of second half.
      */
-    protected CharQueue MergeList(CharQueue firstHalf, CharQueue secondHalf, int lowIndex, int midIndex, int highIndex) {
-        CharNode tempNode;
-        CharQueue sortedQueue = new CharQueue();
+    protected LinkedQueue MergeList(LinkedQueue firstHalf, LinkedQueue secondHalf, int lowIndex, int midIndex, int highIndex) {
+        LinkedNode tempNode;
+        LinkedQueue sortedQueue = new LinkedQueue();
 
         // Loop until all passed values have been looked at.
         while ((firstHalf.headNode()) != null || (secondHalf.headNode() != null)) {
@@ -388,20 +388,20 @@ public class Controller {
             // Check if left side is done but right is not.
             if (firstHalf.headNode() == null) {
                 tempNode = secondHalf.Dequeue();
-                sortedQueue.Enqueue(tempNode.myData());
+                sortedQueue.Enqueue(tempNode.data());
             } else {
                 // Check if right side is done but left is not.
                 if (secondHalf.headNode() == null) {
                     tempNode = firstHalf.Dequeue();
-                    sortedQueue.Enqueue(tempNode.myData());
+                    sortedQueue.Enqueue(tempNode.data());
                 } else {
                     // Both sides not done. compare left and right values.
-                    if (firstHalf.headNode().myData() > secondHalf.headNode().myData()) {
+                    if (firstHalf.headNode().data() > secondHalf.headNode().data()) {
                         tempNode = secondHalf.Dequeue();
-                        sortedQueue.Enqueue(tempNode.myData());
+                        sortedQueue.Enqueue(tempNode.data());
                     } else {
                         tempNode = firstHalf.Dequeue();
-                        sortedQueue.Enqueue(tempNode.myData());
+                        sortedQueue.Enqueue(tempNode.data());
                     }
                 }
             }
@@ -444,23 +444,23 @@ public class Controller {
     protected void ListInsertionSort() {
         int currentIndex;
         char tempChar;
-        CharNode currentNode = insertList.headNode().nextNode();
-        CharNode tempNode;
-        CharNode highestNode = insertList.headNode();
+        LinkedNode currentNode = insertList.headNode().next();
+        LinkedNode tempNode;
+        LinkedNode highestNode = insertList.headNode();
 
         // Loop until all values are sorted.
         for (currentIndex = 1; currentIndex < charNumber; currentIndex++) {
             // Compare values. Continually loop until null pointer or proper order is found.
             tempNode = highestNode;
-            while ((currentNode.prevNode() != null) && (currentNode.myData() < tempNode.myData())) {
-                tempChar = currentNode.myData();
-                currentNode.myData(tempNode.myData());
-                tempNode.myData(tempChar);
-                tempNode = tempNode.prevNode();
-                currentNode = currentNode.prevNode();
+            while ((currentNode.prev() != null) && (currentNode.data() < tempNode.data())) {
+                tempChar = currentNode.data();
+                currentNode.data(tempNode.data());
+                tempNode.data(tempChar);
+                tempNode = tempNode.prev();
+                currentNode = currentNode.prev();
             }
-            highestNode = highestNode.nextNode();
-            currentNode = highestNode.nextNode();
+            highestNode = highestNode.next();
+            currentNode = highestNode.next();
         }
     }
 
@@ -550,17 +550,17 @@ public class Controller {
      */
     protected void ListBinaryInsertionSort() {
         int currentIndex;
-        CharNode currentNode = bInsertList.headNode().nextNode();
-        CharNode highestNode = bInsertList.headNode();
+        LinkedNode currentNode = bInsertList.headNode().next();
+        LinkedNode highestNode = bInsertList.headNode();
 
         // Loop until all values are sorted.
         for (currentIndex = 1; currentIndex < charNumber; currentIndex++) {
             // Compare values. Continually loop until null pointer or proper order is found.
-            if (currentNode.myData() < highestNode.myData()) {
+            if (currentNode.data() < highestNode.data()) {
                 ListBinaryInsert(bInsertList.headNode(), currentNode, 0, currentIndex);
             }
-            highestNode = highestNode.nextNode();
-            currentNode = highestNode.nextNode();
+            highestNode = highestNode.next();
+            currentNode = highestNode.next();
         }
     }
 
@@ -573,24 +573,24 @@ public class Controller {
      * @param lowIndex The node number of the lower bound.
      * @param highIndex The node number of the upper bound.
      */
-    protected void ListBinaryInsert(CharNode lowNode, CharNode highNode, int lowIndex, int highIndex) {
+    protected void ListBinaryInsert(LinkedNode lowNode, LinkedNode highNode, int lowIndex, int highIndex) {
         int index;
         int midIndex;
         char tempChar;
-        CharNode midNode;
+        LinkedNode midNode;
 
         // Check if end of search.
         if (lowNode == highNode) {
 
             // End of search.
-            tempChar = highNode.myData();
+            tempChar = highNode.data();
 
             // Insert value at appropriate location.
-            if (lowNode.myData() > tempChar) {
-                lowNode.nextNode().myData(lowNode.myData());
-                highNode = highNode.prevNode();
+            if (lowNode.data() > tempChar) {
+                lowNode.next().data(lowNode.data());
+                highNode = highNode.prev();
             }
-            highNode.myData(tempChar);
+            highNode.data(tempChar);
 
         } else {
 
@@ -598,34 +598,34 @@ public class Controller {
             midIndex = (lowIndex + highIndex) / 2;
             midNode = lowNode;
             for (index = lowIndex; index < midIndex; index++) {
-                midNode = midNode.nextNode();
+                midNode = midNode.next();
             }
 
             // Check for value match.
-            if (midNode.myData() == highNode.myData()) {
+            if (midNode.data() == highNode.data()) {
 
-                tempChar = highNode.myData();
-                while (highNode != midNode.nextNode()) {
-                    highNode.myData(highNode.prevNode().myData());
-                    highNode = highNode.prevNode();
+                tempChar = highNode.data();
+                while (highNode != midNode.next()) {
+                    highNode.data(highNode.prev().data());
+                    highNode = highNode.prev();
                 }
-                midNode.nextNode().myData(tempChar);
+                midNode.next().data(tempChar);
                 ListBinaryInsert(lowNode, midNode, lowIndex, midIndex);
 
             } else {
-                if (midNode.myData() > highNode.myData()) {
+                if (midNode.data() > highNode.data()) {
 
                     // Move all prior values down by one since second half of list was eliminated.
-                    tempChar = highNode.myData();
+                    tempChar = highNode.data();
                     while (highNode != midNode) {
-                        highNode.myData(highNode.prevNode().myData());
-                        highNode = highNode.prevNode();
+                        highNode.data(highNode.prev().data());
+                        highNode = highNode.prev();
                     }
-                    midNode.myData(tempChar);
+                    midNode.data(tempChar);
                     ListBinaryInsert(lowNode, midNode, lowIndex, midIndex);
 
                 } else {
-                    ListBinaryInsert((midNode.nextNode()), highNode, (midIndex + 1), highIndex);
+                    ListBinaryInsert((midNode.next()), highNode, (midIndex + 1), highIndex);
                 }
             }
         }
@@ -673,7 +673,7 @@ public class Controller {
      */
     protected void PrintAllDataStructures() {
         int index;
-        CharNode tempNode;
+        LinkedNode tempNode;
 
         System.out.println();
 
@@ -689,8 +689,8 @@ public class Controller {
         System.out.println();
         System.out.print(" List:  ");
         while (tempNode != null) {
-            System.out.print(" " + tempNode.myData());
-            tempNode = tempNode.nextNode();
+            System.out.print(" " + tempNode.data());
+            tempNode = tempNode.next();
         }
         System.out.println();
         System.out.println();
@@ -707,8 +707,8 @@ public class Controller {
         System.out.println();
         System.out.print(" List:  ");
         while (tempNode != null) {
-            System.out.print(" " + tempNode.myData());
-            tempNode = tempNode.nextNode();
+            System.out.print(" " + tempNode.data());
+            tempNode = tempNode.next();
         }
         System.out.println();
         System.out.println();
@@ -725,8 +725,8 @@ public class Controller {
         System.out.println();
         System.out.print(" List:  ");
         while (tempNode != null) {
-            System.out.print(" " + tempNode.myData());
-            tempNode = tempNode.nextNode();
+            System.out.print(" " + tempNode.data());
+            tempNode = tempNode.next();
         }
         System.out.println();
         System.out.println();
@@ -743,8 +743,8 @@ public class Controller {
         System.out.println();
         System.out.print(" List:  ");
         while (tempNode != null) {
-            System.out.print(" " + tempNode.myData());
-            tempNode = tempNode.nextNode();
+            System.out.print(" " + tempNode.data());
+            tempNode = tempNode.next();
         }
         System.out.println();
         System.out.println();
@@ -761,8 +761,8 @@ public class Controller {
         System.out.println();
         System.out.print(" List:  ");
         while (tempNode != null) {
-            System.out.print(" " + tempNode.myData());
-            tempNode = tempNode.nextNode();
+            System.out.print(" " + tempNode.data());
+            tempNode = tempNode.next();
         }
         System.out.println();
         System.out.println();
diff --git a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharNode.java b/a2/src/edu/wmich/cs3310/a2/DataStructures/CharNode.java
deleted file mode 100644
index 7ef6193b651f0823d5146c161234463886134411..0000000000000000000000000000000000000000
--- a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharNode.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package edu.wmich.cs3310.a2.DataStructures;
-
-
-/**
- * Node class for linked list.
- */
-public class CharNode {
-
-    //region Variables
-
-    private char data;
-    private CharNode nextNode;
-    private CharNode prevNode;
-
-    //endregion Variables
-
-
-
-    //region Properties
-
-    /**
-     * Getter for node char.
-     * @return The char that node holds.
-     */
-    public char myData() {
-        return data;
-    }
-
-
-
-    /**
-     * Setter for node char.
-     * @param data The char for node to hold.
-     */
-    public void myData(char data) {
-        this.data = data;
-    }
-
-
-    /**
-     * Getter for next node.
-     * @return The next node.
-     */
-    public CharNode nextNode() {
-        return nextNode;
-    }
-
-
-    /**
-     * Setter for next node.
-     * @param nextNode The next node to hold.
-     */
-    public void nextNode(CharNode nextNode) {
-        this.nextNode = nextNode;
-    }
-
-
-    /**
-     * Getter for previous node.
-     * @return The previous node.
-     */
-    public CharNode prevNode() {
-        return prevNode;
-    }
-
-
-    /**
-     * Setter for previous node.
-     * @param prevNode The previous node.
-     */
-    public void prevNode(CharNode prevNode) {
-        this.prevNode = prevNode;
-    }
-
-    //endregion Properties
-
-}
diff --git a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharList.java b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedList.java
similarity index 66%
rename from a2/src/edu/wmich/cs3310/a2/DataStructures/CharList.java
rename to a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedList.java
index 31c0c8fa637800125ba9a5b7453c99d693e37bb4..422a1e20eb485f15995d5838d1f8dd631a76b1ee 100644
--- a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharList.java
+++ b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedList.java
@@ -2,14 +2,14 @@ package edu.wmich.cs3310.a2.DataStructures;
 
 
 /**
- * Doubly linked list using CharNode for nodes.
+ * Doubly linked list using LinkedNode for nodes.
  */
-public class CharList {
+public class LinkedList {
 
     //region Variables
 
-    protected CharNode firstNode;
-    protected CharNode lastNode;
+    protected LinkedNode firstNode;
+    protected LinkedNode lastNode;
 
     //endregion Variables
 
@@ -20,7 +20,7 @@ public class CharList {
     /**
      * Base constructor.
      */
-    public CharList() {
+    public LinkedList() {
 
     }
 
@@ -34,7 +34,7 @@ public class CharList {
      * Getter for first node in list.
      * @return First node of list.
      */
-    public CharNode firstNode() {
+    public LinkedNode firstNode() {
         return firstNode;
     }
 
@@ -43,7 +43,7 @@ public class CharList {
      * Getter for last node in list.
      * @return Last node of list.
      */
-    public CharNode lastNode() {
+    public LinkedNode lastNode() {
         return lastNode;
     }
 
@@ -59,8 +59,8 @@ public class CharList {
      * @param index Index of node to retrieve.
      * @return Retrieved node or null if failure.
      */
-    public CharNode Retrieve(int index) {
-        CharNode tempNode;
+    public LinkedNode Retrieve(int index) {
+        LinkedNode tempNode;
         int tempIndex = 0;
 
         // Check that index is valid.
@@ -72,7 +72,7 @@ public class CharList {
 
         // Loop until index is found or all nodes are searched.
         while (tempIndex < index && tempNode != null) {
-            tempNode = tempNode.nextNode();
+            tempNode = tempNode.next();
             tempIndex++;
         }
 
@@ -87,10 +87,10 @@ public class CharList {
      * @return True on success or false on failure.
      */
     public Boolean Insert(char character, int index) {
-        CharNode newNode = new CharNode();
-        CharNode tempNode;
-        CharNode nextPlaceholder;
-        CharNode prevPlaceholder;
+        LinkedNode newNode = new LinkedNode();
+        LinkedNode tempNode;
+        LinkedNode nextPlaceholder;
+        LinkedNode prevPlaceholder;
 
         // Get node directly before desired index.
         tempNode = Retrieve((index - 1));
@@ -100,7 +100,7 @@ public class CharList {
             return false;
         }
 
-        newNode.myData(character);
+        newNode.data(character);
 
         // Check if list is empty.
         if (firstNode == null) {
@@ -110,18 +110,18 @@ public class CharList {
             nextPlaceholder = Retrieve(index);
             prevPlaceholder = tempNode;
 
-            // Set nextNode properties.
-            newNode.nextNode(nextPlaceholder);
+            // Set next properties.
+            newNode.next(nextPlaceholder);
             if (nextPlaceholder != null) {
-                nextPlaceholder.prevNode(newNode);
+                nextPlaceholder.prev(newNode);
             } else {
                 lastNode = newNode;
             }
 
-            // Set prevNode properties.
-            newNode.prevNode(prevPlaceholder);
+            // Set prev properties.
+            newNode.prev(prevPlaceholder);
             if (prevPlaceholder != null) {
-                prevPlaceholder.nextNode(newNode);
+                prevPlaceholder.next(newNode);
             } else {
                 firstNode = newNode;
             }
@@ -135,10 +135,10 @@ public class CharList {
      * @param index Index of node to delete.
      * @return Deleted node or null on failure.
      */
-    public CharNode Delete(int index) {
-        CharNode foundNode;
-        CharNode nextPlaceholder;
-        CharNode prevPlaceholder;
+    public LinkedNode Delete(int index) {
+        LinkedNode foundNode;
+        LinkedNode nextPlaceholder;
+        LinkedNode prevPlaceholder;
 
         foundNode = Retrieve(index);
 
@@ -147,25 +147,25 @@ public class CharList {
             return null;
         }
 
-        nextPlaceholder = foundNode.nextNode();
-        prevPlaceholder = foundNode.prevNode();
+        nextPlaceholder = foundNode.next();
+        prevPlaceholder = foundNode.prev();
 
         // Handling for next property.
         if (prevPlaceholder != null) {
-            prevPlaceholder.nextNode(nextPlaceholder);
+            prevPlaceholder.next(nextPlaceholder);
         } else {
             firstNode = nextPlaceholder;
         }
 
         // Handling for prev property.
         if (nextPlaceholder != null) {
-            nextPlaceholder.prevNode(prevPlaceholder);
+            nextPlaceholder.prev(prevPlaceholder);
         } else {
             lastNode = prevPlaceholder;
         }
 
-        foundNode.nextNode(null);
-        foundNode.prevNode(null);
+        foundNode.next(null);
+        foundNode.prev(null);
         return foundNode;
     }
 
@@ -175,20 +175,20 @@ public class CharList {
      * @param character Character to delete.
      * @return Deleted node or null on failure.
      */
-    public CharNode Delete(char character) {
-        CharNode tempNode = firstNode;
-        CharNode foundNode = null;
-        CharNode nextPlaceholder;
-        CharNode prevPlaceholder;
+    public LinkedNode Delete(char character) {
+        LinkedNode tempNode = firstNode;
+        LinkedNode foundNode = null;
+        LinkedNode nextPlaceholder;
+        LinkedNode prevPlaceholder;
 
         // Continue until character is found or all nodes are searched.
         while (tempNode != null) {
 
-            if (tempNode.myData() == character) {
+            if (tempNode.data() == character) {
                 foundNode = tempNode;
                 tempNode = null;
             } else {
-                tempNode = tempNode.nextNode();
+                tempNode = tempNode.next();
             }
         }
 
@@ -196,25 +196,25 @@ public class CharList {
         if (foundNode == null) {
             return null;
         } else {
-            nextPlaceholder = foundNode.nextNode();
-            prevPlaceholder = foundNode.prevNode();
+            nextPlaceholder = foundNode.next();
+            prevPlaceholder = foundNode.prev();
 
             // Handling for next property.
             if (prevPlaceholder != null) {
-                prevPlaceholder.nextNode(nextPlaceholder);
+                prevPlaceholder.next(nextPlaceholder);
             } else {
                 firstNode = nextPlaceholder;
             }
 
             // Handling for prev property.
             if (nextPlaceholder != null) {
-                nextPlaceholder.prevNode(prevPlaceholder);
+                nextPlaceholder.prev(prevPlaceholder);
             } else {
                 lastNode = prevPlaceholder;
             }
 
-            foundNode.nextNode(null);
-            foundNode.prevNode(null);
+            foundNode.next(null);
+            foundNode.prev(null);
             return foundNode;
         }
     }
diff --git a/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedNode.java b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedNode.java
new file mode 100644
index 0000000000000000000000000000000000000000..c258d7e165449cb711bcefb69f9f1d32eec4a978
--- /dev/null
+++ b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedNode.java
@@ -0,0 +1,95 @@
+package edu.wmich.cs3310.a2.DataStructures;
+
+
+/**
+ * Node class for linked list.
+ */
+public class LinkedNode {
+
+    //region Variables
+
+    private int stabilityInt;       // Optional int value to help determine if sort method is stable.
+    private char aChar;             // Primary data object for node to hold.
+    private LinkedNode nextNode;    // Pointer to next node.
+    private LinkedNode prevNode;    // Pointer to prev node.
+
+    //endregion Variables
+
+
+
+    //region Properties
+
+    /**
+     * Getter for node int.
+     * @return The int that node holds.
+     */
+    public int stabilityInt() {
+        return stabilityInt;
+    }
+
+
+    /**
+     * Setter for node int.
+     * @param data The int for node to hold.
+     */
+    public void stabilityInt(int data) {
+        this.stabilityInt = data;
+    }
+
+
+    /**
+     * Getter for node char.
+     * @return The char that node holds.
+     */
+    public char data() {
+        return aChar;
+    }
+
+
+    /**
+     * Setter for node char.
+     * @param data The char for node to hold.
+     */
+    public void data(char data) {
+        this.aChar = data;
+    }
+
+
+    /**
+     * Getter for next node.
+     * @return The next node.
+     */
+    public LinkedNode next() {
+        return nextNode;
+    }
+
+
+    /**
+     * Setter for next node.
+     * @param nextNode The next node to hold.
+     */
+    public void next(LinkedNode nextNode) {
+        this.nextNode = nextNode;
+    }
+
+
+    /**
+     * Getter for previous node.
+     * @return The previous node.
+     */
+    public LinkedNode prev() {
+        return prevNode;
+    }
+
+
+    /**
+     * Setter for previous node.
+     * @param prevNode The previous node.
+     */
+    public void prev(LinkedNode prevNode) {
+        this.prevNode = prevNode;
+    }
+
+    //endregion Properties
+
+}
diff --git a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharQueue.java b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedQueue.java
similarity index 51%
rename from a2/src/edu/wmich/cs3310/a2/DataStructures/CharQueue.java
rename to a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedQueue.java
index f04063038af08114afed97073d1c9c87da939f1b..cf227aa363afd18239ea083ee67946943ac26965 100644
--- a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharQueue.java
+++ b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedQueue.java
@@ -4,7 +4,7 @@ package edu.wmich.cs3310.a2.DataStructures;
 /**
  * Queue implementation of linked list.
  */
-public class CharQueue extends CharList {
+public class LinkedQueue extends LinkedList {
 
     //region Variables
 
@@ -16,7 +16,7 @@ public class CharQueue extends CharList {
 
     //region Controllers
 
-    public CharQueue() {
+    public LinkedQueue() {
 
     }
 
@@ -30,7 +30,7 @@ public class CharQueue extends CharList {
      * Getter for queue head node.
      * @return Node currently in head position.
      */
-    public CharNode headNode() {
+    public LinkedNode headNode() {
         return firstNode;
     }
 
@@ -39,7 +39,7 @@ public class CharQueue extends CharList {
      * Getter for queue tail node.
      * @return Node currently in tail position.
      */
-    public CharNode tailNode() {
+    public LinkedNode tailNode() {
         return lastNode;
     }
 
@@ -54,45 +54,16 @@ public class CharQueue extends CharList {
      * @param character Character for node to hold.
      */
     public void Enqueue(char character) {
-        CharNode newNode = new CharNode();
-        newNode.myData(character);
+        LinkedNode newNode = new LinkedNode();
+        newNode.data(character);
 
         // Check if list is empty.
         if (firstNode == null) {
             firstNode = newNode;
             lastNode = newNode;
         } else {
-            newNode.prevNode(lastNode);
-            lastNode.nextNode(newNode);
-            lastNode = newNode;
-        }
-    }
-
-
-    /**
-     * Adds new node to tail of list, by acting like list is
-     * only a singly-linked linked list.
-     * @param character Character for node to hold.
-     */
-    public void Enqueue_Singly(char character) {
-        CharNode tempNode;
-        CharNode newNode = new CharNode();
-        newNode.myData(character);
-
-        // Check if list is empty.
-        if (firstNode == null) {
-            firstNode = newNode;
-            lastNode = newNode;
-        } else {
-            tempNode = firstNode;
-
-            // Find last node in list.
-            while (tempNode.nextNode() != null) {
-                tempNode = tempNode.nextNode();
-            }
-
-            tempNode.nextNode(newNode);
-            newNode.prevNode(tempNode);
+            newNode.prev(lastNode);
+            lastNode.next(newNode);
             lastNode = newNode;
         }
     }
@@ -102,22 +73,22 @@ public class CharQueue extends CharList {
      * Removes node from list head.
      * @return Removed node or null if list is empty.
      */
-    public CharNode Dequeue() {
-        CharNode tempNode = new CharNode();
+    public LinkedNode Dequeue() {
+        LinkedNode tempNode = new LinkedNode();
 
         // Check if list is empty.
         if (firstNode == null) {
             return null;
         } else {
             tempNode = firstNode;
-            firstNode = firstNode.nextNode();
-            tempNode.nextNode(null);
+            firstNode = firstNode.next();
+            tempNode.next(null);
 
             // Check if list was only one element.
             if (firstNode == null) {
                 lastNode = null;
             } else {
-                firstNode.prevNode(null);
+                firstNode.prev(null);
             }
         }
         return tempNode;
diff --git a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharStack.java b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedStack.java
similarity index 73%
rename from a2/src/edu/wmich/cs3310/a2/DataStructures/CharStack.java
rename to a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedStack.java
index acbf05b09b2975c41ca373001444ead71351cf53..144d74efc0b9a6261fb2bb20255822ba61bf5cab 100644
--- a/a2/src/edu/wmich/cs3310/a2/DataStructures/CharStack.java
+++ b/a2/src/edu/wmich/cs3310/a2/DataStructures/LinkedStack.java
@@ -4,7 +4,7 @@ package edu.wmich.cs3310.a2.DataStructures;
 /**
  * Stack implementation of linked list.
  */
-public class CharStack extends CharList {
+public class LinkedStack extends LinkedList {
 
     //region Variables
 
@@ -16,7 +16,7 @@ public class CharStack extends CharList {
 
     //region Controllers
 
-    public CharStack() {
+    public LinkedStack() {
 
     }
 
@@ -31,7 +31,7 @@ public class CharStack extends CharList {
      * Getter for stack head node.
      * @return Node currently in head position.
      */
-    public CharNode headNode() {
+    public LinkedNode headNode() {
         return firstNode;
     }
 
@@ -46,16 +46,16 @@ public class CharStack extends CharList {
      * @param character Character for node to hold.
      */
     public void Push(char character) {
-        CharNode newNode = new CharNode();
-        newNode.myData(character);
+        LinkedNode newNode = new LinkedNode();
+        newNode.data(character);
 
         // Check if list is empty.
         if (firstNode == null) {
             firstNode = newNode;
             lastNode = newNode;
         } else {
-            newNode.nextNode(firstNode);
-            firstNode.prevNode(newNode);
+            newNode.next(firstNode);
+            firstNode.prev(newNode);
             firstNode = newNode;
         }
     }
@@ -65,22 +65,22 @@ public class CharStack extends CharList {
      * Removes top node from list head.
      * @return Removed node or null if list is empty.
      */
-    public CharNode Pop() {
-        CharNode tempNode;
+    public LinkedNode Pop() {
+        LinkedNode tempNode;
 
         // Check if list is empty.
         if (firstNode == null) {
             return null;
         } else {
             tempNode = firstNode;
-            firstNode = firstNode.nextNode();
-            tempNode.nextNode(null);
+            firstNode = firstNode.next();
+            tempNode.next(null);
 
             // Check if list was only one element.
             if (firstNode == null) {
                 lastNode = null;
             } else {
-                firstNode.prevNode(null);
+                firstNode.prev(null);
             }
         }
         return tempNode;
diff --git a/a2/tests/DataStructures/CharNodeTests.java b/a2/tests/DataStructures/CharNodeTests.java
deleted file mode 100644
index becdd1e2aafd539e2e6d24d1e7231c61f4dd7893..0000000000000000000000000000000000000000
--- a/a2/tests/DataStructures/CharNodeTests.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package DataStructures;
-
-import org.junit.Before;
-import org.junit.Assert;
-import org.junit.Test;
-
-import edu.wmich.cs3310.a2.DataStructures.CharNode;
-
-
-/**
- * Tests for CharNode class.
- */
-public class CharNodeTests {
-
-    //region Variables
-
-    CharNode aNode;
-
-    //endregion Variables
-
-
-
-    //region Tests
-
-    @Before
-    public void setUp() {
-        aNode = new CharNode();
-    }
-
-
-    @Test
-    public void TestNodeData() {
-        aNode.myData('a');
-        Assert.assertEquals('a', aNode.myData());
-        aNode.myData('b');
-        Assert.assertEquals('b', aNode.myData());
-    }
-
-
-    @Test
-    public void TestNextNode() {
-        Assert.assertNull(aNode.nextNode());
-        CharNode nextNode = new CharNode();
-        nextNode.myData('c');
-        aNode.nextNode(nextNode);
-        Assert.assertEquals(nextNode, aNode.nextNode());
-        Assert.assertEquals('c', aNode.nextNode().myData());
-    }
-
-
-    @Test
-    public void TestPrevNode() {
-        Assert.assertNull(aNode.prevNode());
-        CharNode prevNode = new CharNode();
-        prevNode.myData('d');
-        aNode.prevNode(prevNode);
-        Assert.assertEquals(prevNode, aNode.prevNode());
-        Assert.assertEquals('d', aNode.prevNode().myData());
-    }
-
-    //endregion Tests
-}
diff --git a/a2/tests/DataStructures/CharQueueTests.java b/a2/tests/DataStructures/CharQueueTests.java
deleted file mode 100644
index c75aac17ad49c4425128c778d2f91c6f37c7dc76..0000000000000000000000000000000000000000
--- a/a2/tests/DataStructures/CharQueueTests.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package DataStructures;
-
-import org.junit.Before;
-import org.junit.Assert;
-import org.junit.Test;
-
-import edu.wmich.cs3310.a2.DataStructures.CharQueue;
-import edu.wmich.cs3310.a2.DataStructures.CharNode;
-
-
-/**
- * Tests for CharQueue class.
- */
-public class CharQueueTests {
-
-    //region Variables
-
-    CharNode aNode;
-    CharQueue aQueue;
-
-    //endregion Variables
-
-    //region Tests
-
-    @Before
-    public void setUp() {
-        aNode = new CharNode();
-        aQueue = new CharQueue();
-    }
-
-
-    @Test
-    public void Test_Enqueue() {
-        Assert.assertNull(aQueue.headNode());
-        Assert.assertNull(aQueue.tailNode());
-
-        // Test enqueueing with one node.
-        aQueue.Enqueue('a');
-        Assert.assertEquals('a', aQueue.headNode().myData());
-        Assert.assertNull(aQueue.headNode().prevNode());
-        Assert.assertNull(aQueue.tailNode().nextNode());
-        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode());
-
-        // Test enqueueing with two nodes.
-        aQueue.Enqueue('b');
-        Assert.assertEquals('a', aQueue.headNode().myData());
-        Assert.assertEquals('b', aQueue.tailNode().myData());
-        Assert.assertNull(aQueue.headNode().prevNode());
-        Assert.assertNull(aQueue.tailNode().nextNode());
-        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prevNode());
-        Assert.assertEquals(aQueue.tailNode(), aQueue.headNode().nextNode());
-
-        // Test enqueueing with three nodes.
-        aQueue.Enqueue('c');
-        Assert.assertEquals('a', aQueue.headNode().myData());
-        Assert.assertEquals('b', aQueue.headNode().nextNode().myData());
-        Assert.assertEquals('c', aQueue.tailNode().myData());
-        Assert.assertNull(aQueue.headNode().prevNode());
-        Assert.assertNull(aQueue.tailNode().nextNode());
-        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prevNode().prevNode());
-        Assert.assertEquals(aQueue.headNode().nextNode(), aQueue.tailNode().prevNode());
-        Assert.assertEquals(aQueue.headNode().nextNode().nextNode(), aQueue.tailNode());
-    }
-
-
-    @Test
-    public void Test_Enqueue_Singly() {
-        Assert.assertNull(aQueue.headNode());
-        Assert.assertNull(aQueue.tailNode());
-
-        // Test enqueueing with one node.
-        aQueue.Enqueue_Singly('a');
-        Assert.assertEquals('a', aQueue.headNode().myData());
-        Assert.assertNull(aQueue.headNode().prevNode());
-        Assert.assertNull(aQueue.tailNode().nextNode());
-        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode());
-
-        // Test enqueueing with two nodes.
-        aQueue.Enqueue_Singly('b');
-        Assert.assertEquals('a', aQueue.headNode().myData());
-        Assert.assertEquals('b', aQueue.tailNode().myData());
-        Assert.assertNull(aQueue.headNode().prevNode());
-        Assert.assertNull(aQueue.tailNode().nextNode());
-        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prevNode());
-        Assert.assertEquals(aQueue.tailNode(), aQueue.headNode().nextNode());
-
-        // Test enqueueing with three nodes.
-        aQueue.Enqueue_Singly('c');
-        Assert.assertEquals('a', aQueue.headNode().myData());
-        Assert.assertEquals('b', aQueue.headNode().nextNode().myData());
-        Assert.assertEquals('c', aQueue.tailNode().myData());
-        Assert.assertNull(aQueue.headNode().prevNode());
-        Assert.assertNull(aQueue.tailNode().nextNode());
-        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prevNode().prevNode());
-        Assert.assertEquals(aQueue.headNode().nextNode(), aQueue.tailNode().prevNode());
-        Assert.assertEquals(aQueue.headNode().nextNode().nextNode(), aQueue.tailNode());
-    }
-
-
-    @Test
-    public void Test_Dequeue() {
-        aQueue.Enqueue('a');
-        aQueue.Enqueue('b');
-        aQueue.Enqueue('c');
-
-        // Test dequeueing with three nodes.
-        aNode = aQueue.Dequeue();
-        Assert.assertNotNull(aNode);
-        Assert.assertEquals('a', aNode.myData());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertEquals('b', aQueue.headNode().myData());
-        Assert.assertEquals('c', aQueue.tailNode().myData());
-        Assert.assertNull(aQueue.headNode().prevNode());
-        Assert.assertNull(aQueue.tailNode().nextNode());
-        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prevNode());
-        Assert.assertEquals(aQueue.tailNode(), aQueue.headNode().nextNode());
-
-        // Test dequeueing with two nodes.
-        aNode = aQueue.Dequeue();
-        Assert.assertNotNull(aNode);
-        Assert.assertEquals('b', aNode.myData());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertEquals('c', aQueue.headNode().myData());
-        Assert.assertNull(aQueue.headNode().prevNode());
-        Assert.assertNull(aQueue.headNode().nextNode());
-        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode());
-
-        // Test dequeueing with one node.
-        aNode = aQueue.Dequeue();
-        Assert.assertNotNull(aNode);
-        Assert.assertEquals('c', aNode.myData());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertNull(aQueue.headNode());
-        Assert.assertNull(aQueue.tailNode());
-
-        // Test dequeueing with zero nodes.
-        aNode = aQueue.Dequeue();
-        Assert.assertNull(aNode);
-    }
-
-
-
-    //endregion Tests
-}
diff --git a/a2/tests/DataStructures/CharStackTests.java b/a2/tests/DataStructures/CharStackTests.java
deleted file mode 100644
index bb5db1bfbfd28d4ff0350924fb5554f3246b0782..0000000000000000000000000000000000000000
--- a/a2/tests/DataStructures/CharStackTests.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package DataStructures;
-
-import org.junit.Before;
-import org.junit.Assert;
-import org.junit.Test;
-
-import edu.wmich.cs3310.a2.DataStructures.CharStack;
-import edu.wmich.cs3310.a2.DataStructures.CharNode;
-
-
-/**
- * Tests for CharStack class.
- */
-public class CharStackTests {
-
-    //region Variables
-
-    CharNode aNode;
-    CharStack aStack;
-
-    //endregion Variables
-
-    //region Tests
-
-    @Before
-    public void setUp() {
-        aNode = new CharNode();
-        aStack = new CharStack();
-    }
-
-
-    @Test
-    public void Test_Push() {
-        Assert.assertNull(aStack.headNode());
-
-        // Test pushing with 1 node.
-        aStack.Push('a');
-        Assert.assertEquals('a', aStack.headNode().myData());
-        Assert.assertNull(aStack.headNode().prevNode());
-        Assert.assertNull(aStack.headNode().nextNode());
-
-        // Test pushing with 2 nodes.
-        aStack.Push('b');
-        Assert.assertEquals('b', aStack.headNode().myData());
-        Assert.assertEquals('a', aStack.headNode().nextNode().myData());
-        Assert.assertNull(aStack.headNode().prevNode());
-        Assert.assertNull(aStack.headNode().nextNode().nextNode());
-
-
-        // Test pushing with 3 nodes.
-        aStack.Push('c');
-        Assert.assertEquals('c', aStack.headNode().myData());
-        Assert.assertEquals('b', aStack.headNode().nextNode().myData());
-        Assert.assertEquals('a', aStack.headNode().nextNode().nextNode().myData());
-        Assert.assertNull(aStack.headNode().prevNode());
-        Assert.assertNull(aStack.headNode().nextNode().nextNode().nextNode());
-    }
-
-
-    @Test
-    public void Test_Pop() {
-        aStack.Push('a');
-        aStack.Push('b');
-        aStack.Push('c');
-
-        // Test popping with 3 nodes.
-        aNode = aStack.Pop();
-        Assert.assertNotNull(aNode);
-        Assert.assertEquals('c', aNode.myData());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertEquals('b', aStack.headNode().myData());
-        Assert.assertEquals('a', aStack.headNode().nextNode().myData());
-        Assert.assertNull(aStack.headNode().prevNode());
-        Assert.assertNull(aStack.headNode().nextNode().nextNode());
-
-        // Test popping with 2 nodes.
-        aNode = aStack.Pop();
-        Assert.assertNotNull(aNode);
-        Assert.assertEquals('b', aNode.myData());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertEquals('a', aStack.headNode().myData());
-        Assert.assertNull(aStack.headNode().prevNode());
-        Assert.assertNull(aStack.headNode().nextNode());
-
-        // Test popping with 1 node.
-        aNode = aStack.Pop();
-        Assert.assertNotNull(aNode);
-        Assert.assertEquals('a', aNode.myData());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertNull(aStack.headNode());
-
-        // Test popping with 0 nodes.
-        aNode = aStack.Pop();
-        Assert.assertNull(aNode);
-    }
-
-    //endregion Tests
-}
diff --git a/a2/tests/DataStructures/CharListTests.java b/a2/tests/DataStructures/LinkedListTests.java
similarity index 63%
rename from a2/tests/DataStructures/CharListTests.java
rename to a2/tests/DataStructures/LinkedListTests.java
index b1f5ab72b5108f6b6b2309452ea59ec4e8b15566..b98df7989cdc5b309459dabbd100b722c5b696bf 100644
--- a/a2/tests/DataStructures/CharListTests.java
+++ b/a2/tests/DataStructures/LinkedListTests.java
@@ -1,22 +1,22 @@
 package DataStructures;
 
+import edu.wmich.cs3310.a2.DataStructures.LinkedList;
 import org.junit.Before;
 import org.junit.Assert;
 import org.junit.Test;
 
-import edu.wmich.cs3310.a2.DataStructures.CharList;
-import edu.wmich.cs3310.a2.DataStructures.CharNode;
+import edu.wmich.cs3310.a2.DataStructures.LinkedNode;
 
 
 /**
- * Tests for CharList class.
+ * Tests for LinkedList class.
  */
-public class CharListTests {
+public class LinkedListTests {
 
     //region Variables
 
-    CharNode aNode;
-    CharList aList;
+    LinkedNode aNode;
+    LinkedList aList;
 
     //endregion Variables
 
@@ -26,8 +26,8 @@ public class CharListTests {
 
     @Before
     public void setUp() {
-        aNode = new CharNode();
-        aList = new CharList();
+        aNode = new LinkedNode();
+        aList = new LinkedList();
     }
 
 
@@ -38,23 +38,23 @@ public class CharListTests {
 
         // Test inserting with 1 node.
         Assert.assertTrue(aList.Insert('a', 0));
-        Assert.assertEquals('a', aList.firstNode().myData());
+        Assert.assertEquals('a', aList.firstNode().data());
         Assert.assertEquals(aList.firstNode(), aList.lastNode());
 
         // Test inserting with 2 nodes.
         Assert.assertTrue(aList.Insert('b', 0));
-        Assert.assertEquals('b', aList.firstNode().myData());
-        Assert.assertEquals('a', aList.lastNode().myData());
-        Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode());
-        Assert.assertEquals(aList.lastNode(), aList.firstNode().nextNode());
+        Assert.assertEquals('b', aList.firstNode().data());
+        Assert.assertEquals('a', aList.lastNode().data());
+        Assert.assertEquals(aList.firstNode(), aList.lastNode().prev());
+        Assert.assertEquals(aList.lastNode(), aList.firstNode().next());
 
         // Test inserting with 3 nodes.
         Assert.assertTrue(aList.Insert('c', 0));
-        Assert.assertEquals('c', aList.firstNode().myData());
-        Assert.assertEquals('b', aList.firstNode().nextNode().myData());
-        Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode().prevNode());
-        Assert.assertEquals(aList.firstNode().nextNode(), aList.lastNode().prevNode());
-        Assert.assertEquals(aList.firstNode().nextNode().nextNode(), aList.lastNode());
+        Assert.assertEquals('c', aList.firstNode().data());
+        Assert.assertEquals('b', aList.firstNode().next().data());
+        Assert.assertEquals(aList.firstNode(), aList.lastNode().prev().prev());
+        Assert.assertEquals(aList.firstNode().next(), aList.lastNode().prev());
+        Assert.assertEquals(aList.firstNode().next().next(), aList.lastNode());
     }
 
 
@@ -65,23 +65,23 @@ public class CharListTests {
 
         // Test inserting with 1 node.
         Assert.assertTrue(aList.Insert('a', 0));
-        Assert.assertEquals('a', aList.firstNode().myData());
+        Assert.assertEquals('a', aList.firstNode().data());
         Assert.assertEquals(aList.firstNode(), aList.lastNode());
 
         // Test inserting with 2 nodes.
         Assert.assertTrue(aList.Insert('b', 1));
-        Assert.assertEquals('a', aList.firstNode().myData());
-        Assert.assertEquals('b', aList.lastNode().myData());
-        Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode());
-        Assert.assertEquals(aList.lastNode(), aList.firstNode().nextNode());
+        Assert.assertEquals('a', aList.firstNode().data());
+        Assert.assertEquals('b', aList.lastNode().data());
+        Assert.assertEquals(aList.firstNode(), aList.lastNode().prev());
+        Assert.assertEquals(aList.lastNode(), aList.firstNode().next());
 
         // Test inserting with 3 nodes.
         Assert.assertTrue(aList.Insert('c', 2));
-        Assert.assertEquals('c', aList.lastNode().myData());
-        Assert.assertEquals('b', aList.lastNode().prevNode().myData());
-        Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode().prevNode());
-        Assert.assertEquals(aList.firstNode().nextNode(), aList.lastNode().prevNode());
-        Assert.assertEquals(aList.firstNode().nextNode().nextNode(), aList.lastNode());
+        Assert.assertEquals('c', aList.lastNode().data());
+        Assert.assertEquals('b', aList.lastNode().prev().data());
+        Assert.assertEquals(aList.firstNode(), aList.lastNode().prev().prev());
+        Assert.assertEquals(aList.firstNode().next(), aList.lastNode().prev());
+        Assert.assertEquals(aList.firstNode().next().next(), aList.lastNode());
     }
 
 
@@ -111,29 +111,29 @@ public class CharListTests {
         // Test deleting with 3 nodes.
         aNode = aList.Delete(0);
         Assert.assertNotNull(aNode);
-        Assert.assertEquals('a', aNode.myData());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertEquals('b', aList.firstNode().myData());
-        Assert.assertEquals('c', aList.lastNode().myData());
-        Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode());
-        Assert.assertEquals(aList.lastNode(), aList.firstNode().nextNode());
+        Assert.assertEquals('a', aNode.data());
+        Assert.assertNull(aNode.next());
+        Assert.assertNull(aNode.prev());
+        Assert.assertEquals('b', aList.firstNode().data());
+        Assert.assertEquals('c', aList.lastNode().data());
+        Assert.assertEquals(aList.firstNode(), aList.lastNode().prev());
+        Assert.assertEquals(aList.lastNode(), aList.firstNode().next());
 
         // Test deleting with 2 nodes.
         aNode = aList.Delete(0);
         Assert.assertNotNull(aNode);
-        Assert.assertEquals('b', aNode.myData());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertEquals('c', aList.firstNode().myData());
+        Assert.assertEquals('b', aNode.data());
+        Assert.assertNull(aNode.next());
+        Assert.assertNull(aNode.prev());
+        Assert.assertEquals('c', aList.firstNode().data());
         Assert.assertEquals(aList.firstNode(), aList.lastNode());
 
         // Test deleting with 1 nodes.
         aNode = aList.Delete(0);
         Assert.assertNotNull(aNode);
-        Assert.assertEquals('c', aNode.myData());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertNull(aNode.prevNode());
+        Assert.assertEquals('c', aNode.data());
+        Assert.assertNull(aNode.next());
+        Assert.assertNull(aNode.prev());
         Assert.assertNull(aList.firstNode());
         Assert.assertNull(aList.lastNode());
     }
@@ -148,29 +148,29 @@ public class CharListTests {
         // Test deleting with 3 nodes.
         aNode = aList.Delete(2);
         Assert.assertNotNull(aNode);
-        Assert.assertEquals('c', aNode.myData());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertEquals('a', aList.firstNode().myData());
-        Assert.assertEquals('b', aList.lastNode().myData());
-        Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode());
-        Assert.assertEquals(aList.lastNode(), aList.firstNode().nextNode());
+        Assert.assertEquals('c', aNode.data());
+        Assert.assertNull(aNode.next());
+        Assert.assertNull(aNode.prev());
+        Assert.assertEquals('a', aList.firstNode().data());
+        Assert.assertEquals('b', aList.lastNode().data());
+        Assert.assertEquals(aList.firstNode(), aList.lastNode().prev());
+        Assert.assertEquals(aList.lastNode(), aList.firstNode().next());
 
         // Test deleting with 2 nodes.
         aNode = aList.Delete(1);
         Assert.assertNotNull(aNode);
-        Assert.assertEquals('b', aNode.myData());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertEquals('a', aList.firstNode().myData());
+        Assert.assertEquals('b', aNode.data());
+        Assert.assertNull(aNode.next());
+        Assert.assertNull(aNode.prev());
+        Assert.assertEquals('a', aList.firstNode().data());
         Assert.assertEquals(aList.firstNode(), aList.lastNode());
 
         // Test deleting with 1 nodes.
         aNode = aList.Delete(0);
         Assert.assertNotNull(aNode);
-        Assert.assertEquals('a', aNode.myData());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertNull(aNode.prevNode());
+        Assert.assertEquals('a', aNode.data());
+        Assert.assertNull(aNode.next());
+        Assert.assertNull(aNode.prev());
         Assert.assertNull(aList.firstNode());
         Assert.assertNull(aList.lastNode());
     }
@@ -202,30 +202,30 @@ public class CharListTests {
         // Test deleting with 3 nodes.
         aNode = aList.Delete('c');
         Assert.assertNotNull(aNode);
-        Assert.assertEquals('c', aNode.myData());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertEquals('a', aList.firstNode().myData());
-        Assert.assertEquals('b', aList.lastNode().myData());
-        Assert.assertEquals(aList.firstNode(), aList.lastNode().prevNode());
-        Assert.assertEquals(aList.lastNode(), aList.firstNode().nextNode());
+        Assert.assertEquals('c', aNode.data());
+        Assert.assertNull(aNode.next());
+        Assert.assertNull(aNode.prev());
+        Assert.assertEquals('a', aList.firstNode().data());
+        Assert.assertEquals('b', aList.lastNode().data());
+        Assert.assertEquals(aList.firstNode(), aList.lastNode().prev());
+        Assert.assertEquals(aList.lastNode(), aList.firstNode().next());
 
         // Test deleting with 2 nodes.
         aNode = aList.Delete('b');
         Assert.assertNotNull(aNode);
-        Assert.assertEquals('b', aNode.myData());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertNull(aNode.prevNode());
-        Assert.assertEquals('a', aList.firstNode().myData());
+        Assert.assertEquals('b', aNode.data());
+        Assert.assertNull(aNode.next());
+        Assert.assertNull(aNode.prev());
+        Assert.assertEquals('a', aList.firstNode().data());
         Assert.assertEquals(aList.firstNode(), aList.lastNode());
 
 
         // Test deleting with 1 nodes.
         aNode = aList.Delete('a');
         Assert.assertNotNull(aNode);
-        Assert.assertEquals('a', aNode.myData());
-        Assert.assertNull(aNode.nextNode());
-        Assert.assertNull(aNode.prevNode());
+        Assert.assertEquals('a', aNode.data());
+        Assert.assertNull(aNode.next());
+        Assert.assertNull(aNode.prev());
         Assert.assertNull(aList.firstNode());
         Assert.assertNull(aList.lastNode());
     }
diff --git a/a2/tests/DataStructures/LinkedNodeTests.java b/a2/tests/DataStructures/LinkedNodeTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ab63cecb1115f01b9b3cb216eeeef3dfea16ff4
--- /dev/null
+++ b/a2/tests/DataStructures/LinkedNodeTests.java
@@ -0,0 +1,61 @@
+package DataStructures;
+
+import edu.wmich.cs3310.a2.DataStructures.LinkedNode;
+import org.junit.Before;
+import org.junit.Assert;
+import org.junit.Test;
+
+
+/**
+ * Tests for LinkedNode class.
+ */
+public class LinkedNodeTests {
+
+    //region Variables
+
+    LinkedNode aNode;
+
+    //endregion Variables
+
+
+
+    //region Tests
+
+    @Before
+    public void setUp() {
+        aNode = new LinkedNode();
+    }
+
+
+    @Test
+    public void TestNodeData() {
+        aNode.data('a');
+        Assert.assertEquals('a', aNode.data());
+        aNode.data('b');
+        Assert.assertEquals('b', aNode.data());
+    }
+
+
+    @Test
+    public void TestNextNode() {
+        Assert.assertNull(aNode.next());
+        LinkedNode nextNode = new LinkedNode();
+        nextNode.data('c');
+        aNode.next(nextNode);
+        Assert.assertEquals(nextNode, aNode.next());
+        Assert.assertEquals('c', aNode.next().data());
+    }
+
+
+    @Test
+    public void TestPrevNode() {
+        Assert.assertNull(aNode.prev());
+        LinkedNode prevNode = new LinkedNode();
+        prevNode.data('d');
+        aNode.prev(prevNode);
+        Assert.assertEquals(prevNode, aNode.prev());
+        Assert.assertEquals('d', aNode.prev().data());
+    }
+
+    //endregion Tests
+}
diff --git a/a2/tests/DataStructures/LinkedQueueTests.java b/a2/tests/DataStructures/LinkedQueueTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ba21781d37fec4fe93f1aa7bb450638cf7540a5
--- /dev/null
+++ b/a2/tests/DataStructures/LinkedQueueTests.java
@@ -0,0 +1,113 @@
+package DataStructures;
+
+import edu.wmich.cs3310.a2.DataStructures.LinkedQueue;
+import org.junit.Before;
+import org.junit.Assert;
+import org.junit.Test;
+
+import edu.wmich.cs3310.a2.DataStructures.LinkedNode;
+
+
+/**
+ * Tests for LinkedQueue class.
+ */
+public class LinkedQueueTests {
+
+    //region Variables
+
+    LinkedNode aNode;
+    LinkedQueue aQueue;
+
+    //endregion Variables
+
+    //region Tests
+
+    @Before
+    public void setUp() {
+        aNode = new LinkedNode();
+        aQueue = new LinkedQueue();
+    }
+
+
+    @Test
+    public void Test_Enqueue() {
+        Assert.assertNull(aQueue.headNode());
+        Assert.assertNull(aQueue.tailNode());
+
+        // Test enqueueing with one node.
+        aQueue.Enqueue('a');
+        Assert.assertEquals('a', aQueue.headNode().data());
+        Assert.assertNull(aQueue.headNode().prev());
+        Assert.assertNull(aQueue.tailNode().next());
+        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode());
+
+        // Test enqueueing with two nodes.
+        aQueue.Enqueue('b');
+        Assert.assertEquals('a', aQueue.headNode().data());
+        Assert.assertEquals('b', aQueue.tailNode().data());
+        Assert.assertNull(aQueue.headNode().prev());
+        Assert.assertNull(aQueue.tailNode().next());
+        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prev());
+        Assert.assertEquals(aQueue.tailNode(), aQueue.headNode().next());
+
+        // Test enqueueing with three nodes.
+        aQueue.Enqueue('c');
+        Assert.assertEquals('a', aQueue.headNode().data());
+        Assert.assertEquals('b', aQueue.headNode().next().data());
+        Assert.assertEquals('c', aQueue.tailNode().data());
+        Assert.assertNull(aQueue.headNode().prev());
+        Assert.assertNull(aQueue.tailNode().next());
+        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prev().prev());
+        Assert.assertEquals(aQueue.headNode().next(), aQueue.tailNode().prev());
+        Assert.assertEquals(aQueue.headNode().next().next(), aQueue.tailNode());
+    }
+
+
+    @Test
+    public void Test_Dequeue() {
+        aQueue.Enqueue('a');
+        aQueue.Enqueue('b');
+        aQueue.Enqueue('c');
+
+        // Test dequeueing with three nodes.
+        aNode = aQueue.Dequeue();
+        Assert.assertNotNull(aNode);
+        Assert.assertEquals('a', aNode.data());
+        Assert.assertNull(aNode.prev());
+        Assert.assertNull(aNode.next());
+        Assert.assertEquals('b', aQueue.headNode().data());
+        Assert.assertEquals('c', aQueue.tailNode().data());
+        Assert.assertNull(aQueue.headNode().prev());
+        Assert.assertNull(aQueue.tailNode().next());
+        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode().prev());
+        Assert.assertEquals(aQueue.tailNode(), aQueue.headNode().next());
+
+        // Test dequeueing with two nodes.
+        aNode = aQueue.Dequeue();
+        Assert.assertNotNull(aNode);
+        Assert.assertEquals('b', aNode.data());
+        Assert.assertNull(aNode.prev());
+        Assert.assertNull(aNode.next());
+        Assert.assertEquals('c', aQueue.headNode().data());
+        Assert.assertNull(aQueue.headNode().prev());
+        Assert.assertNull(aQueue.headNode().next());
+        Assert.assertEquals(aQueue.headNode(), aQueue.tailNode());
+
+        // Test dequeueing with one node.
+        aNode = aQueue.Dequeue();
+        Assert.assertNotNull(aNode);
+        Assert.assertEquals('c', aNode.data());
+        Assert.assertNull(aNode.prev());
+        Assert.assertNull(aNode.next());
+        Assert.assertNull(aQueue.headNode());
+        Assert.assertNull(aQueue.tailNode());
+
+        // Test dequeueing with zero nodes.
+        aNode = aQueue.Dequeue();
+        Assert.assertNull(aNode);
+    }
+
+
+
+    //endregion Tests
+}
diff --git a/a2/tests/DataStructures/LinkedStackTests.java b/a2/tests/DataStructures/LinkedStackTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..00b6f9dec026ea711042180ff8df2602a6201842
--- /dev/null
+++ b/a2/tests/DataStructures/LinkedStackTests.java
@@ -0,0 +1,100 @@
+package DataStructures;
+
+import edu.wmich.cs3310.a2.DataStructures.LinkedNode;
+import edu.wmich.cs3310.a2.DataStructures.LinkedStack;
+import org.junit.Before;
+import org.junit.Assert;
+import org.junit.Test;
+
+
+/**
+ * Tests for LinkedStack class.
+ */
+public class LinkedStackTests {
+
+    //region Variables
+
+    LinkedNode aNode;
+    LinkedStack aStack;
+
+    //endregion Variables
+
+    //region Tests
+
+    @Before
+    public void setUp() {
+        aNode = new LinkedNode();
+        aStack = new LinkedStack();
+    }
+
+
+    @Test
+    public void Test_Push() {
+        Assert.assertNull(aStack.headNode());
+
+        // Test pushing with 1 node.
+        aStack.Push('a');
+        Assert.assertEquals('a', aStack.headNode().data());
+        Assert.assertNull(aStack.headNode().prev());
+        Assert.assertNull(aStack.headNode().next());
+
+        // Test pushing with 2 nodes.
+        aStack.Push('b');
+        Assert.assertEquals('b', aStack.headNode().data());
+        Assert.assertEquals('a', aStack.headNode().next().data());
+        Assert.assertNull(aStack.headNode().prev());
+        Assert.assertNull(aStack.headNode().next().next());
+
+
+        // Test pushing with 3 nodes.
+        aStack.Push('c');
+        Assert.assertEquals('c', aStack.headNode().data());
+        Assert.assertEquals('b', aStack.headNode().next().data());
+        Assert.assertEquals('a', aStack.headNode().next().next().data());
+        Assert.assertNull(aStack.headNode().prev());
+        Assert.assertNull(aStack.headNode().next().next().next());
+    }
+
+
+    @Test
+    public void Test_Pop() {
+        aStack.Push('a');
+        aStack.Push('b');
+        aStack.Push('c');
+
+        // Test popping with 3 nodes.
+        aNode = aStack.Pop();
+        Assert.assertNotNull(aNode);
+        Assert.assertEquals('c', aNode.data());
+        Assert.assertNull(aNode.prev());
+        Assert.assertNull(aNode.next());
+        Assert.assertEquals('b', aStack.headNode().data());
+        Assert.assertEquals('a', aStack.headNode().next().data());
+        Assert.assertNull(aStack.headNode().prev());
+        Assert.assertNull(aStack.headNode().next().next());
+
+        // Test popping with 2 nodes.
+        aNode = aStack.Pop();
+        Assert.assertNotNull(aNode);
+        Assert.assertEquals('b', aNode.data());
+        Assert.assertNull(aNode.prev());
+        Assert.assertNull(aNode.next());
+        Assert.assertEquals('a', aStack.headNode().data());
+        Assert.assertNull(aStack.headNode().prev());
+        Assert.assertNull(aStack.headNode().next());
+
+        // Test popping with 1 node.
+        aNode = aStack.Pop();
+        Assert.assertNotNull(aNode);
+        Assert.assertEquals('a', aNode.data());
+        Assert.assertNull(aNode.prev());
+        Assert.assertNull(aNode.next());
+        Assert.assertNull(aStack.headNode());
+
+        // Test popping with 0 nodes.
+        aNode = aStack.Pop();
+        Assert.assertNull(aNode);
+    }
+
+    //endregion Tests
+}