diff --git a/build/source/actors/OutputManager.h b/build/source/actors/OutputManager.h
index ff95bece201358d27faeba1139e5c6c8f8d15468..901e7f571b610981a507699fcda7c761480610dc 100644
--- a/build/source/actors/OutputManager.h
+++ b/build/source/actors/OutputManager.h
@@ -46,6 +46,10 @@ class ActorRefList {
             return actor;
         }
 
+        bool isEmpty() {
+            return list.empty();
+        }
+
         
 
 
@@ -55,16 +59,65 @@ class OutputManager {
     private:
 
         int numVectors;
-
-        std::vector<std::vector<caf::actor>> actorRefList;
+        int avgSizeOfActorList;
+        std::vector<ActorRefList*> list;
 
 
 
     public:
         // Constructor
-        OutputManager(){}
+        OutputManager(int numVectors, int totalNumActors){
+            this->numVectors = numVectors;
+            int sizeOfOneVector = totalNumActors / numVectors;
+            this->avgSizeOfActorList = sizeOfOneVector;
+            // Create the first n-1 vectors with the same size 
+            for (int i = 0; i < numVectors - 1; i++) {
+                auto refList = new ActorRefList(sizeOfOneVector);
+                totalNumActors = totalNumActors - sizeOfOneVector;
+                list.push_back(refList);
+            }
+            // Create the last vector with size however many actors are left
+            auto refList = new ActorRefList(totalNumActors);
+            list.push_back(refList);
+        }
         // Deconstructor
         ~OutputManager(){};
+
+        void addActor(caf::actor actor, int index) {
+            // Index has to be subtracted by 1 because Fortran array starts at 1
+            int listIndex = (index - 1) / this->avgSizeOfActorList;
+            if (listIndex > this->numVectors - 1 || listIndex < 0) {
+                throw "List Index Out Of Range";
+            }
+
+            this->list[listIndex]->addActor(actor);
+        }
+
+        caf::actor popActor(int index) {
+            if (index > this->numVectors - 1 || index < 0) {
+                throw "List Index Out Of Range";
+            } else if (this->list[index]->isEmpty()) {
+                throw "List is Empty, Nothing to pop";
+            }
+
+            return this->list[index]->popActor();
+
+        }
+
+        bool isFull(int listIndex) {
+            if (listIndex > this->numVectors - 1) {
+                throw "List Index Out Of Range";
+            }
+            return this->list[listIndex]->isFull();
+        }
+
+        int getSize(int listIndex) {
+            if (listIndex > this->numVectors - 1) {
+                throw "List Index Out Of Range";
+            }
+            return this->list[listIndex]->getCurrentSize();
+        }
+
 };
 
 #endif 
\ No newline at end of file
diff --git a/build/source/testing/testing_main.cc b/build/source/testing/testing_main.cc
index 8fc1382db4a6b4f38a19fdd12cbc8f881288b192..f054f02ab0133a7bfe118bcf294341431dd5d113 100644
--- a/build/source/testing/testing_main.cc
+++ b/build/source/testing/testing_main.cc
@@ -9,7 +9,6 @@
 
 using namespace caf;
 behavior test_coordinator(stateful_actor<test_state>* self) {
-    aout(self) << "Starting Test Actor\n";
     return {
     };
 }
@@ -94,7 +93,7 @@ void test_calculateTime() {
 }
 
 
