Some documentation, and a few minor cleanups.
diff --git a/median.c b/median.c
index 9a6f183..6c413ef 100644
--- a/median.c
+++ b/median.c
@@ -74,6 +74,8 @@
   b->data[b->occupancy++] = data;
 }
 
+// Check if there is space in some block and if there is, then
+// make that block the current block.
 unsigned int occupy_available_empty_block(metadata_t * m) {
   size_t idx = 0;
   for(unsigned char * ptr = (unsigned char *) m->data; // Start of the data blocks.
@@ -91,15 +93,24 @@
   return 0;
 }
 
-void create_empty_block(metadata_t * m) {
+unsigned int create_empty_block(metadata_t * m) {
   // TODO
+  return 0;
 }
 
 // Shift the current block.
-void shift_current_block(metadata_t * m) {
+unsigned int shift_current_block(metadata_t * m) {
   if(!occupy_available_empty_block(m)) {
-    create_empty_block(m);
+    if(create_empty_block(m)) {
+      // Now there should be an empty block!
+      // So occupy it.
+      occupy_available_empty_block(m);
+    } else {
+      // Stuck we are, block not.
+      return 0;
+    }
   }
+  return 1;
 }
 
 
@@ -163,15 +174,40 @@
 }
 
 
+// Insert data into the buffer.
+// We could have made this more concise and pretty if we used short-circuit
+// execution of the boolean condition..
+//
+// if (current_block_has_space(m) || shift_current_block(m)) {
+//   insert_data_into_current_block(m,data);
+//   return MEDIAN_OK;
+// } else {
+//   return MEDIAN_ERROR_MAX_N_EXCEEDED;
+// }
+//
+// But this code is harder to read, because of the side
+// effect issue.
 median_error_t median_insert_data(median_buffer_t buffer,
                                   median_data_t data){
   metadata_t * m = (metadata_t *) buffer;
+  // If there is space in the current block..
   if(current_block_has_space(m)) {
+    // Insert data into the current block. This
+    // call is to an unchecked method, which will
+    // never fail.
     insert_data_into_current_block(m,data);
   } else {
-    shift_current_block(m);
-    return median_insert_data(buffer,data);
+    // Current block is full. So try and shift it.
+    if(shift_current_block(m)) {
+      // The current block has shifted successfully.
+      // So we can now call the unchecked method again.
+      insert_data_into_current_block(m,data);
+    } else {
+      // Failed to shift block. Stuck we are.
+      return MEDIAN_ERROR_MAX_N_EXCEEDED;
+    }
   }
+  // Everything worked. So return MEDIAN_OK.
   return MEDIAN_OK;
 }
 
@@ -180,17 +216,23 @@
   return MEDIAN_OK;
 }
 
+// Dump the state to stderr.
 median_error_t median_dump_stderr(const median_buffer_t buffer){
+  // First print out all the metadata.
   metadata_t * m = (metadata_t *) buffer;
   blockdata_t * current = get_current_block(m);
-  fprintf(stderr, "Metadata:\n Next GID:%d\n nMembers:%d\n nLevels:%d\n",m->gid,(unsigned)m->nMembers,(unsigned)m->nLevels);
-  fprintf(stderr, "Current Block:%d\n", current->id);
+  fprintf(stderr, "Metadata:\n Next GID:%d\n nMembers:%d\n nLevels:%d\n CurrentBlock:%d\n",m->gid,(unsigned)m->nMembers,(unsigned)m->nLevels, current->id);
+
+  // Now dump the blocks.
   for(unsigned char * ptr = (unsigned char *) m->data; // Start of the data blocks.
       ptr <= (m->data + buffersize(m) - blocksize(m)); // The next block will fit into the buffer.
       ptr += blocksize(m)) { // Advance by a block
     blockdata_t * b = (blockdata_t *)ptr;
     fprintf(stderr, "Block:%d\n Level:%d\n Occupancy:%d\n", b->id,(unsigned)b->level,(unsigned)b->occupancy);
-    stderr_hexdmp("Data:",(unsigned char *)(b->data),256);
+    // For every block, dump the first 8 keys in the block.
+    stderr_hexdmp("Data:",(unsigned char *)(b->data),8*sizeof(median_data_t));
   }
+
+  // Done, return MEDIAN_OK.
   return MEDIAN_OK;
 }