diff --git a/src/edu/caltech/cs2/coloring/DSatur.java b/src/edu/caltech/cs2/coloring/DSatur.java
index 49ced3ff6373829d284b837b6bff148446618f32..17c67c00c23c6e424893c23c9059cf84a215d91b 100644
--- a/src/edu/caltech/cs2/coloring/DSatur.java
+++ b/src/edu/caltech/cs2/coloring/DSatur.java
@@ -1,10 +1,7 @@
 package edu.caltech.cs2.coloring;
 
-import edu.caltech.cs2.datastructures.ChainingHashDictionary;
 import edu.caltech.cs2.datastructures.ChainingHashSet;
 import edu.caltech.cs2.datastructures.MinFourHeap;
-import edu.caltech.cs2.datastructures.MoveToFrontDictionary;
-import edu.caltech.cs2.interfaces.IDictionary;
 import edu.caltech.cs2.interfaces.IPriorityQueue;
 import edu.caltech.cs2.interfaces.ISet;
 
diff --git a/src/edu/caltech/cs2/coloring/Program.java b/src/edu/caltech/cs2/coloring/Program.java
index 3b663e41dd45b521b0b8b95c1e2886f1a9d6a63f..e578b55f55a9093f02b5527eaae9e211991c24e8 100644
--- a/src/edu/caltech/cs2/coloring/Program.java
+++ b/src/edu/caltech/cs2/coloring/Program.java
@@ -5,7 +5,6 @@ import edu.caltech.cs2.datastructures.ChainingHashSet;
 import edu.caltech.cs2.interfaces.IDeque;
 import edu.caltech.cs2.interfaces.IDictionary;
 import edu.caltech.cs2.interfaces.ISet;
-import edu.caltech.cs2.interfaces.IStack;
 
 import java.util.Iterator;
 