-void testOutputManager(caf::actor_system& sys) {
+void testActorRefList(caf::actor_system& sys) {
     auto a1 = sys.spawn(test_coordinator);
     auto a2 = sys.spawn(test_coordinator);
     auto a3 = sys.spawn(test_coordinator);
@@ -144,21 +143,122 @@ void testOutputManager(caf::actor_system& sys) {
         std::cerr << msg << std::endl;
         IS_TRUE(om->getCurrentSize() == 0)
     }
+}
+
+void testOutputManager(caf::actor_system& sys) {
+    auto a1 = sys.spawn(test_coordinator);
+    auto a2 = sys.spawn(test_coordinator);
+    auto a3 = sys.spawn(test_coordinator);
+    auto a4 = sys.spawn(test_coordinator);
+    auto a5 = sys.spawn(test_coordinator);
+    auto a6 = sys.spawn(test_coordinator);
+    auto a7 = sys.spawn(test_coordinator);
+    auto a8 = sys.spawn(test_coordinator);
+    auto a9 = sys.spawn(test_coordinator);
+    auto a10 = sys.spawn(test_coordinator);
 
+    auto OM = new OutputManager(5, 10);
 
+    for (int i = 0; i < 5; i++) {
+        IS_TRUE(OM->getSize(i) == 0)
+    }
+    try {
+        OM->getSize(8);
+    } catch (const char* msg) {
+        std::cerr << msg << std::endl;
+    }
 
+    OM->addActor(a1, 1);
+    IS_TRUE(OM->getSize(0) == 1);
+    IS_TRUE(OM->getSize(1) == 0);
+    IS_TRUE(OM->getSize(2) == 0);
+    IS_TRUE(OM->getSize(3) == 0);
+    IS_TRUE(OM->getSize(4) == 0);
+    OM->addActor(a2, 2);
+    IS_TRUE(OM->getSize(0) == 2);
+    IS_TRUE(OM->getSize(1) == 0);
+    IS_TRUE(OM->getSize(2) == 0);
+    IS_TRUE(OM->getSize(3) == 0);
+    IS_TRUE(OM->getSize(4) == 0);
+    OM->addActor(a3, 3);
+    IS_TRUE(OM->getSize(0) == 2);
+    IS_TRUE(OM->getSize(1) == 1);
+    IS_TRUE(OM->getSize(2) == 0);
+    IS_TRUE(OM->getSize(3) == 0);
+    IS_TRUE(OM->getSize(4) == 0);    
+    OM->addActor(a4, 4);
+    IS_TRUE(OM->getSize(0) == 2);
+    IS_TRUE(OM->getSize(1) == 2);
+    IS_TRUE(OM->getSize(2) == 0);
+    IS_TRUE(OM->getSize(3) == 0);
+    IS_TRUE(OM->getSize(4) == 0);
+    OM->addActor(a5, 5);
+    IS_TRUE(OM->getSize(0) == 2);
+    IS_TRUE(OM->getSize(1) == 2);
+    IS_TRUE(OM->getSize(2) == 1);
+    IS_TRUE(OM->getSize(3) == 0);
+    IS_TRUE(OM->getSize(4) == 0);
+    OM->addActor(a6, 6);
+    IS_TRUE(OM->getSize(0) == 2);
+    IS_TRUE(OM->getSize(1) == 2);
+    IS_TRUE(OM->getSize(2) == 2);
+    IS_TRUE(OM->getSize(3) == 0);
+    IS_TRUE(OM->getSize(4) == 0);
+    OM->addActor(a7, 7);
+    IS_TRUE(OM->getSize(0) == 2);
+    IS_TRUE(OM->getSize(1) == 2);
+    IS_TRUE(OM->getSize(2) == 2);
+    IS_TRUE(OM->getSize(3) == 1);
+    IS_TRUE(OM->getSize(4) == 0);
+    OM->addActor(a8, 8);
+    IS_TRUE(OM->getSize(0) == 2);
+    IS_TRUE(OM->getSize(1) == 2);
+    IS_TRUE(OM->getSize(2) == 2);
+    IS_TRUE(OM->getSize(3) == 2);
+    IS_TRUE(OM->getSize(4) == 0);
+    OM->addActor(a9, 9);
+    IS_TRUE(OM->getSize(0) == 2);
+    IS_TRUE(OM->getSize(1) == 2);
+    IS_TRUE(OM->getSize(2) == 2);
+    IS_TRUE(OM->getSize(3) == 2);
+    IS_TRUE(OM->getSize(4) == 1);
+    IS_TRUE(!OM->isFull(4))
 
+    OM->addActor(a10, 10);
+    IS_TRUE(OM->getSize(0) == 2);
+    IS_TRUE(OM->getSize(1) == 2);
+    IS_TRUE(OM->getSize(2) == 2);
+    IS_TRUE(OM->getSize(3) == 2);
+    IS_TRUE(OM->getSize(4) == 2);
+    IS_TRUE(OM->isFull(0))
+    IS_TRUE(OM->isFull(1))
+    IS_TRUE(OM->isFull(2))
+    IS_TRUE(OM->isFull(3))
+    IS_TRUE(OM->isFull(4))
 
+    auto a11 = OM->popActor(0);
+    IS_TRUE(a11 == a2);
+    auto a14 = OM->popActor(0);
+    IS_TRUE(a14 ==  a1);
+    auto a12 = OM->popActor(1);
+    IS_TRUE(a12 == a4);
+    auto a13 = OM->popActor(4);
+    IS_TRUE(a13 == a10);
+    IS_TRUE(OM->getSize(0) == 0);
+    IS_TRUE(OM->getSize(1) == 1);
+    IS_TRUE(OM->getSize(2) == 2);
+    IS_TRUE(OM->getSize(3) == 2);
+    IS_TRUE(OM->getSize(4) == 1);
 
 }
 
 
 
-
 void caf_main(caf::actor_system& sys) {
     caf::scoped_actor self{sys};
     aout(self) << "Starting Test \n";
     // test_calculateTime();
+    testActorRefList(sys);
     testOutputManager(sys);
 }