diff --git a/Makefile b/Makefile
index 29ea20d..d124a2e 100644
--- a/Makefile
+++ b/Makefile
@@ -4,14 +4,15 @@
 MAINO = $(patsubst %.c,%.o,$(MAIN))
 DEPS = $(patsubst %.c,%.d,$(SRCS) $(MAIN))
 EXECS = $(patsubst %.c,%,$(MAIN))
+FLAGS = -std=c99 -Wall
 all : $(EXECS)
 clean :
-	rm -f $(OBJS) $(DEPS) $(MAINO)
+	rm -f $(OBJS) $(DEPS) $(MAINO) $(EXECS)
 %.o : %.c
-	gcc -MD -c $<
+	gcc $(FLAGS) -MD -c $<
 %.d : %.c
-	gcc -MD -c $<
+	gcc $(FLAGS) -MD -c $<
 %.main : %.main.o $(OBJS)
-	gcc $< $(OBJS) -o $@
+	gcc $(FLAGS) $< $(OBJS) -o $@
 
 -include $(DEPS)
diff --git a/median.c b/median.c
index face1ef..3cc991a 100644
--- a/median.c
+++ b/median.c
@@ -1,48 +1,89 @@
 #include "median.h"
 #include <strings.h>
 
+// The buffer is cast into this struct.
 typedef struct metadata {
-  size_t buffer_size;
-  size_t nLevels;
-  unsigned char data[0];
+  size_t bufferSize;      // Number of bytes available for use.
+  size_t nLevels;          // Number of buffers available.
+  size_t currentBufferIdx; // The index of the currently active buffer.
+  unsigned char data[0];   // The start of the data.
 } metadata_t;
 
+typedef uint32_t parity_t;
+
+typedef struct bufferdata {
+  parity_t parity;           // The parity of this buffer.
+  size_t level;              // The level of this buffer.
+  size_t occupancy;          // Number of occupants for this buffer.
+} bufferdata_t;
+
+
+static const parity_t PARITY_NONE  = 0; // The parity is none.
+static const parity_t PARITY_LEFT  = 1; // The buffer has LEFT parity.
+static const parity_t PARITY_RIGHT = 2; // The buffer has RIGHT parity.
+
 median_error_t median_suggest_buffer_size(double epsilon, size_t maxN, size_t *suggested_size){
   // First check for sane parameters.
   if (maxN <= 0) return MEDIAN_ERROR_INVALID_PARAMETERS;
+
   // First compute the size of each buffer.
   size_t n = (1.0/epsilon)+ 1;
   // If n is too large, you are looking for too fine an approximation.
   // This is not the right algorithm. Maybe consider random sampling instead.
   if (n > 100000) return MEDIAN_ERROR_INVALID_PARAMETERS;
+
   // Compute the log of maxN using a divide by 2 loop.
   // There is no need to make this more complicated at this stage. It's not
   // a deep loop function.
   size_t nLevels = 1;
-  while(maxN = (maxN >> 1)) nLevels++;
-  // What is the size of the metadata structure
-  size_t extra = sizeof(metadata_t);
-  // This is the total.
-  *suggested_size = n * nLevels + extra;
+  while((maxN = (maxN >> 1))) nLevels++;
 
-  return MEDIAN_ERROR_OK;
+  // This is the total bytes needed.
+  // One metadata block. nLevels bufferdata_t blockes.
+  // and n * nLevels median_data_t elements.
+  *suggested_size = n * nLevels * sizeof(median_data_t) + nLevels * sizeof(bufferdata_t) + sizeof(metadata_t);
+
+  // Things worked. Return MEDIAN_OK
+  return MEDIAN_OK;
 }
 median_error_t median_init_buffer(void * buffer, size_t buffer_size, double epsilon, size_t maxN, median_buffer_t *initialized_buffer){
+
   // Initialize.
-  size_t expected_size = 0;
-  median_error_t error = MEDIAN_ERROR_OK;;
+  size_t expectedSize = 0;
+  median_error_t error = MEDIAN_OK;
+
   // First run median_suggest_buffer_size
-  if ((error = median_suggest_buffer_size(epsilon,maxN,&expected_size)) != MEDIAN_ERROR_OK) return error;
+  if ((error = median_suggest_buffer_size(epsilon,maxN,&expectedSize)) != MEDIAN_OK) return error;
   // Ensure that the buffer is large enough.
-  if (expected_size > buffer_size) return MEDIAN_ERROR_BUFFER_TOO_SMALL;
+  if (expectedSize > buffer_size) return MEDIAN_ERROR_BUFFER_TOO_SMALL;
+
+  // Cast the buffer as metadata_t so that we can initialize the metadata block.
   metadata_t * m = (metadata_t *)buffer;
+  // Initialize the metadata block.
+  m->bufferSize = buffer_size - sizeof(metadata_t);
+  m->nLevels = m->bufferSize/((maxN * sizeof(median_data_t)) + sizeof(bufferdata_t));
+  m->currentBufferIdx = 0;
+  bzero(m->data, m->bufferSize);
 
-  m->buffer_size = buffer_size - sizeof(metadata_t);
-  m->nLevels = m->buffer_size/(maxN * sizeof(median_data_t));
-  bzero(m->data, m->buffer_size);
+  // cast the data part as an array of bufferdata_t blocks.
+  // and initialize each of the blocks.
+  bufferdata_t * t = (bufferdata_t *) m->data;
+  for(size_t i = 0; i < m->nLevels; i++) {
+    t[i].parity = PARITY_NONE;
+    t[i].level  = 0;
+    t[i].occupancy = 0;
+  }
 
+  // Populate the return value.
+  *initialized_buffer = (median_buffer_t)buffer;
   return error;
 }
 
