diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9016caf60a3fa8ccb51a8b35a1c8373d8b5933cc..d0cadfc23205c4a58b0b6e3258b36c4ee00a8be8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -48,6 +48,7 @@ add_executable(ParserTest
         util/Stemmer.cpp
         parser/tests/parserTest.cpp)
 
+add_executable(SharedTableTest shared/SharedHashMapTest.cpp )
 
 add_executable(URLTEST shared/url.h shared/urlTest.cpp)
 
diff --git a/crawler-parser-test b/crawler-parser-test
index e57fee527da5971f210dfae7dcc06d26661452a1..f6e68d1aa6b62b614da5b0ab0ddae084aed2c717 100755
Binary files a/crawler-parser-test and b/crawler-parser-test differ
diff --git a/makefile b/makefile
index 48c2b284b540d8e068b0d9657486380df79e7350..8d2bafb418c9a23c8614806be7639e34fa9cd93a 100644
--- a/makefile
+++ b/makefile
@@ -175,6 +175,19 @@ URLTEST/fast:
 	$(MAKE) -f CMakeFiles/URLTEST.dir/build.make CMakeFiles/URLTEST.dir/build
 .PHONY : URLTEST/fast
 
+#=============================================================================
+# Target rules for targets named SharedTableTest
+
+# Build rule for target.
+SharedTableTest: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 SharedTableTest
+.PHONY : SharedTableTest
+
+# fast build rule for target.
+SharedTableTest/fast:
+	$(MAKE) -f CMakeFiles/SharedTableTest.dir/build.make CMakeFiles/SharedTableTest.dir/build
+.PHONY : SharedTableTest/fast
+
 #=============================================================================
 # Target rules for targets named ParserTest
 
@@ -517,6 +530,33 @@ shared/Document.cpp.s:
 	$(MAKE) -f CMakeFiles/crawler-parser-test.dir/build.make CMakeFiles/crawler-parser-test.dir/shared/Document.cpp.s
 .PHONY : shared/Document.cpp.s
 
+shared/SharedHashMapTest.o: shared/SharedHashMapTest.cpp.o
+
+.PHONY : shared/SharedHashMapTest.o
+
+# target to build an object file
+shared/SharedHashMapTest.cpp.o:
+	$(MAKE) -f CMakeFiles/SharedTableTest.dir/build.make CMakeFiles/SharedTableTest.dir/shared/SharedHashMapTest.cpp.o
+.PHONY : shared/SharedHashMapTest.cpp.o
+
+shared/SharedHashMapTest.i: shared/SharedHashMapTest.cpp.i
+
+.PHONY : shared/SharedHashMapTest.i
+
+# target to preprocess a source file
+shared/SharedHashMapTest.cpp.i:
+	$(MAKE) -f CMakeFiles/SharedTableTest.dir/build.make CMakeFiles/SharedTableTest.dir/shared/SharedHashMapTest.cpp.i
+.PHONY : shared/SharedHashMapTest.cpp.i
+
+shared/SharedHashMapTest.s: shared/SharedHashMapTest.cpp.s
+
+.PHONY : shared/SharedHashMapTest.s
+
+# target to generate assembly for a file
+shared/SharedHashMapTest.cpp.s:
+	$(MAKE) -f CMakeFiles/SharedTableTest.dir/build.make CMakeFiles/SharedTableTest.dir/shared/SharedHashMapTest.cpp.s
+.PHONY : shared/SharedHashMapTest.cpp.s
+
 shared/urlTest.o: shared/urlTest.cpp.o
 
 .PHONY : shared/urlTest.o
@@ -782,6 +822,7 @@ help:
 	@echo "... StringProcessingTest"
 	@echo "... TokenizerTest"
 	@echo "... URLTEST"
+	@echo "... SharedTableTest"
 	@echo "... ParserTest"
 	@echo "... search-engine"
 	@echo "... crawler-parser-test"
@@ -818,6 +859,9 @@ help:
 	@echo "... shared/Document.o"
 	@echo "... shared/Document.i"
 	@echo "... shared/Document.s"
+	@echo "... shared/SharedHashMapTest.o"
+	@echo "... shared/SharedHashMapTest.i"
+	@echo "... shared/SharedHashMapTest.s"
 	@echo "... shared/urlTest.o"
 	@echo "... shared/urlTest.i"
 	@echo "... shared/urlTest.s"
diff --git a/shared/SharedHashMap.cpp b/shared/SharedHashMap.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6fa3cd696691a19a1fd5796f41f173e500de821b
--- /dev/null
+++ b/shared/SharedHashMap.cpp
@@ -0,0 +1,40 @@
+//
+// Created by Jake Close on 3/18/18.
+//
+
+#include "SharedHashMap.h"
+
+
+
+template <class T>
+void SharedHashMap::Insert( T key, T value )
+	{
+	pthread_mutex_lock(&m);
+
+	map.insert(key, value);
+
+	pthread_mutex_unlock(&m);
+	}
+
+template <class T>
+T void SharedHashMap::Find( T key)
+
+	{
+	pthread_mutex_lock(&m);
+
+	T value = map.find(key);
+
+
+	pthread_mutex_unlock(&m);
+
+	return value;
+	}
+
+template <class T>
+size_t ProducerConsumerQueue<T>::Size()
+	{
+	pthread_mutex_lock(&m);
+	size_t size = map.size();
+	pthread_mutex_unlock(&m);
+	return size;
+	}
\ No newline at end of file
diff --git a/shared/SharedHashMap.h b/shared/SharedHashMap.h
new file mode 100644
index 0000000000000000000000000000000000000000..03246b6fcab4a07e468a76af263b56eaf695627c
--- /dev/null
+++ b/shared/SharedHashMap.h
@@ -0,0 +1,32 @@
+//
+// Created by Jake Close on 3/18/18.
+//
+
+#ifndef EECS398_SEARCH_SHAREDHASHMAP_H
+#define EECS398_SEARCH_SHAREDHASHMAP_H
+#include <unordered_map>
+#include <pthread.h>
+
+
+template <class T> class SharedHashMap {
+	private:
+		std::unordered_map<T, T> map;
+		pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
+		pthread_cond_t consumer_cv = PTHREAD_COND_INITIALIZER;
+
+	public:
+
+		SharedHashMap() {}
+
+
+		void Insert(T key, T value);
+		T Find(T Key);
+		size_t Size();
+
+
+	};
+
+//Necessary because this class is templated
+#include"SharedHashMap.cpp"
+
+#endif
diff --git a/shared/SharedHashMapTest.cpp b/shared/SharedHashMapTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f2edc1653cce6ebd739519f4d2dfe6210645a1e9
--- /dev/null
+++ b/shared/SharedHashMapTest.cpp
@@ -0,0 +1,29 @@
+//
+// Created by Jake Close on 3/18/18.
+//
+
+#include "SharedHashMap.h"
+
+#include <iostream>
+#include <stdlib.h>
+#include <pthread.h>
+#include <cassert>
+using namespace std;
+
+pthread_mutex_t cout_lock = PTHREAD_MUTEX_INITIALIZER;
+
+int main(int argc, const char * argv[])
+	{
+	SharedHashMap < int, int > *sharedTable = new(SharedHashMap < int, int >);
+
+	pthread_t t;
+
+	sharedTable->Insert( 5, 4 );
+	int v = sharedTable->Find( 5 );
+	assert( v == 4 );
+
+
+	delete sharedTable;
+
+	return 0;
+	}