diff --git a/src/edu/caltech/cs2/datastructures/ArrayDeque.java b/src/edu/caltech/cs2/datastructures/ArrayDeque.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a7d0bfa04aae5451c96f4110a5e3af3ff776b7e
--- /dev/null
+++ b/src/edu/caltech/cs2/datastructures/ArrayDeque.java
@@ -0,0 +1,76 @@
+package edu.caltech.cs2.datastructures;
+
+import edu.caltech.cs2.interfaces.IDeque;
+import edu.caltech.cs2.interfaces.IQueue;
+import edu.caltech.cs2.interfaces.IStack;
+
+import java.util.Iterator;
+
+public class ArrayDeque<E> implements IDeque<E>, IQueue<E>, IStack<E> {
+
+    @Override
+    public void addFront(E e) {
+
+    }
+
+    @Override
+    public void addBack(E e) {
+
+    }
+
+    @Override
+    public E removeFront() {
+        return null;
+    }
+
+    @Override
+    public E removeBack() {
+        return null;
+    }
+
+    @Override
+    public boolean enqueue(E e) {
+        return false;
+    }
+
+    @Override
+    public E dequeue() {
+        return null;
+    }
+
+    @Override
+    public boolean push(E e) {
+        return false;
+    }
+
+    @Override
+    public E pop() {
+        return null;
+    }
+
+    @Override
+    public E peekFront() {
+        return null;
+    }
+
+    @Override
+    public E peekBack() {
+        return null;
+    }
+
+    @Override
+    public E peek() {
+        return null;
+    }
+
+    @Override
+    public Iterator<E> iterator() {
+        return null;
+    }
+
+    @Override
+    public int size() {
+        return 0;
+    }
+}
+
diff --git a/src/edu/caltech/cs2/datastructures/ChainingHashDictionary.java b/src/edu/caltech/cs2/datastructures/ChainingHashDictionary.java
new file mode 100644
index 0000000000000000000000000000000000000000..7a771e4d3f7f200eb6b8cb1892479a097db1d560
--- /dev/null
+++ b/src/edu/caltech/cs2/datastructures/ChainingHashDictionary.java
@@ -0,0 +1,78 @@
+package edu.caltech.cs2.datastructures;
+
+import edu.caltech.cs2.interfaces.ICollection;
+import edu.caltech.cs2.interfaces.IDeque;
+import edu.caltech.cs2.interfaces.IDictionary;
+import edu.caltech.cs2.interfaces.IQueue;
+
+import java.util.Iterator;
+import java.util.function.Supplier;
+import java.util.stream.Stream;
+
+public class ChainingHashDictionary<K, V> implements IDictionary<K, V> {
+    private Supplier<IDictionary<K, V>> chain;
+
+    public ChainingHashDictionary(Supplier<IDictionary<K, V>> chain) {
+        // student: TODO fill me in!
+    }
+
+    /**
+     * @param key
+     * @return value corresponding to key
+     */
+    @Override
+    public V get(K key) {
+        return null;
+    }
+
+    @Override
+    public V remove(K key) {
+        return null;
+    }
+
+    @Override
+    public V put(K key, V value) {
+        return null;
+    }
+
+    @Override
+    public boolean containsKey(K key) {
+        return false;
+    }
+
+    /**
+     * @param value
+     * @return true if the HashDictionary contains a key-value pair with
+     * this value, and false otherwise
+     */
+    @Override
+    public boolean containsValue(V value) {
+        return false;
+    }
+
+    /**
+     * @return number of key-value pairs in the HashDictionary
+     */
+    @Override
+    public int size() {
+        return 0;
+    }
+
+    @Override
+    public ICollection<K> keys() {
+        return null;
+    }
+
+    @Override
+    public ICollection<V> values() {
+        return null;
+    }
+
+    /**
+     * @return An iterator for all entries in the HashDictionary
+     */
+    @Override
+    public Iterator<K> iterator() {
+        return null;
+    }
+}
diff --git a/src/edu/caltech/cs2/datastructures/LinkedDeque.java b/src/edu/caltech/cs2/datastructures/LinkedDeque.java
new file mode 100644
index 0000000000000000000000000000000000000000..212e5ffa283d582c33c6bdf9a15e006bb54e6a49
--- /dev/null
+++ b/src/edu/caltech/cs2/datastructures/LinkedDeque.java
@@ -0,0 +1,75 @@
+package edu.caltech.cs2.datastructures;
+
+import edu.caltech.cs2.interfaces.IDeque;
+import edu.caltech.cs2.interfaces.IQueue;
+import edu.caltech.cs2.interfaces.IStack;
+
+import java.util.Iterator;
+
+public class LinkedDeque<E> implements IDeque<E>, IQueue<E>, IStack<E> {
+
+    @Override
+    public void addFront(E e) {
+
+    }
+
+    @Override
+    public void addBack(E e) {
+
+    }
+
+    @Override
+    public E removeFront() {
+        return null;
+    }
+
+    @Override
+    public E removeBack() {
+        return null;
+    }
+
+    @Override
+    public boolean enqueue(E e) {
+        return false;
+    }
+
+    @Override
+    public E dequeue() {
+        return null;
+    }
+
+    @Override
+    public boolean push(E e) {
+        return false;
+    }
+
+    @Override
+    public E pop() {
+        return null;
+    }
+
+    @Override
+    public E peekFront() {
+        return null;
+    }
+
+    @Override
+    public E peekBack() {
+        return null;
+    }
+
+    @Override
+    public E peek() {
+        return null;
+    }
+
+    @Override
+    public Iterator<E> iterator() {
+        return null;
+    }
+
+    @Override
+    public int size() {
+        return 0;
+    }
+}
diff --git a/src/edu/caltech/cs2/datastructures/MoveToFrontDictionary.java b/src/edu/caltech/cs2/datastructures/MoveToFrontDictionary.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f7a8130aed200b712d164e179fdd69cf52cf5fe
--- /dev/null
+++ b/src/edu/caltech/cs2/datastructures/MoveToFrontDictionary.java
@@ -0,0 +1,57 @@
+package edu.caltech.cs2.datastructures;
+
+import edu.caltech.cs2.interfaces.ICollection;
+import edu.caltech.cs2.interfaces.IDictionary;
+
+import java.util.Iterator;
+
+public class MoveToFrontDictionary<K, V> implements IDictionary<K,V> {
+
+    public MoveToFrontDictionary() {
+        // student: TODO fill this in
+    }
+
+    @Override
+    public V remove(K key) {
+        return null;
+    }
+
+    @Override
+    public V put(K key, V value) {
+        return null;
+    }
+
+    @Override
+    public boolean containsKey(K key) {
+        return this.get(key) != null;
+    }
+
+    @Override
+    public boolean containsValue(V value) {
+        return this.values().contains(value);
+    }
+
+    @Override
+    public int size() {
+        return 0;
+    }
+
+    @Override
+    public ICollection<K> keys() {
+        return null;
+    }
+
+    @Override
+    public ICollection<V> values() {
+        return null;
+    }
+
+    public V get(K key) {
+        return null;
+    }
+
+    @Override
+    public Iterator<K> iterator() {
+        return null;
+    }
+}
diff --git a/tests/edu/caltech/cs2/helpers/RuntimeCounter.java b/tests/edu/caltech/cs2/helpers/RuntimeCounter.java
new file mode 100644
index 0000000000000000000000000000000000000000..960c1697bf234326d29712262d8ad5457dcadbb6
--- /dev/null
+++ b/tests/edu/caltech/cs2/helpers/RuntimeCounter.java
@@ -0,0 +1,9 @@
+package edu.caltech.cs2.helpers;
+
+public class RuntimeCounter {
+    public static int NUM_CALLS = 0;
+
+    public static void inc() {
+        NUM_CALLS++;
+    }
+}