Index: gegl/graph/gegl-visitable.c
===================================================================
--- gegl/graph/gegl-visitable.c	(révision 2958)
+++ gegl/graph/gegl-visitable.c	(copie de travail)
@@ -88,20 +88,3 @@
 
   return depends_on;
 }
-
-gboolean
-gegl_visitable_needs_visiting (GeglVisitable *interface)
-{
-  GeglVisitableClass *interface_class;
-  gboolean            needs_visiting;
-
-  g_return_val_if_fail (GEGL_IS_VISITABLE (interface), FALSE);
-
-  interface_class = GEGL_VISITABLE_GET_CLASS (interface);
-
-  g_object_ref (interface);
-  needs_visiting = interface_class->needs_visiting (interface);
-  g_object_unref (interface);
-
-  return needs_visiting;
-}
Index: gegl/graph/gegl-pad.c
===================================================================
--- gegl/graph/gegl-pad.c	(révision 2958)
+++ gegl/graph/gegl-pad.c	(copie de travail)
@@ -40,7 +40,6 @@
 static void       visitable_accept         (GeglVisitable *visitable,
                                             GeglVisitor   *visitor);
 static GSList   * visitable_depends_on     (GeglVisitable *visitable);
-static gboolean   visitable_needs_visiting (GeglVisitable *visitable);
 
 
 G_DEFINE_TYPE_WITH_CODE (GeglPad, gegl_pad, G_TYPE_OBJECT,
@@ -73,7 +72,6 @@
 
   visitable_class->accept         = visitable_accept;
   visitable_class->depends_on     = visitable_depends_on;
-  visitable_class->needs_visiting = visitable_needs_visiting;
 }
 
 static void
@@ -315,12 +313,6 @@
   return gegl_pad_get_depends_on (self);
 }
 
-static gboolean
-visitable_needs_visiting (GeglVisitable *visitable)
-{
-  return TRUE;
-}
-
 void
 gegl_pad_set_format (GeglPad    *self,
                      const Babl *format)
Index: gegl/graph/gegl-node.c
===================================================================
--- gegl/graph/gegl-node.c	(révision 2958)
+++ gegl/graph/gegl-node.c	(copie de travail)
@@ -101,7 +101,6 @@
 static void            gegl_node_visitable_accept         (GeglVisitable *visitable,
                                                            GeglVisitor   *visitor);
 static GSList*         gegl_node_visitable_depends_on     (GeglVisitable *visitable);
-static gboolean        gegl_node_visitable_needs_visiting (GeglVisitable *visitable);
 static void            gegl_node_set_operation_object     (GeglNode      *self,
                                                            GeglOperation *operation);
 static void            gegl_node_set_op_class             (GeglNode      *self,
@@ -221,7 +220,6 @@
 
   visitable_class->accept         = gegl_node_visitable_accept;
   visitable_class->depends_on     = gegl_node_visitable_depends_on;
-  visitable_class->needs_visiting = gegl_node_visitable_needs_visiting;
 }
 
 static void
@@ -803,6 +801,9 @@
     priv->eval_mgr = gegl_eval_mgr_new (node, pad);
 }
 
+/* Will set the eval_mgr's roi to the supplied roi if defined, otherwise
+ * it will use the node's bounding box. Then the gegl_eval_mgr_apply will
+ * be called. */
 static GeglBuffer *
 gegl_node_apply_roi (GeglNode            *self,
                      const gchar         *output_pad_name,
@@ -950,12 +951,6 @@
   return gegl_node_get_depends_on (self);
 }
 
-static gboolean
-gegl_node_visitable_needs_visiting (GeglVisitable *visitable)
-{
-  return TRUE;
-}
-
 static void
 gegl_node_set_op_class (GeglNode    *node,
                         const gchar *op_class,
@@ -1654,6 +1649,8 @@
   gegl_operation_context_destroy (context);
 }
 
+/* Creates, sets up and returns a new context for the node, or just returns it
+ * if it is already set up. Also adds it to an internal hash table. */
 GeglOperationContext *
 gegl_node_add_context (GeglNode *self,
                        gpointer  context_id)
Index: gegl/graph/gegl-visitable.h
===================================================================
--- gegl/graph/gegl-visitable.h	(révision 2958)
+++ gegl/graph/gegl-visitable.h	(copie de travail)
@@ -37,7 +37,6 @@
   void       (* accept)         (GeglVisitable *interface,
                                  GeglVisitor   *visitor);
   GSList   * (* depends_on)     (GeglVisitable *interface);