+median_error_t median_insert_data(median_buffer_t buffer, median_data_t data){
+  // First locate the empty buffer.
+  return MEDIAN_OK;
+}
 
-
+median_error_t median_output_median(median_buffer_t buffer, median_data_t *approximate_median){
+  return MEDIAN_OK;
+}
diff --git a/median.h b/median.h
index 90a3650..0ea0495 100644
--- a/median.h
+++ b/median.h
@@ -31,23 +31,23 @@
 
 // All the error codes.
 // No Error.
-static median_error_t MEDIAN_ERROR_OK = 0;
+static const median_error_t MEDIAN_OK = 0;
 
 // The parameters are meaningless (for example, asking for neg values
 // for epsilon).
-static median_error_t MEDIAN_ERROR_INVALID_PARAMETERS = -1;
+static const median_error_t MEDIAN_ERROR_INVALID_PARAMETERS = -1;
 
 // The buffer allocated is too small for the parameters requested.
-static median_error_t MEDIAN_ERROR_BUFFER_TOO_SMALL   = -2;
+static const median_error_t MEDIAN_ERROR_BUFFER_TOO_SMALL   = -2;
 
 // Overflow because MaxN has been exceeded.
-static median_error_t MEDIAN_ERROR_MAX_N_EXCEEDED     = -3;
+static const median_error_t MEDIAN_ERROR_MAX_N_EXCEEDED     = -3;
 
 // Indicates that the size of the largest possible dataset is not known.
-static size_t MEDIAN_MAX_N_UNKNOWN = 0;
+static const size_t MEDIAN_MAX_N_UNKNOWN = 0;
 
 // The default size of the largest possible dataset.
-static size_t MEDIAN_MAX_N_DEFAULT = 1024*1024*1024; // 1G.
+static const size_t MEDIAN_MAX_N_DEFAULT = 1024*1024*1024; // 1G.
 
 // This routine returns a suggested size for a buffer to hold all the
 // state needed for a median calculation. Here epsilon is the permissible error.
diff --git a/median.main.c b/median.main.c
index 4879c04..59c8a53 100644
--- a/median.main.c
+++ b/median.main.c
@@ -1,9 +1,25 @@
 #include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
 #include "median.h"
 
+// A sinple main routine meant as an example,
+// and also to unit test most of the intersting
+// functions of the median module.
 int main(int argc, char * argv[]) {
+  // Call suggest buffer size to determine the size of the buffer
+  // we need to build the data structure.
   size_t n = 0;
-  median_suggest_buffer_size(.001, 1000, &n);
+  assert(median_suggest_buffer_size(.001, 1000, &n) == MEDIAN_OK);
+  // Print the number out.
   printf("%ld\n", n);
+
+  // Allocate the buffer of the required size. And then
+  // initialize it (median_init_buffer).
+  void * b = malloc(n);
+  median_buffer_t buf;
+  assert(median_init_buffer(b, n, .001, 1000, &buf) == MEDIAN_OK);
+
+  // All done, return 0
   return 0;
 }
