diff --git a/src/plugins/callgraph/requests.ml b/src/plugins/callgraph/requests.ml
index ec50ebcb6aa41c6c03b7b672050b5edd4a79c6a8..e431a7d22ea579d38f36a968ead02525e687a1d3 100644
--- a/src/plugins/callgraph/requests.ml
+++ b/src/plugins/callgraph/requests.ml
@@ -26,7 +26,7 @@ module G = Services.G
 
 (* --- Package declaration --- *)
 
-let package = Package.package ~plugin:"callgraph" ~title:"Callgraph" ()
+let package = Package.package ~plugin:"callgraph" ~title:"Callgraph Services" ()
 
 
 (* --- Helper modules --- *)
diff --git a/src/plugins/server/package.ml b/src/plugins/server/package.ml
index a056c3cad8914e6f1af95a3cdcccf963ffd17026..a61a1319f211fa6c7959e785734d7a65d4af8be6 100644
--- a/src/plugins/server/package.ml
+++ b/src/plugins/server/package.ml
@@ -236,7 +236,7 @@ type packageInfo = {
   p_package : string list ;
   p_title : string ;
   p_descr : Markdown.text ;
-  p_readme : Filepath.Normalized.t option ;
+  p_readme : string option ;
   p_content : declInfo list ;
 }
 
@@ -377,17 +377,6 @@ let register_ident id =
     Senv.fatal "Duplicate identifier '%a'" pp_ident id ;
   registry := IdSet.add id !registry
 
-let resolve_readme ~plugin = function
-  | None -> None
-  | Some readme ->
-    let file =
-      match plugin with
-      | Kernel ->
-        Filepath.Normalized.concats Fc_config.datadir ["server"; "doc"; readme]
-      | Plugin name ->
-        Filepath.Normalized.concats Fc_config.datadir [name; "doc"; readme]
-    in Some file
-
 (* -------------------------------------------------------------------------- *)
 (* --- Declarations                                                       --- *)
 (* -------------------------------------------------------------------------- *)
@@ -403,7 +392,7 @@ let package ?plugin ?name ~title ?(descr=[]) ?readme () =
     p_package = pkgname ;
     p_title = title ;
     p_descr = descr ;
-    p_readme = resolve_readme ~plugin readme ;
+    p_readme = readme ;
     p_content = [] ;
   } in
   let package = { pkgInfo ; revDecl=[] } in
diff --git a/src/plugins/server/package.mli b/src/plugins/server/package.mli
index 101688e27c7b628e305815f319a42d08c67d354c..34a878af92122b8bcd514e0cc6834815e2345f06 100644
--- a/src/plugins/server/package.mli
+++ b/src/plugins/server/package.mli
@@ -100,7 +100,7 @@ type packageInfo = {
   p_package : string list ;
   p_title : string ;
   p_descr : Markdown.text ;
-  p_readme : Filepath.Normalized.t option ;
+  p_readme : string option ;
   p_content : declInfo list ;
 }
 
diff --git a/src/plugins/server/server_doc.ml b/src/plugins/server/server_doc.ml
index 9641f91c100b78d683e9ba55fb0e13e0249598d0..52eb8613929beaab64f7de7c011f12b6a546f873 100644
--- a/src/plugins/server/server_doc.ml
+++ b/src/plugins/server/server_doc.ml
@@ -68,13 +68,20 @@ let path_for chapter filename =
   | `Kernel -> ".." , Printf.sprintf "kernel/%s" filename
   | `Plugin name -> "../.." , Printf.sprintf "plugins/%s/%s" name filename
 
-let page chapter ~title ?(descr=[]) ?readme ~filename () =
+let path_for_readme ~plugin filename =
+  let dirname = match plugin with Kernel -> "server" | Plugin p -> p in
+  Filepath.Normalized.concats
+    (Filepath.Normalized.of_string ".")
+    ["src";"plugins";dirname;"doc";filename]
+
+let page chapter ~title ?(descr=[]) ?(plugin=Kernel) ~readme ~filename () =
   let rootdir , path = path_for chapter filename in
   try
     let other = Pages.find path !pages in
     Senv.failure "Duplicate page '%s' path@." path ; other
   with Not_found ->
     let order = incr order ; !order in
+    let readme = Option.map (path_for_readme ~plugin) readme in
     let page = {
       order ; rootdir ; path ;
       chapter ; title ; descr ; readme ;
@@ -99,8 +106,7 @@ let publish ~page ?name ?(index=[]) ~title
   page.sections <- section :: page.sections ; href
 
 let protocol ~title ~readme:filename =
-  let readme = Filepath.Normalized.concats Fc_config.datadir ["server"; "doc"; filename] in
-  ignore (page `Protocol ~title ~readme ~filename ())
+  ignore (page `Protocol ~title ~readme:(Some filename) ~filename ())
 
 let () = protocol ~title:"Architecture" ~readme:"server.md"
 
@@ -131,7 +137,8 @@ let page_of_package pkg =
     page chapter
       ~title:pkg.p_title
       ~descr:(Markdown.par pkg.p_descr)
-      ?readme:pkg.p_readme
+      ~plugin:pkg.p_plugin
+      ~readme:pkg.p_readme
       ~filename ()
 
 let kind_of_decl = function
diff --git a/src/plugins/server/server_doc.mli b/src/plugins/server/server_doc.mli
index 635b09905d0c020db922f9023eea93baab663c35..9643170c0704d1e3cca89cea6540eafa479bed13 100644
--- a/src/plugins/server/server_doc.mli
+++ b/src/plugins/server/server_doc.mli
@@ -39,14 +39,15 @@ val chapter : page -> chapter
 (** Obtain the given page in the server documentation.
 
     The readme introductory section is
-    read from the share directory:
-    - [frama-c/share/<filename>] server and kernel pages,
-    - [frama-c/share/<plugin>/server/<filename>] for plugin's pages.
+    read from the source directory:
+    - [src/plugins/server/<filename>] server and kernel pages,
+    - [src/plugins/<plugin>/<filename>] for plugin's pages.
 *)
 val page : chapter ->
   title:string ->
   ?descr:elements ->
-  ?readme:Filepath.Normalized.t ->
+  ?plugin:Package.plugin ->
+  readme:string option ->
   filename:string ->
   unit ->page