diff --git a/tools/ggDeco/ggDeco_Arg.ml b/tools/ggDeco/ggDeco_Arg.ml
index fefcfdf7f16c9a82875145cbce8d94e21654ffe4..521fb71ff7158b37fcfb1c6b6882d76cf759edea 100644
--- a/tools/ggDeco/ggDeco_Arg.ml
+++ b/tools/ggDeco/ggDeco_Arg.ml
@@ -18,7 +18,9 @@ type t = {
 }
 
 let usage_msg tool = 
-  ("usage: " ^ tool ^ " <algoFiles>... <file> [-o <file>]\n" )
+  ("usage: " ^ tool ^ " \"<decoration pattern>\" <input-file.dot> [option]*
+ decorates an <input-file.dot> using a <decoration pattern>. 
+" )
 
 let print_usage tool = Printf.printf "\n%s use -h for additional information.\n\n" (usage_msg tool); flush stdout; exit 1
 
@@ -78,28 +80,27 @@ let printSpec args outChannel (c, messageList) = (
 let help args tool = (
   Printf.printf "\n";
   Printf.printf "%s" (usage_msg tool);
-  Printf.printf "\n";
-  Printf.printf "Add or replace the 'algo' label in the dot file, to change the algorithms attached to each node.\n";
-  Printf.printf "<file> is the dot file on which you wish to change the algo.\n";
-  Printf.printf "<algo-files> describe which nodes will have which algo attached to them. The syntax is the following :\n";
-  Printf.printf "\n";
-  Printf.printf "  -  To assign a file (containing an algo) to one node, write 'i:file', 'i' being the index of the node\n";
-  Printf.printf "     and 'file' being the file of the algo. \n";
-  Printf.printf "\n";
-  Printf.printf "  -  To assign a file to multiple nodes, write 'i-j:file', with 'i' being the index of the first node,\n";
-  Printf.printf "     'j' being the last node's index (included) and 'file' being the file of the algo. \n";
-  Printf.printf "     Note : write 'i-:file' to assign the file to all nodes from i.\n";
-  Printf.printf "\n";
-  Printf.printf "  -  Concatenate all the the descriptions, with a whitespace between each.\n";
-  Printf.printf "     Example : \"1:root.ml 2-:p.ml\" assign root.ml to the first node, and p.ml to the other ones.\n";
-                      (* maybe I should change it such that it accepts with or without the double quotes *)
-  Printf.printf "\n";
-  Printf.printf "\n";
-  Printf.printf "============ Available Options ============\n\n";
-  (
-    List.iter (printSpec args stdout) (List.rev args._general_man)
-  );
-  Printf.printf "\n";
+  Printf.printf "
+ <decoration pattern> specify which algos should be attached to which nodes.
+ Nodes ids are supposed to be consecutive strictly positive integers. 
+ The <decoration pattern> syntax (in EBNF) is:
+   <decoration pattern> ::= <deco><more>
+   <deco> ::= 
+    | <int>:<string>
+    | <int>-<int>:<string>
+    | <int>-:<string>
+   <more> ::= ([ \\t]*<deco>)*
+
+  \"i:file\"   attaches <file> to node <i>
+  \"i-j:file\" attaches <file> to nodes <i>, <i>+1, ..., <j>
+  \"i-:file\"  attaches <file> to nodes <i>, <i>+1, ..., <the last node>
+
+  Example: the decoration pattern \"1:root.ml 2-:p.ml\" assigns 
+    \"root.ml\" to the first node, and \"p.ml\" to the other ones.
+ 
+[option] are:
+";
+  List.iter (printSpec args stdout) (List.rev args._general_man);
   exit 0
 )
 
@@ -114,15 +115,13 @@ let mkopt : t -> string list -> ?arg:string -> Arg.spec -> (string list -> unit)
 (*** User Options Tab **)
 let (mkoptab : string array -> t -> unit) = 
   fun argv args -> (
-
     mkopt args ["--output";"-o"] ~arg:" <file>"
       (Arg.String (fun s -> args.output <- s))
-      ["Set the output file to the given file.\n"];
-
+      ["Redirect stdout into a <file>"];
 
     mkopt args ["--help";"-h"]
       (Arg.Unit (fun () -> help args argv.(0) ))
-      ["Prints this help\n"];
+      ["Print this help\n"];
   )
 
 (* all unrecognized options are accumulated *)
@@ -136,38 +135,39 @@ let parse_file_spec : (string list -> files_spec_t list) =
   fun s ->
   List.map
     (fun file -> 
-      try (
-        Scanf.sscanf file "%[-0-9]:%s"
-          (fun range file -> 
-            if range = "" then
-              raise (Invalid_file_spec
-                       (file, "The first and last node's indexes are missing")) 
-            else
-              Scanf.sscanf range "%d%s"
-                (fun a s -> 
-                  if (a < 0) then
-                    raise (Invalid_file_spec
-                             (file,"The first node's index have to be positive or null")) else
-                    if (s = "") then (a,a,file) else
-                      if (s = "-") then (a,-1,file) else
-                        Scanf.sscanf s "-%d" (fun b -> 
-                            if (b < a) then 
-                              raise
-                                (Invalid_file_spec
-                                   (file,
-                                    "The last node's index have to be higher than the first node's index")) 
-                            else 
-                              (a,b,file)
-                          )
-                )
-          )
-      )
-      with 
-      | Scanf.Scan_failure _ -> 
+       try (
+         Scanf.sscanf file "%[-0-9]:%s"
+           (fun range file -> 
+              if range = "" then
+                raise (Invalid_file_spec
+                         (file, "The  first and last node's  indexes are \
+                                 missing")) 
+              else
+                Scanf.sscanf range "%d%s"
+                  (fun a s -> 
+                     if (a < 0) then
+                       raise (Invalid_file_spec
+                                (file,"The first node's index have to be positive or null")) else
+                     if (s = "") then (a,a,file) else
+                     if (s = "-") then (a,-1,file) else
+                       Scanf.sscanf s "-%d" (fun b -> 
+                           if (b < a) then 
+                             raise
+                               (Invalid_file_spec
+                                  (file,
+                                   "The last node's index have to be higher than the first node's index")) 
+                           else 
+                             (a,b,file)
+                         )
+                  )
+           )
+       )
+       with 
+       | Scanf.Scan_failure _ -> 
          raise (
-             Invalid_file_spec (
-                 file, 
-                 "The boundaries (first and last node's indexes) should be integers, but an non-numerical character has been found"))
+           Invalid_file_spec (
+             file, 
+             "The boundaries (first and last node's indexes) should be integers, but an non-numerical character has been found"))
     ) s
 
 let rec pop l = (* last ? *) 
diff --git a/tools/graphgen/graphGen_arg.ml b/tools/graphgen/graphGen_arg.ml
index 5a6f7d5eea2dc60b403451fccc48dc467a44bd1b..a9e129cf99f3ec1ac7be9b802859617814c0df14 100644
--- a/tools/graphgen/graphGen_arg.ml
+++ b/tools/graphgen/graphGen_arg.ml
@@ -42,53 +42,54 @@ type t = {
   mutable _margin : int;
 }
 
-let usage_msg do_print_command tool = 
-  if do_print_command then 
+let usage_msg do_print_command tool =
+  "gg is an experimental graph generator.\n"^
+  (if do_print_command then 
     ("usage: " ^ tool ^ " <command> [options]\n")
   else
-    ("usage: "^tool^" [options]\n")
+    ("usage: "^tool^" [options]\n"))
 
 let print_usage output do_print_command tool = 
-    Printf.fprintf output "%s%s" (usage_msg do_print_command tool) (
-      if (do_print_command) then 
+  Printf.fprintf output "%s%s" (usage_msg do_print_command tool) (
+    if (do_print_command) then 
       "use -h to see the available commands.\n\n" 
     else "use -h to see available options.\n"
-    )
+  )
 
 
 let (make_args : unit -> t) =
   fun () ->
-    {
-      outputFile = "";
-      dotUDG = "";
-      dotUDGrad = "";
-      action = "void";
-
-      n = -1;
-      grid = {
-        width = 0;
-        height = 0;
-      };
-      er = 0.3;
-      ba = 2;
-      qudg = {
-        width = 10.;
-        height = 10.;
-        radius = 3.;
-        r1 = 2.;
-        p = 0.5;
-      };
-
-      attr = [];
-
-      silent = false;
-      directed = false;
-      _args  = [];
-      _man = [];
-
-      _others  = [];
-      _margin  = 12;
-    }
+  {
+    outputFile = "";
+    dotUDG = "";
+    dotUDGrad = "";
+    action = "void";
+
+    n = -1;
+    grid = {
+      width = 0;
+      height = 0;
+    };
+    er = 0.3;
+    ba = 2;
+    qudg = {
+      width = 10.;
+      height = 10.;
+      radius = 3.;
+      r1 = 2.;
+      p = 0.5;
+    };
+
+    attr = [];
+
+    silent = false;
+    directed = false;
+    _args  = [];
+    _man = [];
+
+    _others  = [];
+    _margin  = 12;
+  }
 
 let first_line b = (
   try (
diff --git a/tools/readme.org b/tools/readme.org
new file mode 100644
index 0000000000000000000000000000000000000000..2b618272d0bd26e6bae86e3f379422ef323e7d04
--- /dev/null
+++ b/tools/readme.org
@@ -0,0 +1,6 @@
+
+Some experimental but yet useful tools by Nathan Rébiscoul and Gwennan
+Eliezer (undergraduate trainees).
+
+- =gg= is a dot graph generator.
+- =gg-deco= decorates graphs generated by =gg=