diff --git a/docs/en/rst/integrating/index.rst b/docs/en/rst/integrating/index.rst
index 816ffe8..d546290 100644
--- a/docs/en/rst/integrating/index.rst
+++ b/docs/en/rst/integrating/index.rst
@@ -20,3 +20,4 @@ explains how to use the available mechanisms for integration and customization.
    templates
    extensions
    apis
+   api/index
diff --git a/docs/makedocs.pl b/docs/makedocs.pl
index 36ffc45..fdb6900 100755
--- a/docs/makedocs.pl
+++ b/docs/makedocs.pl
@@ -31,6 +31,7 @@ use File::Basename;
 BEGIN { chdir dirname($0); }
 
 use lib qw(.. ../lib lib);
+use open ':encoding(utf8)';
 
 use Cwd;
 use File::Copy::Recursive qw(rcopy);
@@ -43,6 +44,10 @@ use Bugzilla::Constants qw(BUGZILLA_VERSION bz_locations);
 use Pod::Simple::HTMLBatch::Bugzilla;
 use Pod::Simple::HTML::Bugzilla;
 
+use Pod::Simple::Search;
+use Pod::POM::View::Restructured;
+use File::Spec;
+
 ###############################################################################
 # Subs
 ###############################################################################
@@ -57,40 +62,69 @@ sub MakeDocs {
     print "\n";
 }
 
-sub make_pod {
-    say "Creating API documentation...";
-
-    my $converter = Pod::Simple::HTMLBatch::Bugzilla->new;
-    # Don't output progress information.
-    $converter->verbose(0);
-    $converter->html_render_class('Pod::Simple::HTML::Bugzilla');
-
-    my $doctype      = Pod::Simple::HTML::Bugzilla->DOCTYPE;
-    my $content_type = Pod::Simple::HTML::Bugzilla->META_CT;
-    my $bz_version   = BUGZILLA_VERSION;
-
-    my $contents_start = <<END_HTML;
-$doctype
-<html>
-  <head>
-    $content_type
-    <title>Bugzilla $bz_version API Documentation</title>
-  </head>
-  <body class="contentspage">
-    <h1>Bugzilla $bz_version API Documentation</h1>
-END_HTML
-
-    $converter->contents_page_start($contents_start);
-    $converter->contents_page_end("</body></html>");
-    $converter->add_css('./../../../../style.css');
-    $converter->javascript_flurry(0);
-    $converter->css_flurry(0);
-    make_path('html/integrating/api');
-    $converter->batch_convert(['../../'], 'html/integrating/api');
+sub pod2rst {
+    my $path = shift;
+    my %callbacks = ();#'link' => \&links,);
 
-    print "\n";
+    say "Converting POD to RST...";
+    my $name2path = Pod::Simple::Search->new->inc(0)->verbose(0)->survey(@{['../']});
+
+    my $ind_path = "$path/rst/integrating/api/";
+    rmtree($ind_path);
+    make_path($ind_path);
+
+    my $FILE;
+    open($FILE, '>', "$ind_path/index.rst") || die ("Can't open rst file");
+    print($FILE <<'EOI');
+.. highlight:: perl
+
+.. _developer
+
+===================================
+Developer Guide
+===================================
+
+You may end hacking the code, here is the API.
+
+.. toctree::
+   :maxdepth: 2
+
+
+EOI
+
+    foreach my $mod (sort keys %$name2path) {
+        if ($mod =~ /^lib::/) {
+            say "Deleting %mod";
+            delete $name2path->{$mod};
+            next;
+        }
+
+        my $title = $mod;
+
+        $title =~ s/^extensions::/Bugzilla::Extension::/;
+        $title =~ s/lib:://;
+
+        my $abs_path = $name2path->{$mod};
+        my $fpath = File::Spec->abs2rel($abs_path, '../');
+        my ($volume,$directories,$file) = File::Spec->splitpath( $fpath );
+
+        $directories =~ s{^extensions/}{Bugzilla/Extension/};
+        $directories =~ s/lib:://;
+
+        my $dir_path = "$ind_path/$directories";
+        make_path($dir_path);
+        my $out_file = $file;
+        $out_file =~ s/\.[^.]*$//;
+        $out_file .= '.rst';
+        my $conv = Pod::POM::View::Restructured->new({namespace => $title});
+        my $rv = $conv->convert_file($abs_path, $title, "$dir_path$out_file", \%callbacks);
+        print($FILE "   $directories$out_file\n");
+    }
+
+    close($FILE);
 }
 
+
 ###############################################################################
 # Make the docs ...
 ###############################################################################
@@ -108,14 +142,10 @@ closedir(LANGS);
 
 my $docparent = getcwd();
 foreach my $lang (@langs) {
-    chdir "$docparent/$lang";
-
-    make_pod();
+    pod2rst("$docparent/$lang");
 
     next if grep { $_ eq '--pod-only' } @ARGV;
 
-    chdir $docparent;
-
     # Generate extension documentation, both normal and API
     my $ext_dir = bz_locations()->{'extensionsdir'};
     my @ext_paths = grep { $_ !~ /\/create\.pl$/ && ! -e "$_/disabled" }
@@ -131,6 +161,7 @@ foreach my $lang (@langs) {
     # Collect up local extension documentation into the extensions/ dir.
     rmtree("$lang/rst/extensions", 0, 1);
 
+## FIXME should we pull out bits of the POD and place it in to user/admin/service API as appropriate?
     foreach my $ext_name (keys %extensions) {
         my $src = $extensions{$ext_name} . "/*";
         my $dst = "$docparent/$lang/rst/extensions/$ext_name";
