diff --git a/src/docbkx/class-index-html.xsl b/src/docbkx/class-index-html.xsl
new file mode 100644
index 0000000000..92d17342b9
--- /dev/null
+++ b/src/docbkx/class-index-html.xsl
@@ -0,0 +1,27 @@
+
+
+ http://static.springframework.org/spring-security/site/xref/
+ http://static.springframework.org/spring-security/site/reference/html/
+
+
+
+
+ Class and Interface Index
+
+
+
+
+
+
+
+
+ Source
+
+
+
+
+
+
+
+
+
diff --git a/src/docbkx/classindex.pl b/src/docbkx/classindex.pl
new file mode 100755
index 0000000000..e87f6bbaf1
--- /dev/null
+++ b/src/docbkx/classindex.pl
@@ -0,0 +1,90 @@
+#! /usr/bin/perl
+
+use strict;
+
+# Get list of links to class src packages
+system("curl http://static.springframework.org/spring-security/site/xref/allclasses-frame.html > allclasses-frame.html");
+my @all_classes = `cat allclasses-frame.html`;
+
+$#all_classes > 0 || die "No lines in xref";
+
+#AbstractAccessDecisionManager
+
+my %classnames_to_src;
+
+while ($_ = pop @all_classes) {
+ next unless $_ =~ /(([a-zA-Z0-9_]+?))<\/a>/;
+ $classnames_to_src{$2} = $1;
+}
+
+#my @docbook = glob("*.xml");
+my @docbook;
+
+# Read the includes rather than using globbing to get the ordering right for the index.
+open MAINDOC, ") {
+ if (/href="(.*\.xml)"/) {
+ push @docbook, $1;
+ }
+}
+
+# Hash of xml:id (i.e. anchor) to filename.html#anchor
+my %id_to_html;
+my %class_index;
+
+# Build map of html pages links
+while (my $file = pop @docbook) {
+ open FILE, $file or die "$!";
+ print "\nProcessing: $file\n\n";
+ my $file_id;
+ while() {
+ if (/.* xml:id="([a-z0-9-]+?)"/) {
+ $file_id = $1;
+ last;
+ }
+ }
+
+ $id_to_html{$file_id} = "$file_id.html#$file_id";
+
+ while () {
+ next unless /.* xml:id="([a-z0-9-]+?)"/;
+ print "$1\n";
+ $id_to_html{$1} = "$file_id.html#$1";
+ }
+ close FILE;
+}
+
+# Get the list of class/interface names and their section ids/titles
+my @class_references = split /;/,`xsltproc --xinclude index-classes.xsl springsecurity.xml`;
+# Get unique values
+my %seen = ();
+@class_references = grep { !$seen{$_}++} @class_references;
+print "\nThere are $#class_references references to classes and interfaces.\n";
+
+my %id_to_title;
+my %classnames_to_ids = ();
+
+foreach my $class_id_title (@class_references) {
+ (my $class, my $id, my $title) = split /:/, $class_id_title;
+ $title =~ s/</;
+ $title =~ s/>/>/;
+ $id_to_title{$id} = $title;
+ push( @{$classnames_to_ids{$class}}, $id );
+}
+open INDEX, ">classindex.xml" || die "Couldn't open output file\n";
+print INDEX "\n";
+foreach my $class (sort keys %classnames_to_ids) {
+ print INDEX "\n";
+ foreach my $id (@{$classnames_to_ids{$class}}) {
+ print INDEX " \n";
+ }
+ print INDEX "\n"
+
+
+}
+print INDEX "\n";
+close INDEX;
diff --git a/src/docbkx/index-classes.xsl b/src/docbkx/index-classes.xsl
new file mode 100644
index 0000000000..37d4235109
--- /dev/null
+++ b/src/docbkx/index-classes.xsl
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file