diff --git a/src/plugins/dive/server_interface.ml b/src/plugins/dive/server_interface.ml
index c80a64405a8e1a0ef15b57487b4429728382618f..dc9dcdc2b79f31fb16d69809860ba01640939f87 100644
--- a/src/plugins/dive/server_interface.ml
+++ b/src/plugins/dive/server_interface.ml
@@ -33,30 +33,27 @@ let get_graph =
       graph := Some g;
       g
 
-
-let page = Doc.page (`Plugin "dive")
-    ~title:"Dive Services"
-    ~filename:"dive.md"
+let package = Package.package ~plugin:"dive" ~title:"Dive Services" ()
 
 module Graph =
 struct
   type t = Imprecision_graph.t
-  let syntax = Syntax.any
+  let jtype = Data.Jany.jtype
   let to_json = Imprecision_graph.to_json
 end
 
 module GraphDiff =
 struct
   type t = Imprecision_graph.t * Graph_types.graph_diff
-  let syntax = Syntax.any
+  let jtype = Data.Jany.jtype
   let to_json = fun (g,d) -> Imprecision_graph.diff_to_json g d
 end
 
 module Variable = Data.Collection (struct
-    let name = "dive-variable-name"
+    let name = "variableName"
     let descr = Markdown.plain "The name of variable of the program"
 
-    let signature = Data.Record.signature ~page ~name ~descr ()
+    let signature = Data.Record.signature ()
 
     let _fun_field = Data.Record.option signature
         ~descr:(Markdown.plain "owner function for a local variable")
@@ -68,9 +65,9 @@ module Variable = Data.Collection (struct
 
     type t = Cil_types.varinfo
     module R =
-      (val (Data.Record.publish signature): Data.Record.S with type r = t)
+      (val (Data.Record.publish ~package ~name ~descr signature): Data.Record.S with type r = t)
 
-    let syntax = R.syntax
+    let jtype = R.jtype
 
     let to_json v =
       let varname = v.Cil_types.vname in
@@ -116,9 +113,7 @@ module Variable = Data.Collection (struct
 module Function = Data.Collection (struct
     type t = Cil_types.kernel_function
 
-    let syntax = Syntax.publish ~page ~name:"dive-function-name"
-        ~synopsis:Syntax.string
-        ~descr:(Markdown.plain "The name of a function of the program") ()
+    let jtype = Package.Jkey "fct-name"
 
     let to_json kf =
       `String (Kernel_function.get_name kf)
@@ -135,9 +130,7 @@ module Function = Data.Collection (struct
 module Node = Data.Collection (struct
     type t = Graph_types.node
 
-    let syntax = Syntax.publish ~page ~name:"dive-node"
-        ~synopsis:Syntax.int
-        ~descr:(Markdown.plain "A node identifier in the graph") ()
+    let jtype = Package.Jindex "dive-node"
 
     let to_json node =
       `Int node.Graph_types.node_key
@@ -152,20 +145,20 @@ module Node = Data.Collection (struct
   end)
 
 
-let () = Request.register ~page
-    ~kind:`GET ~name:"dive.graph"
+let () = Request.register ~package
+    ~kind:`GET ~name:"graph"
     ~descr:(Markdown.plain "Retrieve the whole graph")
     ~input:(module Data.Junit) ~output:(module Graph)
     (fun () -> Build.get_graph (get_graph ()))
 
-let () = Request.register ~page
-    ~kind:`EXEC ~name:"dive.clear"
+let () = Request.register ~package
+    ~kind:`EXEC ~name:"clear"
     ~descr:(Markdown.plain "Erase the graph and start over with an empty one")
     ~input:(module Data.Junit) ~output:(module Data.Junit)
     (fun () -> Build.clear (get_graph ()))
 
-let () = Request.register ~page
-    ~kind:`EXEC ~name:"dive.add_var"
+let () = Request.register ~package
+    ~kind:`EXEC ~name:"addVar"
     ~descr:(Markdown.plain "Add a variable to the graph")
     ~input:(module Variable) ~output:(module GraphDiff)
     begin fun var ->
@@ -175,8 +168,8 @@ let () = Request.register ~page
       Build.get_graph g, Build.take_last_differences g
     end
 
-let () = Request.register ~page
-    ~kind:`EXEC ~name:"dive.add_function_alarms"
+let () = Request.register ~package
+    ~kind:`EXEC ~name:"addFunctionAlarms"
     ~descr:(Markdown.plain "Add all alarms of the given function")
     ~input:(module Function) ~output:(module GraphDiff)
     begin fun kf ->
@@ -186,8 +179,8 @@ let () = Request.register ~page
       Build.get_graph g, Build.take_last_differences g
     end
 
-let () = Request.register ~page
-    ~kind:`EXEC ~name:"dive.explore"
+let () = Request.register ~package
+    ~kind:`EXEC ~name:"explore"
     ~descr:(Markdown.plain "Explore the graph starting from an existing vertex")
     ~input:(module Node) ~output:(module GraphDiff)
     begin fun node ->
@@ -197,8 +190,8 @@ let () = Request.register ~page
       Build.get_graph g, Build.take_last_differences g
     end
 
-let () = Request.register ~page
-    ~kind:`EXEC ~name:"dive.show"
+let () = Request.register ~package
+    ~kind:`EXEC ~name:"show"
     ~descr:(Markdown.plain "Show the dependencies of an existing vertex")
     ~input:(module Node) ~output:(module GraphDiff)
     begin fun node ->
@@ -208,8 +201,8 @@ let () = Request.register ~page
       Build.get_graph g, Build.take_last_differences g
     end
 
-let () = Request.register ~page
-    ~kind:`EXEC ~name:"dive.hide"
+let () = Request.register ~package
+    ~kind:`EXEC ~name:"hide"
     ~descr:(Markdown.plain "Hide the dependencies of an existing vertex")
     ~input:(module Node) ~output:(module GraphDiff)
     begin fun node ->
diff --git a/src/plugins/server/package.ml b/src/plugins/server/package.ml
index 202558bcb39195f5c5b7fe7c680cedb435237931..2c1fdf16826a177a0118278ae6ab6cd9deb3c667 100644
--- a/src/plugins/server/package.ml
+++ b/src/plugins/server/package.ml
@@ -302,17 +302,17 @@ let collection = ref None (* computed *)
 let name_re = Str.regexp "^[a-zA-Z0-9]+$"
 let package_re = Str.regexp "^[a-z0-9]+\\(\\.[a-z0-9]+\\)*$"
 
-let check_name name =
-  if not (Str.string_match name_re name 0) then
-    Senv.fatal
-      "Invalid identifier %S (use « camlCased » names)" name
-
 let check_package pkg =
   if not (Str.string_match package_re pkg 0) then
     Senv.fatal
       "Invalid package identifier %S (use dot separated lowercase names)"
       pkg
 
+let check_name name =
+  if not (Str.string_match name_re name 0) then
+    Senv.fatal
+      "Invalid identifier %S (use « camlCased » names)" name
+
 let register_ident id =
   if IdSet.mem id !registry then
     Senv.fatal "Duplicate identifier '%a'" pp_ident id ;
@@ -333,10 +333,11 @@ let resolve_readme ~plugin = function
 (* --- Declarations                                                       --- *)
 (* -------------------------------------------------------------------------- *)
 
-let package ?plugin ~title ?(descr=[]) ?readme ~name () =
-  check_package name ;
+let package ?plugin ?name ~title ?(descr=[]) ?readme () =
   let plugin = match plugin with None -> Kernel | Some p -> Plugin p in
-  let pkgname = String.split_on_char '.' name in
+  let pkgname = match name with
+    | None -> []
+    | Some pkg -> check_package pkg ; String.split_on_char '.' pkg in
   let pkgid = { plugin ; package = pkgname ; name = "*"} in
   let pkgInfo = {
     p_plugin = plugin ;
diff --git a/src/plugins/server/package.mli b/src/plugins/server/package.mli
index 980b01071a040c23780df3afebc8510bdca34fe6..58364ba3fee2c48a553c01db72a1a6677474052d 100644
--- a/src/plugins/server/package.mli
+++ b/src/plugins/server/package.mli
@@ -133,10 +133,10 @@ type package
 
 val package :
   ?plugin:string ->
+  ?name:string ->
   title:string ->
   ?descr:Markdown.text ->
   ?readme:string ->
-  name:string ->
   unit -> package
 
 (**
diff --git a/src/plugins/server/request.mli b/src/plugins/server/request.mli
index 920aa4b6443ee72a9f0988befc56a5285717b28b..2ad33bcacf350678facf25ed8029f866f81ab9c8 100644
--- a/src/plugins/server/request.mli
+++ b/src/plugins/server/request.mli
@@ -89,7 +89,7 @@ val on_signal : signal -> (bool -> unit) -> unit
 *)
 val register :
   package:package ->
-  kind:Main.kind ->
+  kind:kind ->
   name:string ->
   descr:Markdown.text ->
   input:'a input ->