-  gboolean   (* needs_visiting) (GeglVisitable *interface);
 };
 
 
@@ -46,7 +45,6 @@
 void       gegl_visitable_accept         (GeglVisitable *interface,
                                           GeglVisitor   *visitor);
 GSList   * gegl_visitable_depends_on     (GeglVisitable *interface);
-gboolean   gegl_visitable_needs_visiting (GeglVisitable *interface);
 
 
 
Index: gegl/graph/gegl-visitor.c
===================================================================
--- gegl/graph/gegl-visitor.c	(révision 2958)
+++ gegl/graph/gegl-visitor.c	(copie de travail)
@@ -182,6 +182,7 @@
   return g_hash_table_lookup (self->hash, visitable);
 }
 
+/* resets the object's data (list of visits and visitable statuses) */
 void gegl_visitor_reset (GeglVisitor   *self)
 {
   if (self->visits_list)
@@ -192,6 +193,8 @@
   g_hash_table_remove_all (self->hash);
 }
 
+/* Inserts the visitable into the object's hash table of visitables with the
+ * object as a key and a new GeglVisitInfo (zero initialised) as object*/
 static void
 insert (GeglVisitor   *self,
         GeglVisitable *visitable)
@@ -206,6 +209,7 @@
     }
 }
 
+/* Returns TRUE if a GeglVisitable has already been visited */
 static gboolean
 get_visited (GeglVisitor   *self,
              GeglVisitable *visitable)
@@ -311,13 +315,13 @@
   g_return_if_fail (GEGL_IS_VISITOR (self));
   g_return_if_fail (GEGL_IS_VISITABLE (visitable));
 
-  if (gegl_visitable_needs_visiting (visitable))
-    {
-      init_dfs_traversal (self, visitable);
-      dfs_traverse (self, visitable);
-    }
+  /* sets up the structures that keeps track of the */
+  init_dfs_traversal (self, visitable);
+  dfs_traverse (self, visitable);
 }
 
+/* Recursively (depth first) sets up the structure (hash) that keeps track of
+ * if a visitable's status */
 static void
 init_dfs_traversal (GeglVisitor   *self,
                     GeglVisitable *visitable)
@@ -325,6 +329,7 @@
   GSList *depends_on_list;
   GSList *llink;
 
+  /* add the visitable to the list */
   insert (self, visitable);
   depends_on_list = gegl_visitable_depends_on (visitable);
   llink           = depends_on_list;
@@ -333,13 +338,12 @@
     {
       GeglVisitable *visitable = llink->data;
 
-      if (gegl_visitable_needs_visiting (visitable))
-        {
-          GeglVisitInfo *visit_info = lookup (self, visitable);
+      GeglVisitInfo *visit_info = lookup (self, visitable);
 
-          if (!visit_info)
-            init_dfs_traversal (self, visitable);
-        }
+      /* if the visitable doesn't have a visit_info,
+       * then it needs to be initialised */
+      if (!visit_info)
+        init_dfs_traversal (self, visitable);
 
       llink = g_slist_next (llink);
     }
@@ -347,6 +351,8 @@
   g_slist_free (depends_on_list);
 }
 
+/* Recursively (depth first) traverses the visitables and call's their
+ * accept methods */
 static void
 dfs_traverse (GeglVisitor   *self,
               GeglVisitable *visitable)
@@ -361,18 +367,19 @@
     {
       GeglVisitable *visitable = llink->data;
 
-      if (gegl_visitable_needs_visiting (visitable))
-        {
-          if (!get_visited (self, visitable))
-            dfs_traverse (self, visitable);
-        }
+      /* if the visitable has not yet been visitied then visit it */
+      if (!get_visited (self, visitable))
+        dfs_traverse (self, visitable);
 
       llink = g_slist_next (llink);
     }
 
   g_slist_free (depends_on_list);
 
+  /* trigger the actual visit (call the visitable's accept method that will
+   * call the visitable's visit method (c.f. the visitor pattern)*/
   gegl_visitable_accept (visitable, self);
+  /* mark the visitable as already visited*/
   set_visited (self, visitable, TRUE);
 }
 
@@ -478,6 +485,8 @@
     }
 }
 
+/* should be called by extending classes when their visit_pad function
+ * is called */
 void
 gegl_visitor_visit_pad (GeglVisitor *self,
                         GeglPad     *pad)
@@ -500,6 +509,8 @@
   self->visits_list = g_slist_prepend (self->visits_list, pad);
 }
 
