diff --git a/include/shared.h b/include/shared.h
index 577028e..1584077 100644
--- a/include/shared.h
+++ b/include/shared.h
@@ -7,6 +7,7 @@ int StringToNumber(char* argv);
 typedef struct SharedStruct
 {
     int buffer[10];
+    int count[10];
     sem_t semConsumer;
     sem_t semProducer;
 } SharedStruct;
diff --git a/src/consumer.c b/src/consumer.c
index 0f4fcff..195c851 100644
--- a/src/consumer.c
+++ b/src/consumer.c
@@ -5,8 +5,8 @@
 #include "shared.h"
 
 void* Consumer(void* arg);
-void consume_item(long int item);
-long int remove_item(void);
+void consume_item(int item);
+int remove_item(void);
 
 int main(int argc, char* argv[])
 {
@@ -18,7 +18,7 @@ int main(int argc, char* argv[])
     int sharedID = StringToNumber(argv[1]);
     SharedStruct* sharedMem = shmat(sharedID, NULL, 0);
     sem_wait(&sharedMem->semConsumer);
-    printf("Checking for 5 in shared struct.\n");
+    //  TODO: Fix buffer not printing correctly
     printf("%d\n", sharedMem->buffer[0]);
     return 0;
 }
@@ -28,7 +28,7 @@ int main(int argc, char* argv[])
 //          Add ability to use shared memory
 void* Consumer(void* arg)
 {
-    long int consumeNum;
+    int consumeNum;
     while (1)
     {
         // down(&full);
@@ -42,13 +42,13 @@ void* Consumer(void* arg)
 }
 
 //  Manage item taken from shared memory
-void consume_item(long int item)
+void consume_item(int item)
 {
     ;
 }
 
 //  Take item out of shared memory
-long int remove_item()
+int remove_item(void)
 {
     ;
 }
\ No newline at end of file
diff --git a/src/producer.c b/src/producer.c
index 115d6d7..4561d12 100644
--- a/src/producer.c
+++ b/src/producer.c
@@ -5,9 +5,10 @@
 #include <unistd.h>
 #include "shared.h"
 
-void* Producer(void* arg);
-long int produce_item(void);
-void insert_item(long int item);
+int GetNextFreeSlot(SharedStruct* sharedMem);
+void Producer(SharedStruct* sharedMem);
+int produce_item(void);
+int insert_item(int item, SharedStruct* sharedMem);
 
 
 int main(int argc, char* argv[])
@@ -20,28 +21,45 @@ int main(int argc, char* argv[])
     srandom((unsigned int) time(NULL));
     int sharedID = StringToNumber(argv[1]);
     SharedStruct* sharedMem = shmat(sharedID, NULL, 0);
-    printf("Adding 5 to shared struct.\n");
-    sharedMem->buffer[0] = 5;
+    Producer(sharedMem);
     sem_post(&sharedMem->semConsumer);
     return 0;
 }
 
+int GetNextFreeSlot(SharedStruct* sharedMem)
+{
+    int slot = -1;
+    for (int i = 0; i < 10; i++)
+    {
+        if ((sharedMem->buffer[i] != -1) && (sharedMem->buffer[(i+1)%10] == -1))
+        {
+            slot = (i+1)%10;
+            return slot;
+        }
+    }
+    return slot;
+}
+
 //  Producer main function
 //  TODO:   Add waiting for one producer at a time
 //          Add ability to use shared memory
-void* Producer(void* arg)
+void Producer(SharedStruct* sharedMem)
 {
-    long int insertNum;
-    SharedStruct* sharedMem;
-    while (1)
+    int insertNum;
+    //  TODO: For testing purposes, revert max to 100
+    for (int i = 0; i < 5; i++)
     {
         insertNum = produce_item();
-        printf("The random number is %li\n", insertNum);
+        printf("%d is inserted.\n", insertNum);
         // sem_wait(&semProducer);
         // down(&empty);
         // down(&mutex);
-        insert_item(insertNum);
-        // sem_post(&semProducer);
+        // if (insert_item(insertNum, sharedMem) == 0)
+        insert_item(insertNum, sharedMem);
+        // {
+        //     --i;
+        //     continue;
+        // }
         // up(&mutex);
         // up(&full);
         break;
@@ -49,13 +67,17 @@ void* Producer(void* arg)
 }
 
 //  Generate a number between 0 and 9
-long int produce_item(void)
+int produce_item(void)
 {
     return random() % 10;
 }
 
 //  Insert a number into the shared memory
-void insert_item(long int item)
+int insert_item(int item, SharedStruct* sharedMem)
 {
-    ;
+    int slot = GetNextFreeSlot(sharedMem);
+    if (slot == -1)
+        return 0;
+    sharedMem->buffer[0] = item;
+    return 1;
 }
\ No newline at end of file