diff --git a/modules/antispam.pl b/modules/antispam.pl
new file mode 100755
index 00000000..b9c11d60
--- /dev/null
+++ b/modules/antispam.pl
@@ -0,0 +1,66 @@
+# Copyright (C) 2004 Fletcher T. Penney
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.
+# 59 Temple Place, Suite 330
+# Boston, MA 02111-1307 USA
+
+$ModulesDescription .= '
';
+
+use vars qw($DoMaskEmail $CreateMailtoLinks);
+
+$DoMaskEmail = 1; # Mask all email, not just those in []'s
+$CreateMailtoLinks = 1; # Create mailto's for all addresses
+
+$EmailRegExp = '[\w\.\-]+@([\w\-]+\.)+[\w]+';
+
+
+push(@MyRules, \&MaskEmailRule);
+
+sub MaskEmailRule {
+ # Allow [email@foo.bar Email Me] links
+ if (m/\G\[($EmailRegExp(\s\w+)*\s*)\]/igc) {
+ $chunk = $1;
+ $chunk =~ s/($EmailRegExp)//i;
+ $email = $1;
+ $chunk =~ s/^\s*//;
+ $chunk =~ s/\s*$//;
+
+ $masked="";
+ @decimal = unpack('C*', $email);
+ foreach $i (@decimal) {
+ $masked.="".$i.";";
+ }
+ $email = $masked;
+ $chunk = $email if $chunk eq "";
+ return "$chunk";
+ }
+
+ if (m/\G($EmailRegExp)/igc) {
+ $email=$1;
+ if ($DoMaskEmail) {
+ $masked="";
+ @decimal = unpack('C*', $email);
+ foreach $i (@decimal) {
+ $masked.="".$i.";";
+ }
+ $email = $masked;
+ }
+ if ($CreateMailtoLinks) {
+ $email = "$email";
+ }
+ return $email;
+ }
+ return undef;
+}
diff --git a/modules/clustermap.pl b/modules/clustermap.pl
new file mode 100755
index 00000000..50de969d
--- /dev/null
+++ b/modules/clustermap.pl
@@ -0,0 +1,189 @@
+# Copyright (C) 2004 Fletcher T. Penney
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.
+# 59 Temple Place, Suite 330
+# Boston, MA 02111-1307 USA
+
+$ModulesDescription .= '
";
+
+}
+
+sub ClusterMapAdminRule {
+ ($id, $menuref, *restref) = @_;
+
+ push(@$menuref, ScriptLink('action=clustermap', T('Clustermap')));
+ push(@$menuref, ScriptLink('action=unclustered', T('Pages without a Cluster')));
+}
\ No newline at end of file
diff --git a/modules/htmllinks.pl b/modules/htmllinks.pl
new file mode 100755
index 00000000..9f4bc84e
--- /dev/null
+++ b/modules/htmllinks.pl
@@ -0,0 +1,36 @@
+# Copyright (C) 2004 Fletcher T. Penney
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.
+# 59 Temple Place, Suite 330
+# Boston, MA 02111-1307 USA
+
+$ModulesDescription .= '
';
+
+use vars qw($HtmlLinks);
+
+$HtmlLinks = 0; # Mask all email, not just those in []'s
+
+push(@MyRules, \&HtmlLinksRule);
+
+$RuleOrder{\&HtmlLinksRule} = 105;
+
+sub HtmlLinksRule {
+ if (-f GetLockedPageFile($OpenPageName)) {
+ $HtmlLinks = 1;
+ } else {
+ $HtmlLinks = 0;
+ }
+ return undef;
+}
\ No newline at end of file
diff --git a/modules/logbannedcontent.pl b/modules/logbannedcontent.pl
new file mode 100755
index 00000000..0727d7eb
--- /dev/null
+++ b/modules/logbannedcontent.pl
@@ -0,0 +1,51 @@
+# Copyright (C) 2004 Fletcher T. Penney
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.
+# 59 Temple Place, Suite 330
+# Boston, MA 02111-1307 USA
+
+$ModulesDescription .= '
';
+
+use vars qw($BannedFile);
+
+$BannedFile = "$DataDir/spammer.log" unless defined $BannedFile;
+
+*OldBannedContent = *BannedContent;
+*BannedContent = *LogBannedContent;
+
+sub LogBannedContent {
+ my $str = shift;
+ *BannedContent = *OldBannedContent;
+ my $rule = BannedContent($str);
+ if ($rule) {
+ my $visitor = $ENV{'REMOTE_ADDR'};
+
+ # Create timestamp
+ ($sec, $min, $hr, $mday, $mon, $year, $wday, $yday, $isdst) =localtime(time);
+ $year=$year+1900;
+ $mon += 1;
+
+ # Fix for 0's
+ $mon = sprintf("%02d", $mon);
+ $day = sprintf("%02d", $day);
+ $sec = sprintf("%02d", $sec);
+ $min = sprintf("%02d", $min);
+ $hr = sprintf("%02d", $hr);
+
+ AppendStringToFile($BannedFile, "$year/$mon/$mday\t$hr:$min:$sec\t$visitor: $OpenPageName - $rule\n");
+ }
+
+ return $rule;
+}
\ No newline at end of file
diff --git a/modules/slideshow.pl b/modules/slideshow.pl
new file mode 100755
index 00000000..a5570117
--- /dev/null
+++ b/modules/slideshow.pl
@@ -0,0 +1,219 @@
+# Copyright (C) 2004 Fletcher T. Penney
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.
+# 59 Temple Place, Suite 330
+# Boston, MA 02111-1307 USA
+
+$ModulesDescription .= '