+/* should be called by extending classes when their visit_node function
+ * is called */
 void
 gegl_visitor_visit_node (GeglVisitor *self,
                          GeglNode    *node)
@@ -515,6 +526,7 @@
     klass->visit_node (self, node);
 }
 
+/* adds the visiting node to the list of visits */
 static void
 visit_node (GeglVisitor *self,
             GeglNode    *node)
Index: gegl/operation/gegl-operation.c
===================================================================
--- gegl/operation/gegl-operation.c	(révision 2958)
+++ gegl/operation/gegl-operation.c	(copie de travail)
@@ -123,6 +123,8 @@
   return klass->process (operation, context, output_pad, result);
 }
 
+/* Calls an extending class' get_bound_box method if defined otherwise
+ * just returns a zero-initiliased bouding box */
 GeglRectangle
 gegl_operation_get_bounding_box (GeglOperation *self)
 {
@@ -228,6 +230,7 @@
   klass->attach (self);
 }
 
+/* Calls the prepare function on the operation that extends this base class */
 void
 gegl_operation_prepare (GeglOperation *self)
 {
Index: gegl/process/gegl-prepare-visitor.c
===================================================================
--- gegl/process/gegl-prepare-visitor.c	(révision 2958)
+++ gegl/process/gegl-prepare-visitor.c	(copie de travail)
@@ -51,6 +51,8 @@
 {
 }
 
+/* adds a context to the node, calls the operation's prepare method and
+ * sets the node's "needed rectangle" to an empty one */
 static void
 gegl_prepare_visitor_visit_node (GeglVisitor *self,
                                  GeglNode    *node)
@@ -59,6 +61,7 @@
 
   glong          time = gegl_ticks ();
 
+  /* call the parent's class (gegl-visitor.c) visit_node function */
   GEGL_VISITOR_CLASS (gegl_prepare_visitor_parent_class)->visit_node (self, node);
 
   if (self->context_id == NULL)
@@ -86,6 +89,7 @@
 
   gegl_operation_prepare (operation);
   {
+    /* initialise the "needed rectangle" to an empty one */
     GeglRectangle empty ={0,};
     gegl_node_set_need_rect (node, self->context_id, &empty);
   }
Index: gegl/process/gegl-cr-visitor.c
===================================================================
--- gegl/process/gegl-cr-visitor.c	(révision 2958)
+++ gegl/process/gegl-cr-visitor.c	(copie de travail)
@@ -53,6 +53,7 @@
 {
 }
 
+/* sets the context's result_rect and refs */
 static void
 gegl_cr_visitor_visit_node (GeglVisitor *self,
                             GeglNode    *node)
Index: gegl/process/gegl-eval-mgr.c
===================================================================
--- gegl/process/gegl-eval-mgr.c	(révision 2958)
+++ gegl/process/gegl-eval-mgr.c	(copie de travail)
@@ -64,7 +64,7 @@
   self->eval_visitor = g_object_new (GEGL_TYPE_EVAL_VISITOR, "id", context_id, NULL);
   self->cr_visitor = g_object_new (GEGL_TYPE_CR_VISITOR, "id", context_id, NULL);
   self->finish_visitor = g_object_new (GEGL_TYPE_FINISH_VISITOR, "id", context_id, NULL);
-  self->state = 0;
+  self->state = UNINITIALIZED;
 }
 
 static void
@@ -114,23 +114,17 @@
         }
     }
 
-  if (mgr->state)
+  if (mgr->state != UNINITIALIZED)
     {
-      mgr->state = 1;
+      mgr->state = NEED_REDO_PREPARE_AND_HAVE_RECT_TRAVERSAL;
     }
 
   return FALSE;
 }
 
 
