diff --git a/results/heap_sort_swap.plot b/results/heap_sort_swap.plot
new file mode 100644
index 0000000000000000000000000000000000000000..9f79b16ea480fc8c27d76c147e98cc83ebb41197
--- /dev/null
+++ b/results/heap_sort_swap.plot
@@ -0,0 +1,10 @@
+4 2.691000
+8 11.625000
+16 38.618000
+32 110.312000
+64 287.477000
+128 709.014000
+256 1682.503000
+512 3888.728000
+1024 8823.067000
+
diff --git a/src/binary_heap.hpp b/src/binary_heap.hpp
index e62e974517e1d129ab1a05c1cf82b01453c67684..e169de91f6e09164b8c65675cbeb6029a6ea4e4d 100644
--- a/src/binary_heap.hpp
+++ b/src/binary_heap.hpp
@@ -25,6 +25,11 @@ protected:
   virtual bool heap_cmp(T & value1, T & value2) = 0;
   
 public:
+  /**
+     Class constructor.
+     Creates a heap of at most 'max' elements and initializes swap counters to zero.
+     @input max is the maximal number of elements the heap can contain
+  */
   BinaryHeap(size_t max){
     this->max = max;
     this->size = 0;
@@ -45,6 +50,11 @@ public:
     return this->size;
   }
 
+  /**
+     This method is used during benchmarks, when one wants to know
+     how many time the swap function has been called.
+     It is to be called at the beginning of each benchmark.
+  */
   void resetCounters(){
     counter_swap_up = 0;
     counter_swap_down = 0;
@@ -53,20 +63,36 @@ public:
   size_t getSwapsCounters(){
     return counter_swap_down + counter_swap_up;
   }
-
-  inline int parent(int position){
+  
+  /**
+     Returns the position of a node's parent
+     @requires 0 < position < this->size
+     @param position is the position of a node of the heap, except the root
+     @return the position of a node's parent
+   */
+  inline int parent(size_t position){
     return (position-1)/2;
   }
 
-  inline int left_child(int position){
+  /**
+     Returns the position of a node's left child
+     @param position is the position of a node of the heap, except the root
+     @return the position of a node's parent
+  */
+  inline int left_child(size_t position){
     return position*2+1;
   }
 
-  inline int right_child(int position){
+  inline int right_child(size_t position){
     return position*2+2;
   }
   
-  void heapify_up(int position){
+  /**
+     This function takes the position of a value as an input
+     and makes it go UP in the heap until the comparison constraint is satisfied.
+     @param position is the position of the value we want to check
+   */
+  void heapify_up(size_t position){
     while(position > 0 && heap_cmp(data[position], data[parent(position)])){
       std::swap(data[parent(position)], data[position]);
       counter_swap_up++;
@@ -74,7 +100,12 @@ public:
     }
   }
 
-  void heapify_down(int position){
+  /**
+     This function takes the position of a value as an input
+     and makes it go DOWN in the heap until the comparison constraint is satisfied.
+     @param position is the position of the value we want to check
+   */
+  void heapify_down(size_t position){
     int min_child;
     min_child = heap_cmp(data[left_child(position)], data[right_child(position)])? left_child(position): right_child(position);
     while(min_child < (size-1) && heap_cmp(data[min_child], data[position])){
@@ -84,7 +115,13 @@ public:
       counter_swap_down++;
     }
   }
-  
+
+  /* This function insert a value in the heap
+     @param value is the value we want to add.
+     @requires this->size != this-> max (the heap is not full)
+     @ensures the size is incremented
+     @exception throws a FullBinaryHeapException if the heap is full.
+   */
   void insert(T value) {
     if(size == max)
       throw new FullBinaryHeapException();
@@ -92,16 +129,25 @@ public:
     heapify_up(size-1);
   }
 
+  /*
+    Extract the value at the top of the heap
+    @ensures the size is decremented
+    @returns the value at the top of the heap
+  */
   T extract(){
     std::swap(data[0], data[size-1]);
     heapify_down(0);
     return data[--size];
   }
 
+  /**
+     Outputs the content of the heap a a regular tabular
+   */
   friend std::ostream& operator<<(std::ostream& os, const BinaryHeap<int>& heap);
   
 };
 
+
 std::ostream& operator<<(std::ostream& os, const BinaryHeap<int>& heap)
 {
   for( int i = 0; i < heap.size; i++)