-/**
- * gegl_eval_mgr_apply:
- * @self: a #GeglEvalMgr.
- * @root:
- * @property_name:
- *
- * Update this property.
- **/
+/*
+ */
 GeglBuffer *
 gegl_eval_mgr_apply (GeglEvalMgr *self)
 {
@@ -144,6 +138,9 @@
 
   gegl_instrument ("gegl", "process", 0);
 
+  g_debug( "{%s:%d} Evaluating roi=[h%d, w%d, x%d, y%d] ", __FILE__, __LINE__,
+          self->roi.height, self->roi.width, self->roi.x, self->roi.y );
+
   root=self->node;
   pad = gegl_node_get_pad (root, self->pad_name);
   /* Use the redirect output NOP of a graph instead of a graph if a traversal
@@ -156,22 +153,27 @@
 
   g_object_ref (root);
 
+  /* do the necessary set-up work (all using depth first traversal) */
   switch (self->state)
     {
-      case 0:
+      case UNINITIALIZED:
+        /* Set up the node's context and "needed rectangle"*/
         gegl_visitor_reset (self->prepare_visitor);
         gegl_visitor_dfs_traverse (self->prepare_visitor, GEGL_VISITABLE (root));
+        /* No idea why there is a second call */
         gegl_visitor_reset (self->prepare_visitor);
         gegl_visitor_dfs_traverse (self->prepare_visitor, GEGL_VISITABLE (root));
-      case 1:
+      case NEED_REDO_PREPARE_AND_HAVE_RECT_TRAVERSAL:
+        /* sets up the node's rect (bounding box) */
         gegl_visitor_reset (self->have_visitor);
         gegl_visitor_dfs_traverse (self->have_visitor, GEGL_VISITABLE (root));
-      case 2:
+      case NEED_CONTEXT_SETUP_TRAVERSAL:
         gegl_visitor_reset (self->prepare_visitor);
         gegl_visitor_dfs_traverse (self->prepare_visitor, GEGL_VISITABLE (root));      
-        self->state = 2;
+        self->state = NEED_CONTEXT_SETUP_TRAVERSAL;
      }
 
+  /* set up the root node */
   if (self->roi.width == -1 &&
       self->roi.height == -1)
     {
@@ -181,6 +183,7 @@
   gegl_node_set_need_rect (root, context_id, &self->roi);
   root->is_root = TRUE;
 
+  /* set up the context's rectangle (breadth first traversal) */
   gegl_visitor_reset (self->cr_visitor);
   gegl_visitor_bfs_traverse (self->cr_visitor, GEGL_VISITABLE (root));
 
@@ -196,6 +199,7 @@
     }
 #endif
 
+  /* now let's do the real work */
   gegl_visitor_reset (self->eval_visitor);
   if (pad)
     {
@@ -225,6 +229,7 @@
       g_value_unset (&value);
     }
 
+  /* do the clean up */
   gegl_visitor_reset (self->finish_visitor);
   gegl_visitor_dfs_traverse (self->finish_visitor, GEGL_VISITABLE (root));
 
Index: gegl/process/gegl-eval-mgr.h
===================================================================
--- gegl/process/gegl-eval-mgr.h	(révision 2958)
+++ gegl/process/gegl-eval-mgr.h	(copie de travail)
@@ -32,6 +32,15 @@
 #define GEGL_IS_EVAL_MGR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GEGL_TYPE_EVAL_MGR))
 #define GEGL_EVAL_MGR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GEGL_TYPE_EVAL_MGR, GeglEvalMgrClass))
 
+enum GeglEvalMgrStates
+{
+    UNINITIALIZED,
+    NEED_REDO_PREPARE_AND_HAVE_RECT_TRAVERSAL,  /* means we need to redo an
+                                                 * extra prepare and
+                                                 * have_rect traversal.*/
+    NEED_CONTEXT_SETUP_TRAVERSAL /*means we need a prepare traversal to set
+                                  * up the contexts on the nodes. */
+};
 
 typedef struct _GeglEvalMgrClass GeglEvalMgrClass;
 
@@ -42,16 +51,10 @@
   gchar     *pad_name;
   GeglRectangle roi;
 
-  gint       state; /* whether we can fire off rendering requests straight
-                           away or we have to re-prepare etc the graph
-                           0: mean uninitialized.
-                           1: means we need to redo an extra prepare and
-                              have_rect traversal.
-                           2: means we need a prepare traversal to set
-                              up the contexts on the nodes.
-                         */
+  enum GeglEvalMgrStates state; /* whether we can fire off rendering requests straight
+                                 * away or we have to re-prepare etc the graph */
 
-  /* we keep these objects around, they are to expensive to throw away */
+  /* we keep these objects around, they are too expensive to throw away */
   GeglVisitor *prepare_visitor;
   GeglVisitor *cr_visitor;
   GeglVisitor *eval_visitor;
Index: gegl/process/gegl-have-visitor.c
===================================================================
--- gegl/process/gegl-have-visitor.c	(révision 2958)
+++ gegl/process/gegl-have-visitor.c	(copie de travail)
@@ -51,6 +51,7 @@
 {
 }
 
+/* sets up the node's bounding box */
 static void
 gegl_have_visitor_visit_node (GeglVisitor *self,
                               GeglNode    *node)
