afuna: Cat under a blanket. Text: "Cats are just little people with Fur and Fangs" (Default)
afuna ([personal profile] afuna) wrote in [site community profile] changelog2009-08-01 03:05 pm

[dw-free] remove ".bml" on the end of links throughout site

[commit: http://hg.dwscoalition.org/dw-free/rev/8bdc3476e3c5]

http://bugs.dwscoalition.org/show_bug.cgi?id=1464

Remove .bml in links for files in htdocs

Patch by [staff profile] denise.

Files modified:
  • htdocs/accountstatus.bml
  • htdocs/admin/capedit.bml
  • htdocs/admin/console/index.bml
  • htdocs/admin/faq/faqedit.bml
  • htdocs/admin/faq/index.bml
  • htdocs/admin/index.bml
  • htdocs/admin/invites/requests.bml
  • htdocs/admin/memcache.bml
  • htdocs/admin/misc/runoffpoll.bml
  • htdocs/admin/mysql_status.bml
  • htdocs/admin/navtag.bml
  • htdocs/admin/pay/import.bml
  • htdocs/admin/pay/index.bml
  • htdocs/admin/pay/view.bml
  • htdocs/admin/priv/index.bml
  • htdocs/admin/recent_comments.bml
  • htdocs/admin/schools/edit.bml
  • htdocs/admin/schools/index.bml
  • htdocs/admin/schools/merge.bml
  • htdocs/admin/schools/pending.bml
  • htdocs/admin/schools/rename.bml
  • htdocs/admin/spamreports.bml
  • htdocs/admin/statushistory.bml
  • htdocs/admin/styleinfo.bml
  • htdocs/admin/sysban.bml
  • htdocs/admin/userlog.bml
  • htdocs/allpics.bml
  • htdocs/betafeatures.bml
  • htdocs/birthdays.bml
  • htdocs/changeemail.bml
  • htdocs/changepassword.bml
  • htdocs/changepassword.bml.text
  • htdocs/community/create.bml
  • htdocs/community/index.bml
  • htdocs/community/join.bml
  • htdocs/community/leave.bml
  • htdocs/community/manage.bml
  • htdocs/community/members.bml
  • htdocs/community/moderate.bml
  • htdocs/community/pending.bml
  • htdocs/community/search.bml
  • htdocs/community/sentinvites.bml
  • htdocs/community/settings.bml
  • htdocs/community/transfer.bml
  • htdocs/create.bml
  • htdocs/create/index.bml
  • htdocs/create/setup.bml
  • htdocs/customize/advanced/index.bml
  • htdocs/customize/advanced/layerbrowse.bml
  • htdocs/customize/advanced/layers.bml
  • htdocs/customize/advanced/layersource.bml
  • htdocs/customize/advanced/styles.bml
  • htdocs/customize/index.bml
  • htdocs/customize/options.bml
  • htdocs/customize/viewuser.bml
  • htdocs/delcomment.bml
  • htdocs/dev/userlist.bml
  • htdocs/didyouknow/index.bml
  • htdocs/directory.bml
  • htdocs/directorysearch.bml
  • htdocs/editjournal.bml
  • htdocs/editpics.bml
  • htdocs/editprivacy.bml
  • htdocs/edittags.bml
  • htdocs/export.bml
  • htdocs/imgupload.bml
  • htdocs/imguploadrte.bml
  • htdocs/inbox/compose.bml
  • htdocs/interests.bml
  • htdocs/js/commentmanage.js
  • htdocs/js/contextualhover.js
  • htdocs/js/cprod.js
  • htdocs/js/entry.js
  • htdocs/js/quickreply.js
  • htdocs/js/richtext.js
  • htdocs/js/rte.js
  • htdocs/js/widgets/createaccount.js
  • htdocs/js/widgets/friendinterests.js
  • htdocs/legal/index.bml
  • htdocs/legal/privacy.bml
  • htdocs/legal/tos.bml
  • htdocs/login.bml
  • htdocs/logout.bml
  • htdocs/lostinfo.bml
  • htdocs/manage/banusers.bml
  • htdocs/manage/circle/add.bml
  • htdocs/manage/circle/edit.bml
  • htdocs/manage/circle/editfilters.bml
  • htdocs/manage/circle/filter.bml
  • htdocs/manage/circle/index.bml
  • htdocs/manage/circle/invite.bml
  • htdocs/manage/domain.bml
  • htdocs/manage/emailpost.bml
  • htdocs/manage/externalaccount.bml
  • htdocs/manage/index.bml
  • htdocs/manage/invitecodes.bml
  • htdocs/manage/logins.bml
  • htdocs/manage/moodthemes.bml
  • htdocs/manage/profile/index.bml
  • htdocs/manage/pubkey.bml
  • htdocs/manage/tags.bml
  • htdocs/misc/adult_concepts.bml
  • htdocs/misc/adult_explicit.bml
  • htdocs/misc/beta.bml
  • htdocs/misc/downgrader.bml
  • htdocs/misc/get_domain_session.bml
  • htdocs/misc/suggest_qotd.bml
  • htdocs/misc/whereami.bml
  • htdocs/mobile/index.bml
  • htdocs/mobile/login.bml
  • htdocs/mobile/post.bml
  • htdocs/mobile/read.bml
  • htdocs/moodlist.bml
  • htdocs/multisearch.bml
  • htdocs/openid/index.bml
  • htdocs/openid/login.bml
  • htdocs/poll/create.bml
  • htdocs/poll/index.bml
  • htdocs/portal/alter.bml
  • htdocs/portal/get.bml
  • htdocs/portal/ig.bml
  • htdocs/portal/moz.bml
  • htdocs/portal/selectmodule.bml
  • htdocs/postreg/find.bml
  • htdocs/postreg/index.bml
  • htdocs/pubkey.bml
  • htdocs/register.bml
  • htdocs/reject.bml
  • htdocs/robots.txt
  • htdocs/shop.bml
  • htdocs/shop/gifts.bml
  • htdocs/site/index.bml
  • htdocs/support/act.bml
  • htdocs/support/append_request.bml
  • htdocs/support/changenotify.bml
  • htdocs/support/faq.bml
  • htdocs/support/faqbrowse.bml
  • htdocs/support/faqpop.bml
  • htdocs/support/faqsearch.bml
  • htdocs/support/help.bml
  • htdocs/support/history.bml
  • htdocs/support/see_request.bml
  • htdocs/support/stock_answers.bml
  • htdocs/syn/index.bml
  • htdocs/talkread.bml
  • htdocs/talkscreen.bml
  • htdocs/tools/emailmanage.bml
  • htdocs/tools/endpoints/ctxpopup.bml
  • htdocs/tools/memadd.bml
  • htdocs/tools/memories.bml
  • htdocs/tools/opml.bml
  • htdocs/tools/recent_comments.bml
  • htdocs/tools/recent_email.bml
  • htdocs/tools/recent_emailposts.bml
  • htdocs/tools/search.bml
  • htdocs/tools/tellafriend.bml
  • htdocs/tools/textmessage.bml
  • htdocs/tools/userpicfactory.bml
  • htdocs/translate/diff.bml
  • htdocs/translate/edit.bml
  • htdocs/translate/editpage.bml
  • htdocs/translate/index.bml
  • htdocs/translate/search.bml
  • htdocs/translate/searchform.bml
  • htdocs/update.bml
  • htdocs/userinfo.bml
--------------------------------------------------------------------------------
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/accountstatus.bml
--- a/htdocs/accountstatus.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/accountstatus.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -137,7 +137,7 @@ body<=
                         $commlist .= '</ul>';
 
                         $ret .= '<?p ' . BML::ml( '.message.noothermaintainer',
-                                { commlist => $commlist, aopts => "href='$LJ::SITEROOT/community/manage.bml'",
+                                { commlist => $commlist, aopts => "href='$LJ::SITEROOT/community/manage'",
                                   pagetitle => BML::ml( '/community/manage.bml.title2' ) } ) . 'p?>';
                     }
                 }
@@ -155,12 +155,12 @@ body<=
     my $ret;
 
     # authas switcher form
-    $ret .= "<form method='get' action='accountstatus.bml'>\n";
+    $ret .= "<form method='get' action='accountstatus'>\n";
     $ret .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'}, 'showall' => 1}) . "\n";
     $ret .= "</form>\n\n";
 
     my $getextra = "?authas=$authas" unless $authas eq $remote->{'user'};
-    $ret .= "<form method='post' action='accountstatus.bml$getextra'>\n";
+    $ret .= "<form method='post' action='accountstatus$getextra'>\n";
     $ret .= LJ::form_auth();
 
     $ret .= "<?p $ML{'.journalstatus.about'} p?>\n";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/capedit.bml
--- a/htdocs/admin/capedit.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/capedit.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -74,7 +74,7 @@
 
  if ($mode eq "viewuser")
  {
-     $ret .= "<h1><a href='capedit.bml'>&lt;&lt;</a> edit user '$user'</h1>\n";
+     $ret .= "<h1><a href='capedit'>&lt;&lt;</a> edit user '$user'</h1>\n";
 
      unless ($u) {
          $ret .= "Unknown user.\n";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/console/index.bml
--- a/htdocs/admin/console/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/console/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -34,19 +34,19 @@ body<=
     if ( LJ::did_post() ) {
         return $ML{'.error.nopost'} unless LJ::check_form_auth();
 
-        $ret .= "<p>" . BML::ml( '.description.reference', { aopts => "href='reference.bml'" } ) . "</p>";
+        $ret .= "<p>" . BML::ml( '.description.reference', { aopts => "href='reference'" } ) . "</p>";
         $ret .= LJ::Console->run_commands_html( $commands );
 
     } else {
 
         $ret .= "<p>$ML{'.description'}</p>";
-        $ret .= "<p>" . BML::ml( '.description.reference', { aopts => "href='reference.bml'" } ) . "</p>";
+        $ret .= "<p>" . BML::ml( '.description.reference', { aopts => "href='reference'" } ) . "</p>";
 
     }
 
         $ret .= "<br /><p>$ML{'.entercommands'}</p>";
 
-        $ret .= "<form method='post' action='index.bml'>";
+        $ret .= "<form method='post' action='index'>";
         $ret .= LJ::form_auth();
         $ret .= "<div class='console'>";
         $ret .= LJ::html_textarea({ 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/faq/faqedit.bml
--- a/htdocs/admin/faq/faqedit.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/faq/faqedit.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -102,7 +102,7 @@ body<=
                           undef, $question, $summary, $answer, $faqcat,
                           $sortorder, $remote->{userid} );
                 $id = $dbh->{mysql_insertid};
-                $ret .= $dbh->errstr || "Added FAQ item. All good. FAQ id is <b><a href='$LJ::SITEROOT/support/faqbrowse.bml?faqid=$id'>$id</a></b>";
+                $ret .= $dbh->errstr || "Added FAQ item. All good. FAQ id is <b><a href='$LJ::SITEROOT/support/faqbrowse?faqid=$id'>$id</a></b>";
 
                 $opts_question->{childrenlatest} = 1;
                 $opts_summary->{childrenlatest} = 1;
@@ -118,7 +118,7 @@ body<=
                                          WHERE faqid=? },
                           undef, $question, $summary, $answer, $faqcat,
                           $remote->{userid}, $sortorder, $id );
-                $ret .= "Updated FAQ item. All good. FAQ id is <b><a href='$LJ::SITEROOT/support/faqbrowse.bml?faqid=$id'>$id</a></b>";
+                $ret .= "Updated FAQ item. All good. FAQ id is <b><a href='$LJ::SITEROOT/support/faqbrowse?faqid=$id'>$id</a></b>";
 
                 $do_trans->( $id );
             } else {
@@ -210,7 +210,7 @@ body<=
         # Fall through to form
     }
 
-    $ret .= "<form action='faqedit.bml' method='post'>";
+    $ret .= "<form action='faqedit' method='post'>";
     $ret .= LJ::form_auth();
     $ret .= LJ::html_hidden( 'id', $id );
     $ret .= "<p>Category: ";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/faq/index.bml
--- a/htdocs/admin/faq/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/faq/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -24,7 +24,7 @@ body<=
     LJ::remote_has_priv( $remote, "faqedit", \%ac_edit );
 
     my $ret = "";
-    $ret .= "<a href='faqedit.bml'>[Add to FAQ]</a>\n"
+    $ret .= "<a href='faqedit'>[Add to FAQ]</a>\n"
         if %ac_add;
 
     my %faqcat;
@@ -65,7 +65,7 @@ body<=
     push @sorted_cats, '';
     
     foreach my $faqcat ( @sorted_cats ) {
-        $ret .= "<h2><a href='readcat.bml?faqcat=$faqcat'>"
+        $ret .= "<h2><a href='readcat?faqcat=$faqcat'>"
             . LJ::ehtml( $faqcat{$faqcat}->{faqcatname} ) . "</a></h2>\n";
         next unless $faqq{$faqcat} && @{ $faqq{$faqcat} };
         $ret .= "<ul>\n";
@@ -75,7 +75,7 @@ body<=
             $q =~ s/^\s+//; $q =~ s/\s+$//;
             $q =~ s|\n|<br />|g;
             $ret .= "<li>";
-            $ret .= "<a href='faqedit.bml?id=" . $faq->id . "'>[edit]</a> (" .
+            $ret .= "<a href='faqedit?id=" . $faq->id . "'>[edit]</a> (" .
                     $faq->sortorder . ") "
                 if $ac_edit{'*'} || $ac_edit{$faqcat};
             $ret .= "<b>{" . $faq->faqid . "}</b> $q</li>\n";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/index.bml
--- a/htdocs/admin/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -33,19 +33,19 @@ body<=
     my $ret;
 
     my @adminpages = (
-        [ 'capedit.bml',
+        [ 'capedit',
             '<?_ml .admin.capability.link _ml?>', '<?_ml .admin.capability.text _ml?>', [ 'admin:*', sub {
                 return ( $LJ::IS_DEV_SERVER, "<?_ml .devserver _ml?>" );
             } ] ],
-        [ 'clusterstatus.bml',
+        [ 'clusterstatus',
             '<?_ml .admin.cluster.link _ml?>', '<?_ml .admin.cluster.text _ml?>', [ 'supporthelp' ] ],
         [ 'console/',
             '<?_ml .admin.console.link _ml?>', '<?_ml .admin.console.text _ml?>' ],
         [ 'schema/',
             '<?_ml .admin.dbschema.link _ml?>', '<?_ml .admin.dbschema.text _ml?>', [ 'schemadoc' ] ],
-        [ 'dupkiller.bml',
+        [ 'dupkiller',
             '<?_ml .admin.dupkiller.link _ml?>', '<?_ml .admin.dupkiller.text _ml?>', [ 'supporthelp' ] ],
-        [ 'entryprops.bml',
+        [ 'entryprops',
             '<?_ml .admin.entryprops.link _ml?>', '<?_ml .admin.entryprops.text _ml?>', [ 'canview:entryprops', 'canview:*', sub {
                 return ( $LJ::IS_DEV_SERVER, "<?_ml .devserver _ml?>" );
             } ] ],
@@ -53,61 +53,61 @@ body<=
             '<?_ml .admin.faq.link _ml?>', '<?_ml .admin.faq.text _ml?>', [ 'faqadd', 'faqedit', 'faqcat' ] ],
         [ 'fileedit/',
             '<?_ml .admin.file_edit.link _ml?>', 'Allows you to edit various include files.', [ 'fileedit' ] ],
-        [ 'invites/requests.bml',
+        [ 'invites/requests',
             '<?_ml .admin.invite_requests.link _ml?>', '<?_ml .admin.invite_requests.text _ml?>', [ 'payments' ] ],
-        [ 'invites/review.bml',
+        [ 'invites/review',
             '<?_ml .admin.invite_review.link _ml?>', '<?_ml .admin.invite_review.text _ml?>', [ 'payments' ] ],
-        [ 'invitecodes.bml',
+        [ 'invitecodes',
             '<?_ml .admin.invite_codes.link _ml?>', '<?_ml .admin.invite_codes.text _ml?>', [ 'finduser:codetrace', 'finduser:*' ] ],
-        [ 'logout_user.bml',
+        [ 'logout_user',
             '<?_ml .admin.logout_user.link _ml?>', '<?_ml .admin.logout_user.text _ml?>', [ 'suspend' ] ],
-        [ 'memcache.bml',
+        [ 'memcache',
             '<?_ml .admin.memcache.link _ml?>', '<?_ml .admin.memcache.text _ml?>', [ 'siteadmin:memcacheview', 'siteadmin:*' ] ],
-        [ 'memcache_view.bml',
+        [ 'memcache_view',
             '<?_ml .admin.memcache_view.link _ml?>', '<?_ml .admin.memcache_view.text _ml?>', [ 'siteadmin:memcacheview', 'siteadmin:*', sub {
                 return ( $LJ::IS_DEV_SERVER, "<?_ml .devserver _ml?>" );
             } ] ],
-        [ 'mysql_status.bml',
+        [ 'mysql_status',
             '<?_ml .admin.mysql.link _ml?>', '<?_ml .admin.mysql.text _ml?>', [ 'siteadmin:mysqlstatus', 'siteadmin:*' ] ],
-        [ 'navtag.bml',
+        [ 'navtag',
             '<?_ml .admin.navtag.link _ml?>', '<?_ml .admin.navtag.text _ml?>', [ 'siteadmin:navtag', 'siteadmin:*' ] ],
         [ 'pay/',
             '<?_ml .admin.pay.link _ml?>', '<?_ml .admin.pay.text _ml?>', [ 'payments' ] ],
         [ 'priv/',
             '<?_ml .admin.priv.link _ml?>', '<?_ml .admin.priv.text _ml?>' ],
-        [ 'propedit.bml',
+        [ 'propedit',
             '<?_ml .admin.propedit.link _ml?>', '<?_ml .admin.propedit.text _ml?>', [ 'canview:userprops', 'canview:*' ] ],
-        [ 'recent_comments.bml',
+        [ 'recent_comments',
             '<?_ml .admin.recent_comments.link _ml?>', '<?_ml .admin.recent_comments.text _ml?>', [ 'siteadmin:commentview', 'siteadmin:*' ] ],
         [ 'schools/',
             '<?_ml .admin.schools.link _ml?>', '<?_ml .admin.schools.text _ml?>', [ 'siteadmin:schools', 'siteadmin:*' ] ],
-        [ 'sitemessages/add.bml',
+        [ 'sitemessages/add',
             '<?_ml .admin.sitemessages_add.link _ml?>', '<?_ml .admin.sitemessages_add.text _ml?>', [ 'siteadmin:sitemessages', 'siteadmin:*', sub {
                 return ( $LJ::IS_DEV_SERVER, "<?_ml .devserver _ml?>" );
             } ] ],
-        [ 'sitemessages/manage.bml',
+        [ 'sitemessages/manage',
             '<?_ml .admin.sitemessages_manage.link _ml?>', '<?_ml .admin.sitemessages_manage.text _ml?>', [ 'siteadmin:sitemessages', 'siteadmin:*', sub {
                 return ( $LJ::IS_DEV_SERVER, "<?_ml .devserver _ml?>" );
             } ] ],
-        [ 'spamreports.bml',
+        [ 'spamreports',
             '<?_ml .admin.spamreports.link _ml?>', '<?_ml .admin.spamreports.text _ml?>', [ 'siteadmin:spamreports', 'siteadmin:*' ] ],
-        [ 'stats.bml',
+        [ 'stats',
             '<?_ml .admin.stats.link _ml?>', '<?_ml .admin.stats.text _ml?>', [ 'payments' ] ],
-        [ 'statushistory.bml',
+        [ 'statushistory',
             '<?_ml .admin.statushistory.link _ml?>', '<?_ml .admin.statushistory.text _ml?>', [ 'historyview', sub {
                 return ( $LJ::IS_DEV_SERVER, "<?_ml .devserver _ml?>" );
             } ] ],
-        [ 'styleinfo.bml',
+        [ 'styleinfo',
             '<?_ml .admin.styleinfo.link _ml?>', '<?_ml .admin.styleinfo.text _ml?>', [ sub {
                 return ( LJ::Support::has_any_support_priv($remote), "<?_ml .anysupportpriv _ml?>" );
             }, sub {
                 return ( $LJ::IS_DEV_SERVER, "<?_ml .devserver _ml?>" );
             } ] ],
-        [ 'sysban.bml',
+        [ 'sysban',
             '<?_ml .admin.sysban.link _ml?>', '<?_ml .admin.sysban.text _ml?>', [ 'sysban' ] ],
-        [ 'theschwartz.bml',
+        [ 'theschwartz',
             '<?_ml .admin.theschwartz.link _ml?>', '<?_ml .admin.theschwartz.text _ml?>', [ 'siteadmin:theschwartz' ] ],
-        [ 'userlog.bml',
+        [ 'userlog',
             '<?_ml .admin.userlog.link _ml?>', '<?_ml .admin.userlog.text _ml?>', [ 'canview:userlog', 'canview:*' ] ],
     );
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/invites/requests.bml
--- a/htdocs/admin/invites/requests.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/invites/requests.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -81,7 +81,7 @@ body<=
         }
 
         my $reason = $outstanding->reason || "( no reason given )";
-        $ret .= "<td><a href='review.bml?user=$u->{user}'>$reason</a></td>";
+        $ret .= "<td><a href='review?user=$u->{user}'>$reason</a></td>";
         $ret .= "</tr>";
     }
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/memcache.bml
--- a/htdocs/admin/memcache.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/memcache.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -25,7 +25,7 @@
     }
     $mode ||= "overview";
 
-    $ret .= "<div class='topbar'>[<a href='memcache.bml'>Overview</a>]\n";
+    $ret .= "<div class='topbar'>[<a href='memcache'>Overview</a>]\n";
 
     if ($mode eq "overview") {
 	$ret .= <<"END_TOP";
@@ -89,7 +89,7 @@ END_TOP
 	my $hit_rate = sprintf("%0.02f%%", $stat{''}{'get_hits'}/($stat{''}{'get_hits'}+$stat{''}{'get_misses'}||1)*100);
 
 	if ($mode eq "overview") {
-	    $ret .= "<tr><td><a href='memcache.bml?host=$host'>$host</a></td>\n";
+	    $ret .= "<tr><td><a href='memcache?host=$host'>$host</a></td>\n";
 	    $ret .= "<td>$hit_rate";
 	    if ($prev_hits && $prev_hits->{$host}) {
 		my $nh = $now_hits{$host};
@@ -134,7 +134,7 @@ END_TOP
 	}
 
 	if ($mode eq "host" && $host eq $GET{'host'}) {
-	    $ret .= "[<a href='memcache.bml?host=$host&amp;mode=raw'>Raw Data</a>]</div>";
+	    $ret .= "[<a href='memcache?host=$host&amp;mode=raw'>Raw Data</a>]</div>";
 	    $ret .= "<h1>Details for $host</h1>";
 
 	    $ret .= "<h2>Slab classes</h2>";
@@ -155,7 +155,7 @@ END_TOP
 	}
 
 	if ($mode eq "raw" && $host eq $GET{'host'}) {
-	    $ret .= "[<a href='memcache.bml?host=$host'>Host Stats</a>]</div>";
+	    $ret .= "[<a href='memcache?host=$host'>Host Stats</a>]</div>";
 	    $ret .= "<h1>Raw data for $host</h1>";
 	    $ret .= "<pre>$log</pre>";
 	}
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/misc/runoffpoll.bml
--- a/htdocs/admin/misc/runoffpoll.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/misc/runoffpoll.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -32,7 +32,7 @@ body<=
 
     my $body = '';
 
-    $body .= '<form action="runoffpoll.bml" method="POST">';
+    $body .= '<form action="runoffpoll" method="POST">';
     $body .= LJ::form_auth();
     $body .= "Enter the poll ID: ";
     $body .= LJ::html_text({
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/mysql_status.bml
--- a/htdocs/admin/mysql_status.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/mysql_status.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -36,7 +36,7 @@
      }
  }
  if ($format eq "html") {
-     $ret .= "<p>Or, view <a href=\"mysql_status.bml?mode=$mode&format=text\">as text</a>.<p>";
+     $ret .= "<p>Or, view <a href=\"mysql_status?mode=$mode&format=text\">as text</a>.<p>";
  }
 
  if ($mode eq "status")
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/navtag.bml
--- a/htdocs/admin/navtag.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/navtag.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -69,10 +69,10 @@
     }
 
     if ($view eq 'tag') {
-	$body .= "<a href='navtag.bml'><< Home</a><br />";
+	$body .= "<a href='navtag'><< Home</a><br />";
 	$body .= by_tag($viewtag);
     } elsif ($view eq 'dest') {
-	$body .= "<a href='navtag.bml'><< Home</a><br />";
+	$body .= "<a href='navtag'><< Home</a><br />";
 	$body .= by_url($viewdest);
     } else {
 	$body .= current_tags();
@@ -87,7 +87,7 @@
 	my $ret;
 
 
-	$ret .= "<form action='navtag.bml' method='POST'>";
+	$ret .= "<form action='navtag' method='POST'>";
         $ret .= LJ::form_auth();
 	$ret .= "<br /><?h1 JFTI! h1?>";
 
@@ -121,7 +121,7 @@
 
 	foreach my $tag (keys %$tags) {
 	    $cloud{$tag} = {
-		url   => "navtag.bml?view=tag&tag=" . LJ::eurl($tag),
+		url   => "navtag?view=tag&tag=" . LJ::eurl($tag),
 		value => $tags->{$tag},
 	    };
 	}
@@ -135,7 +135,7 @@
         my $url = shift;
         my $ret;
 
-        $ret .= "<form action='navtag.bml' method='POST'>";
+        $ret .= "<form action='navtag' method='POST'>";
         $ret .= LJ::form_auth();
         $ret .= "<?h1 Tags Pointing At " . LJ::ehtml($url) . " h1?>";
 
@@ -148,7 +148,7 @@
         my @tags = LJ::NavTag->tags_of_dest($dest);
 
         foreach my $tag (@tags) {
-            $ret .= "<tr><td><a href='navtag.bml?view=tag&tag=" . LJ::eurl($tag) . "'>";
+            $ret .= "<tr><td><a href='navtag?view=tag&tag=" . LJ::eurl($tag) . "'>";
             $ret .=  LJ::ehtml($tag) . "</a></td>";
 
             $ret .= "<td>" . LJ::html_submit("del_${tag}_PAGE:$url", 'X') . "</td>";
@@ -175,11 +175,11 @@
 	    $ret .= "<tr><td>" . LJ::ehtml($dest->title) . "</td>";
 
 	    if (my $lju = $dest->ljuser) {
-		$ret .= "<td><a href='navtag.bml?view=dest&dest=";
-		$ret .= LJ::eurl("$LJ::SITEROOT/userinfo.bml?user=$lju->{user}") . "'>";
+		$ret .= "<td><a href='navtag?view=dest&dest=";
+		$ret .= LJ::eurl("$LJ::SITEROOT/userinfo?user=$lju->{user}") . "'>";
 		$ret .= "$lju->{user}</a> (" . $lju->ljuser_display . ")</td>";
 	    } elsif (my $url = $dest->url) {
-		$ret .= "<td><a href='navtag.bml?view=dest&dest=" . LJ::eurl($url) . "'>";
+		$ret .= "<td><a href='navtag?view=dest&dest=" . LJ::eurl($url) . "'>";
                 $ret .= LJ::ehtml($url) . "</a> (<a href='$url'>view</a>)</td>";
 	    }
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/pay/import.bml
--- a/htdocs/admin/pay/import.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/pay/import.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -20,7 +20,7 @@
     my $body = '<h1>Payment Status Import Tool</h1>';
 
     if (LJ::did_post()) {
-        $body .= '<p>[ <a href="/admin/pay/import.bml">&lt;&lt; Back to Index</a> ]</p>';
+        $body .= '<p>[ <a href="/admin/pay/import">&lt;&lt; Back to Index</a> ]</p>';
 
         #my $note = sub {
         #    LJ::statushistory_add( $u, $remote, 'paidstatus', sprintf( shift, @_ ) );
@@ -104,7 +104,7 @@
         # print the basic form
         $body .= <<EOF;
 
-<form method="post" action="/admin/pay/import.bml">
+<form method="post" action="/admin/pay/import">
 
 <p>To import data, please paste it in the box below.  The format is:</p>
 <p><strong>username , account type , expiration date</strong></p>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/pay/index.bml
--- a/htdocs/admin/pay/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/pay/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -52,7 +52,7 @@
     }
 
     if ($GET{view}) {
-        $body .= '<p>[ <a href="/admin/pay/index.bml">&lt;&lt; Back to Index</a> ]</p>';
+        $body .= '<p>[ <a href="/admin/pay/index">&lt;&lt; Back to Index</a> ]</p>';
 
         # allow editing a user's paid status
         my $u = LJ::load_user( $GET{view} );
@@ -99,7 +99,7 @@ Give Paid Time:
     for <input type="text" name="months" maxlength="2" size="3" /> months
     <input type="submit" value="Give!" />
 </form>
-<p><a href="/admin/statushistory.bml?user=$u->{user}">View statushistory for user.</a></p>
+<p><a href="/admin/statushistory?user=$u->{user}">View statushistory for user.</a></p>
 <h2>View Carts</h2>
 EOF
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/pay/view.bml
--- a/htdocs/admin/pay/view.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/pay/view.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -57,7 +57,7 @@ EOF
     }
 
     my $body = '<h1>Payment Manager - View Cart</h1>';
-    $body .= '<p>[ <a href="/admin/pay/index.bml">&lt;&lt; Back to Index</a> ]</p>';
+    $body .= '<p>[ <a href="/admin/pay/index">&lt;&lt; Back to Index</a> ]</p>';
 
     return "Must provide cartid."
         unless $GET{cartid};
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/priv/index.bml
--- a/htdocs/admin/priv/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/priv/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -52,7 +52,7 @@
  unless ($mode)
  {
      $ret .= "<h1>Privilege Management</h1>\n";
-     $ret .= "<form method='get' action='index.bml'>";
+     $ret .= "<form method='get' action='index'>";
      $ret .= "<p>View all privileges of user <input name='user' size='25' maxlength='25' /> <input type='submit' value=\"Load\" /></p></form>";
 
      $ret .= "<p>Or, show all users with privilege:</p><dl>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/recent_comments.bml
--- a/htdocs/admin/recent_comments.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/recent_comments.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -26,7 +26,7 @@
             "<input name='user' maxlength='25' size='25' /><input type='submit' value='Load' /></form>";
     }
     $user = $u->{'user'};
-    $ret .= "<a href='recent_comments.bml'>&lt;&lt;</a> <b>Recent comments of " . LJ::ljuser($u) . "</b> (\#$u->{userid})<br />\n";
+    $ret .= "<a href='recent_comments'>&lt;&lt;</a> <b>Recent comments of " . LJ::ljuser($u) . "</b> (\#$u->{userid})<br />\n";
 
     my $dbcr = LJ::get_cluster_reader($u);
     return "Error: can't get DB for user" unless $dbcr;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/schools/edit.bml
--- a/htdocs/admin/schools/edit.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/schools/edit.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -51,7 +51,7 @@ body<=
 
         $school = $school->{$sid};
 
-        $ret .= "<form method='post' action='edit.bml'>";
+        $ret .= "<form method='post' action='edit'>";
         $ret .= LJ::form_auth();
         $ret .= LJ::html_hidden('sid', $sid, 'save', 1);
         $ret .= "<table><tr><td>";
@@ -113,7 +113,7 @@ body<=
         $ret .= '<?h1 Success h1?><?p School data edited or deleted p?>';
         return $ret;
     } else {
-        $ret .= "<form method='GET' action='edit.bml'>";
+        $ret .= "<form method='GET' action='edit'>";
         $ret .= "School ID to edit: " . LJ::html_text({name => 'sid', size => 10});
         $ret .= ' ' . LJ::html_submit();
         $ret .= "</form>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/schools/index.bml
--- a/htdocs/admin/schools/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/schools/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -3,10 +3,10 @@ body<=
 body<=
 <?h1 Links h1?>
 <ul>
-    <li><a href="edit.bml">Edit School</a>
-    <li><a href="pending.bml">Pending Schools</a></li>
-    <li><a href="merge.bml">Merge Schools</a></li>
-    <li><a href="rename.bml">Rename City/State</a></li>
+    <li><a href="edit">Edit School</a>
+    <li><a href="pending">Pending Schools</a></li>
+    <li><a href="merge">Merge Schools</a></li>
+    <li><a href="rename">Rename City/State</a></li>
 </ul>
 
 <?h1 Stats h1?>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/schools/merge.bml
--- a/htdocs/admin/schools/merge.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/schools/merge.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -23,7 +23,7 @@ body<=
     return BML::ml( "admin.noprivserror", { numprivs => $numprivs, needprivs => "<b>" . join(", ", @displayprivs) . "</b>"} )
        unless LJ::check_priv($remote, 'siteadmin', 'school');
 
-    $ret .= "<?p [ <a href='index.bml'>&lt;&lt; Back to Admin Index</a> ] p?>";
+    $ret .= "<?p [ <a href='index'>&lt;&lt; Back to Admin Index</a> ] p?>";
 
     if (LJ::did_post()) {
         my $check = sub {
@@ -48,7 +48,7 @@ body<=
     }
 
     # simply dump the form for merging
-    $ret .= "<?p <form method='post' action='merge.bml'>";
+    $ret .= "<?p <form method='post' action='merge'>";
     $ret .= LJ::form_auth();
     $ret .= "Merge " . LJ::html_text({ name => 'from', size => 10, value => $POST{from} });
     $ret .= " into " . LJ::html_text({ name => 'to', size => 10, value => $POST{to} });
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/schools/pending.bml
--- a/htdocs/admin/schools/pending.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/schools/pending.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -89,7 +89,7 @@ body<=
             return "Unable to delete primary school"
                 unless $rv;
 
-            return BML::redirect("pending.bml$getextra");
+            return BML::redirect("pending$getextra");
         } elsif ($primary_act eq 'approve') {
             my $country = $POST{country};
             my $city = $POST{city};
@@ -155,12 +155,12 @@ body<=
                 LJ::Schools::reject_pending($approve_sids);
             }
 
-            return BML::redirect("pending.bml$getextra");
+            return BML::redirect("pending$getextra");
 
         # Someday we may do more in the ignore action, but for now
         # it is just a redirect
         } elsif ($primary_act eq 'ignore') {
-            return BML::redirect("pending.bml$getextra");
+            return BML::redirect("pending$getextra");
         }
 
         return $ret;
@@ -185,10 +185,10 @@ body<=
         push @locextra, "city="    . LJ::eurl($city)    if defined $city;
         $getextra = '?' . join('&', @locextra) if @locextra;
 
-        $ret .= "<a href='pending.bml$getextra'>Give me a different school!</a><br /><br />";
+        $ret .= "<a href='pending$getextra'>Give me a different school!</a><br /><br />";
 
         $ret .= "<?h2 Primary School Record h2?>";
-        $ret .= "<form method='post' action='pending.bml'>";
+        $ret .= "<form method='post' action='pending'>";
         $ret .= LJ::form_auth();
         $ret .= LJ::html_hidden('uct', $country) if $country;
         $ret .= LJ::html_hidden('ust', $state) if $state;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/schools/rename.bml
--- a/htdocs/admin/schools/rename.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/schools/rename.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -21,7 +21,7 @@ body<=
     return BML::ml( "admin.noprivserror", { numprivs => $numprivs, needprivs => "<b>" . join(", ", @displayprivs) . "</b>"} )
         unless LJ::check_priv($remote, 'siteadmin', 'school');
 
-    $ret .= "<?p [ <a href='index.bml'>&lt;&lt; Back to Admin Index</a> ] p?>";
+    $ret .= "<?p [ <a href='index'>&lt;&lt; Back to Admin Index</a> ] p?>";
 
     if (LJ::did_post()) {
         my $check = sub {
@@ -99,7 +99,7 @@ body<=
     };
 
     # simply dump the form
-    $ret .= "<form method='post' action='rename.bml'>";
+    $ret .= "<form method='post' action='rename'>";
     $ret .= LJ::form_auth();
     $ret .= "<?p Rename this location: p?>";
     $ret .= $dump->("from");
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/spamreports.bml
--- a/htdocs/admin/spamreports.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/spamreports.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -18,14 +18,14 @@
         $state = LJ::eurl($state);
         $reporttime = LJ::mysql_time($reporttime);
         $reporttime = $etext if $etext;
-        return "<a href=\"spamreports.bml?mode=view&amp;by=$by&amp;what=$what&amp;state=$state\">$reporttime</a>";
+        return "<a href=\"spamreports?mode=view&amp;by=$by&amp;what=$what&amp;state=$state\">$reporttime</a>";
     };
     my $dellink = sub {
         my ($srids, $text, $extra) = @_;
-        return "<form method=\"post\" action=\"spamreports.bml\">" .
+        return "<form method=\"post\" action=\"spamreports\">" .
             LJ::html_hidden('mode', 'del') .
             LJ::html_hidden('srids', join(',', @$srids)) .
-            LJ::html_hidden('ret', "spamreports.bml?" . join('&amp;', map { "$_=" . LJ::eurl($GET{$_}) } keys %GET)) .
+            LJ::html_hidden('ret', "spamreports?" . join('&amp;', map { "$_=" . LJ::eurl($GET{$_}) } keys %GET)) .
             LJ::html_submit('submit', $text) .
             $extra . 
             "</form>";
@@ -148,7 +148,7 @@
         my ($by, $what, $state) = (lc($GET{by}), $GET{what}, lc($GET{state}));
         $by = '' unless $by =~ /^(?:ip|poster(?:id)?)$/;
         $state = 'open' unless $state =~ /^(?:open|closed)$/;
-        $body .= "<?p [ <a href=\"spamreports.bml\">&lt;&lt; Front Page</a> ] ";
+        $body .= "<?p [ <a href=\"spamreports\">&lt;&lt; Front Page</a> ] ";
         
         # open/closed links
         my $eargs = LJ::eurl("?by=$by&what=$what&state");
@@ -241,7 +241,7 @@
         $backlink = "[ <a href='$POST{ret}'>&lt;&lt; Go Back</a> ]";
 
         $title = "Close Reports";
-        $body .= "<?p [ <a href=\"spamreports.bml\">&lt;&lt; Front Page</a> ] $backlink p?>\n";
+        $body .= "<?p [ <a href=\"spamreports\">&lt;&lt; Front Page</a> ] $backlink p?>\n";
 
         my $s = $count == 1 ? '' : 's';
         $body .= $count > 0 ? "Closed $count report$s.\n" : "Reports were already closed.";
@@ -252,15 +252,15 @@
                      last01hr => 'Last 1 Hour', last06hr => 'Last 6 Hours', last24hr => 'Last 24 Hours');
         $body .= "<?p Available reports: p?>\n<ul>";
         foreach (sort keys %modes) {
-            $body .= "<li><a href=\"spamreports.bml?mode=$_\">$modes{$_}</a>";
+            $body .= "<li><a href=\"spamreports?mode=$_\">$modes{$_}</a>";
             if ($_ =~ /last/) {
                 # this is a last view, so we have other options
-                $body .= " [<a href=\"spamreports.bml?mode=${_}_u\">users</a>, ";
-                $body .= "<a href=\"spamreports.bml?mode=${_}_a\">anonymous</a>]";
+                $body .= " [<a href=\"spamreports?mode=${_}_u\">users</a>, ";
+                $body .= "<a href=\"spamreports?mode=${_}_a\">anonymous</a>]";
             }
             $body .= "</li>";
         }
-        $body .= qq{<li><form method="GET" action="spamreports.bml" style="display: inline; margin: 0;">
+        $body .= qq{<li><form method="GET" action="spamreports" style="display: inline; margin: 0;">
             <label for="repu">Reports for user:
                 <input type="text" name="what" size="25" maxlength="25" id="repu" />
                 <input type="hidden" name="by" value="poster" />
@@ -272,7 +272,7 @@
 
     # now spit out the requested table
     return unless @headers;
-    $body .= "<?p [ <a href=\"spamreports.bml\">&lt;&lt; Front Page</a> ] p?>";
+    $body .= "<?p [ <a href=\"spamreports\">&lt;&lt; Front Page</a> ] p?>";
     $body .= "<table width=\"50%\">\n<tr>";
     $body .= "<th align=\"center\">$_</th>" foreach @headers;
     $body .= "</tr>\n";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/statushistory.bml
--- a/htdocs/admin/statushistory.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/statushistory.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -20,7 +20,7 @@
     my $ret;
 
     $ret .= "Fill in at least one field below:";
-    $ret .= "<form method='post' action='statushistory.bml'>\n";
+    $ret .= "<form method='post' action='statushistory'>\n";
     $ret .= LJ::html_hidden('orderby', $FORM{'orderby'}, 'flow', $FORM{'flow'}) . "\n";
     $ret .= "User: " . LJ::html_text({ 'name' => 'user', 'size' => '25', 'maxlength' => '25' }) . "\n";
     $ret .= "Admin: " . LJ::html_text({ 'name' => 'admin', 'size' => '25', 'maxlength' => '25' }) . "\n";
@@ -78,7 +78,7 @@
     $ret .= "</b></p>\n";
     $ret .= "<table border='1' cellpadding='5' width='100%'>\n<tr>";
     foreach (qw(user admin shtype shdate notes)) {
-        my $link = "statushistory.bml?user=$FORM{'user'}&admin=$FORM{'admin'}&type=$FORM{'type'}&orderby=$_";
+        my $link = "statushistory?user=$FORM{'user'}&admin=$FORM{'admin'}&type=$FORM{'type'}&orderby=$_";
         $link .= $FORM{'orderby'} eq $_ && $FORM{'flow'} eq 'asc' ? "&flow=desc" : "&flow=asc";
         $ret .= "<td><b><a href='$link'>$_</a></b></td>";
     }
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/styleinfo.bml
--- a/htdocs/admin/styleinfo.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/styleinfo.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -58,7 +58,7 @@ body<=
         foreach my $lay (sort { $a cmp $b } keys %{$s2style->{'layer'}}) {
             my $lid = $s2style->{'layer'}->{$lay};
             if ($lid) {
-                $ret .= "<li>$lay: <a href='$LJ::SITEROOT/customize/advanced/layerbrowse.bml?id=$lid'>";
+                $ret .= "<li>$lay: <a href='$LJ::SITEROOT/customize/advanced/layerbrowse?id=$lid'>";
                 $ret .= (defined $pub->{$lid} ? 'public' : 'custom') . "</a> (#$lid)</li>";
             } else {
                 $ret .= "<li>$lay: none</li>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/sysban.bml
--- a/htdocs/admin/sysban.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/sysban.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -24,7 +24,7 @@ body<=
     use strict;
     use vars qw(%GET %POST);
 
-    my $main_return = '<p><form method="post" action="sysban.bml">
+    my $main_return = '<p><form method="post" action="sysban">
         <input type="submit" value="Return to Sysban page"></form></p>';
     my $err = sub {
         return "<?h1 Error h1?><?p $_[0] p?><?p $main_return p?>";
@@ -65,7 +65,7 @@ body<=
 
     my $bantype = $POST{'bantype'};
 
-    my $ret = "<form method='post' action='sysban.bml'>";
+    my $ret = "<form method='post' action='sysban'>";
     $ret   .= LJ::form_auth();
     $ret   .= "<select name='bantype'>";
     foreach my $type ( @sysban_privs ) {
@@ -103,7 +103,7 @@ QUERYFORM
             $note =~ s/^'(.*)'$/\1/;
 
             $ret .= "<tr>\n <td>$value</td><td>" . localtime($expire) . "</td>";
-            $ret .= "<form method='post' action='sysban.bml'>" . 
+            $ret .= "<form method='post' action='sysban'>" . 
                     LJ::form_auth();
             $ret .= <<QUERYFORM;
 <td>
@@ -157,7 +157,7 @@ QUERYFORM
         my $auth = LJ::form_auth();
         $ret = <<RETURN;
 Ban modified.
-<p><form method="post" action="sysban.bml">
+<p><form method="post" action="sysban">
 $auth
 <input type='hidden' name='bantype' value=$bantype>
 <input type='submit' name='query' value='Return to updated query listing'>
@@ -172,7 +172,7 @@ RETURN
         return $err->("Requires post") unless LJ::did_post();
         return $err->("Invalid form") unless LJ::check_form_auth();
 
-        $ret = "<form method='post' action='sysban.bml'> " . LJ::form_auth() . 
+        $ret = "<form method='post' action='sysban'> " . LJ::form_auth() . 
                 "<select name='bantype'>";
         foreach my $type ( @sysban_privs ) {
             if ( $type eq $bantype ) {
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/admin/userlog.bml
--- a/htdocs/admin/userlog.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/admin/userlog.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -40,7 +40,7 @@ body<=
     my $user = LJ::canonical_username($POST{user} || $GET{user});
 
     my $ret = <<FORM;
-<form method='post' action='userlog.bml'>
+<form method='post' action='userlog'>
 Username: <input type='text' name='user' value='$user' maxlength='25' size='25' /> <input type='submit' value='View' />
 </form>
 FORM
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/allpics.bml
--- a/htdocs/allpics.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/allpics.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -82,7 +82,7 @@
     # redirect renamed users
     if ( $u->is_redirect ) {
         LJ::load_user_props($u, "renamedto");
-        return BML::redirect("$LJ::SITEROOT/allpics.bml?user=$u->{'renamedto'}")
+        return BML::redirect("$LJ::SITEROOT/allpics?user=$u->{'renamedto'}")
             if $u->{'renamedto'};
     }
 
@@ -165,12 +165,12 @@
                 $body .= BML::ml('.pics.owner', {'user' => LJ::ljuser($u),});
                 my $hook_text = LJ::run_hook('allpics_upsell_text', $u, $getextra);
                 if ($hook_text eq "") {
-                    $body .= ' ' . BML::ml('.edit4', {'aopts' => "href='$LJ::SITEROOT/editpics.bml$getextra'"});
+                    $body .= ' ' . BML::ml('.edit4', {'aopts' => "href='$LJ::SITEROOT/editpics$getextra'"});
                 } else {
                     $body .= $hook_text;
                 }
             } else {
-                $body .= BML::ml('.pics2', {'user' => LJ::ljuser($u), 'aopts' => "href='$LJ::SITEROOT/manage/subscriptions/user.bml?journal=$u->{user}'"});
+                $body .= BML::ml('.pics2', {'user' => LJ::ljuser($u), 'aopts' => "href='$LJ::SITEROOT/manage/subscriptions/user?journal=$u->{user}'"});
             }
 
             $body .= " p?><table class='allpics'>";
@@ -257,9 +257,9 @@
     } else {
         if ($can_manage) {
             $body = "<?h1 $ML{'.nopics.title'} h1?><?p ";
-            $body .= BML::ml('.nopics.text3', {'aopts' => "href='$LJ::SITEROOT/editpics.bml$getextra#upload'"}) . " p?>";
+            $body .= BML::ml('.nopics.text3', {'aopts' => "href='$LJ::SITEROOT/editpics$getextra#upload'"}) . " p?>";
         } else {
-            $body = "<?h1 $ML{'.nopics.title'} h1?><?p ". BML::ml('.nopics.text.other2', {'aopts' => "href='$LJ::SITEROOT/manage/subscriptions/user.bml?journal=$u->{user}'", username => $u->ljuser_display }). " p?>";
+            $body = "<?h1 $ML{'.nopics.title'} h1?><?p ". BML::ml('.nopics.text.other2', {'aopts' => "href='$LJ::SITEROOT/manage/subscriptions/user?journal=$u->{user}'", username => $u->ljuser_display }). " p?>";
         }
     }
  
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/betafeatures.bml
--- a/htdocs/betafeatures.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/betafeatures.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -17,7 +17,7 @@ body<=
             $ret .= LJ::bad_input(@errors);
         } else {
             # refresh the page after saving so that the user will see activated features immediately
-            return BML::redirect("$LJ::SITEROOT/betafeatures.bml");
+            return BML::redirect("$LJ::SITEROOT/betafeatures");
         }
     }
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/birthdays.bml
--- a/htdocs/birthdays.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/birthdays.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -32,7 +32,7 @@ body<=
     $body .= ' p?>';
 
     $body .= "<?p $ML{'.findothers'} p?>";
-    $body .= "<form method='get' action='$LJ::SITEROOT/birthdays.bml'>";
+    $body .= "<form method='get' action='$LJ::SITEROOT/birthdays'>";
     $body .= LJ::html_text({ name => 'user', maxlength => 25, size => 15 });
     $body .= LJ::html_submit(undef, $ML{'.view'});
     $body .= "</form>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/changeemail.bml
--- a/htdocs/changeemail.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/changeemail.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -27,7 +27,7 @@ body<=
     my $getextra = $authas ne $remote->{'user'} ? "?authas=$authas" : '';
 
     if ($LJ::USE_SSL && ! $LJ::IS_SSL && $FORM{'ssl'} ne "no") {
-        return BML::redirect("$LJ::SSLROOT/changeemail.bml$getextra");
+        return BML::redirect("$LJ::SSLROOT/changeemail$getextra");
     }
 
     my $crumb = $LJ::IS_SSL ? 'securechangeemail' : 'changeemail';
@@ -44,7 +44,7 @@ body<=
             $ret .= '<?p ' . BML::ml('.instructions', { sitename => $LJ::SITENAMESHORT }) . ' p?>';
         }
 
-        $ret .= "<form action='changeemail.bml$getextra' method='post'>\n";
+        $ret .= "<form action='changeemail$getextra' method='post'>\n";
         $ret .= LJ::html_hidden(mode => 'submit',
                                 ssl => $FORM{'ssl'});
 
@@ -155,8 +155,8 @@ body<=
                                 ip                => BML::get_remote_ip(),
                                 old_email         => $old_email,
                                 new_email         => $POST{'email'},
-                                email_change_link => $LJ::SITEROOT.'/changeemail.bml',
-                                email_manage_link => $LJ::SITEROOT.'/tools/emailmanage.bml',
+                                email_change_link => $LJ::SITEROOT.'/changeemail',
+                                email_manage_link => $LJ::SITEROOT.'/tools/emailmanage',
                                 sitename          => $LJ::SITENAME,
                                 sitelink          => $LJ::SITEROOT,
                                 datetime          => sprintf("%02d:%02d %02d/%02d/%04d", @date[2,1], $date[3], $date[4]+1, $date[5]+1900),
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/changepassword.bml
--- a/htdocs/changepassword.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/changepassword.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -14,7 +14,7 @@ body<=
 
  if ($LJ::USE_SSL && ! $LJ::IS_SSL && $FORM{'ssl'} ne "no") {
      my $getextra = $GET{auth} ? "?auth=$GET{auth}" : "";
-     return BML::redirect("$LJ::SSLROOT/changepassword.bml$getextra");
+     return BML::redirect("$LJ::SSLROOT/changepassword$getextra");
  }
 
  my $crumb = $LJ::IS_SSL ? 'securechangepass' : 'changepass';
@@ -28,16 +28,16 @@ body<=
      $aa = LJ::is_valid_authaction($1, $2);
      return LJ::bad_input($ML{'.error.invalidarg'})
          unless $aa;
-     return LJ::bad_input(BML::ml('.error.actionalreadyperformed', { 'aopts' => "href='$LJ::SITEROOT/lostinfo.bml'"}))
+     return LJ::bad_input(BML::ml('.error.actionalreadyperformed', { 'aopts' => "href='$LJ::SITEROOT/lostinfo'"}))
          if $aa->{'used'} eq 'Y';
-     return BML::redirect("$LJ::SITEROOT/lostinfo.bml")
+     return BML::redirect("$LJ::SITEROOT/lostinfo")
          unless $aa->{action} eq 'reset_password';
 
      # confirmed the identity...
      $authu = LJ::load_userid($aa->{userid});
 
      # verify the email can still receive passwords
-     return LJ::bad_input(BML::ml('.error.emailchanged', { 'aopts' => "href='$LJ::SITEROOT/lostinfo.bml'"}))
+     return LJ::bad_input(BML::ml('.error.emailchanged', { 'aopts' => "href='$LJ::SITEROOT/lostinfo'"}))
          unless $authu->can_receive_password($aa->{arg1});
  }
 
@@ -189,7 +189,7 @@ body<=
      $body = "<?h1 $ML{'Success'} h1?><?p $ML{'.success.text'} p?>";
 
      # if they were logged in, tell them to relogin
-     $body .= "<?p " . BML::ml('.relogin', { 'aopts' => "href='/login.bml'" }) . " p?>" if $remote;
+     $body .= "<?p " . BML::ml('.relogin', { 'aopts' => "href='/login'" }) . " p?>" if $remote;
 
      LJ::run_hooks("post_changepassword", {
          "u" => $u,
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/changepassword.bml.text
--- a/htdocs/changepassword.bml.text	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/changepassword.bml.text	Sat Aug 01 14:31:59 2009 +0000
@@ -10,7 +10,7 @@ Your password has been changed at [[site
 
 To reset it in the future, visit:
 
-  [[siteroot]]/lostinfo.bml
+  [[siteroot]]/lostinfo
 
 Regards,
 [[sitename]] Team
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/create.bml
--- a/htdocs/community/create.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/create.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -19,7 +19,7 @@ body<=
         unless $remote->is_person;
     return "<?h1 $ML{'Error'} h1?><?p $ML{'.error.notactive'} p?>"
         unless $remote->is_visible;
-    return "<?h1 $ML{'Error'} h1?><?p " . BML::ml('.error.notvalidated2', { aopts => "'href='$LJ::SITEROOT/register.bml'" }) . " p?>"
+    return "<?h1 $ML{'Error'} h1?><?p " . BML::ml('.error.notvalidated2', { aopts => "'href='$LJ::SITEROOT/register'" }) . " p?>"
         unless $remote->is_validated;
 
     # fix up the incoming data (is used in getinfo mode and submit mode so it's here)
@@ -134,7 +134,7 @@ SUBMIT:
         }
 
         $ret .= "<?p $ML{'.create.text'} p?>" unless $error;
-        $ret .= "<form action=\"create.bml\" method=\"post\">\n";
+        $ret .= "<form action=\"create\" method=\"post\">\n";
         $ret .= LJ::html_hidden(mode => 'submit', ssl => $FORM{'ssl'});
         $ret .= LJ::form_auth();
 
@@ -146,7 +146,7 @@ SUBMIT:
         $ret .= "<p class='formitemFlag'>$error</p>";
         $ret .= "<div class='formitemDesc'>" . BML::ml(".username.text", { sitename => $LJ::SITENAME }) . "</div>";
         $ret .= LJ::html_text({'name' => 'user', 'size' => 15, 'maxlength' => 25, 'value' => $v, raw => 'style="<?commloginboxstyle?>"' });
-        $ret .= "<br />" . BML::ml('.person', { aopts => "href='$LJ::SITEROOT/create.bml'" });
+        $ret .= "<br />" . BML::ml('.person', { aopts => "href='$LJ::SITEROOT/create'" });
         $ret .= "<div class='formitemNote'>$ML{'.username.charsallowed'}</div>";
         $ret .= "</div></li>";
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/index.bml
--- a/htdocs/community/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -3,7 +3,7 @@ body<=
 body<=
 <?_code
     LJ::set_active_crumb('community');
-    return BML::ml('.main2', {'aopts' => "href='$LJ::SITEROOT/community/create.bml'", 'sitename' => $LJ::SITENAMESHORT});
+    return BML::ml('.main2', {'aopts' => "href='$LJ::SITEROOT/community/create'", 'sitename' => $LJ::SITENAMESHORT});
 _code?>
 <=body
 page?>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/join.bml
--- a/htdocs/community/join.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/join.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -77,7 +77,7 @@ body<=
     my $next_links = "<?p $ML{'.label.you_can'} p?><ul>";
     $next_links .= "<li><a href=\'" . $cu->journal_base . "'>". BML::ml('.label.read_recent_entries', {'user' => $cu->user}) . "</a></li>";
     $next_links .= "<li><a href=\'" . $cu->profile_url . "'>" . BML::ml('.label.read_comm_info', {'user' => $cu->user}) . "</a></li>";
-    $next_links .= "<li><a href='$LJ::SITEROOT/community/search.bml'>".BML::ml('.label.search_other') . "</a></li>";
+    $next_links .= "<li><a href='$LJ::SITEROOT/community/search'>".BML::ml('.label.search_other') . "</a></li>";
     $next_links .= LJ::run_hook("join_comm_extra")
         if LJ::are_hooks("join_comm_extra");
     $next_links .= "</ul>";
@@ -112,7 +112,7 @@ body<=
 
         # add community as a friend if selected
         if ($POST{addfriend}) {
-            BML::redirect("$LJ::SITEROOT/manage/circle/add.bml?user=$cu->{user}&action=subscribe");
+            BML::redirect("$LJ::SITEROOT/manage/circle/add?user=$cu->{user}&action=subscribe");
         }
 
         # success message -- only shows if user didn't add the community as a friend
@@ -130,7 +130,7 @@ body<=
         if ($ci->{membership} ne 'open') {
             $ret .= "<?h1 $ML{'.request.title'} h1?><?p ";
             $ret .= BML::ml('.request.body', { comm => LJ::ljuser($cu) }) . "<br /> p?>";
-            $ret .= "<form method='post' action='join.bml?comm=$commuser'>";
+            $ret .= "<form method='post' action='join?comm=$commuser'>";
             $ret .= LJ::form_auth();
             $ret .= "<?standout <input type='submit' value=\"$ML{'.button.join2'}\" /> ";
             $ret .= "$cancel_btn standout?></form>";
@@ -143,7 +143,7 @@ body<=
              "<?p " . BML::ml('.label.allowposting2', {'sitename' => $LJ::SITENAMESHORT}) . " p?>" :
              "<?p " . BML::ml('.label.auth2', {'admins' => $list}) . " p?>";
 
-        $ret .= "<form method='post' action='join.bml?comm=$commuser'>";
+        $ret .= "<form method='post' action='join?comm=$commuser'>";
         $ret .= LJ::form_auth();
         $ret .= "<table cellpadding='0' cellspacing='1' border='0'><tr>";
         $ret .= "<td><input type='checkbox' name='addfriend' checked='checked'></td><td>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/leave.bml
--- a/htdocs/community/leave.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/leave.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -71,7 +71,7 @@
         }
         
         $body .= " p?>";
-        $body .= '<form method="post" action="leave.bml">';
+        $body .= '<form method="post" action="leave">';
         $body .= LJ::form_auth();
         $body .= LJ::html_hidden("comm", $cu->{user}, "confirm", 1) . "<p align='center'>";
         if ($watching && !$memberof) {
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/manage.bml
--- a/htdocs/community/manage.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/manage.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -101,25 +101,25 @@ body<=
            $ret .= "<tr class='$rstyle'><td><?ljcomm $user ljcomm?></td><td>" . LJ::eall($name) . "</td><td nowrap='nowrap'>";
            if ($admin{$id}) {
                $ret .= BML::ml('Actionlink', {
-                   'link'=>"<a href='/update.bml?usejournal=$user'>$ML{'.commlist.post'}</a>"}) . "&nbsp;&nbsp;";
+                   'link'=>"<a href='/update?usejournal=$user'>$ML{'.commlist.post'}</a>"}) . "&nbsp;&nbsp;";
                $ret .= LJ::run_hook('community_manage_actionlink', $user);
                $ret .= BML::ml('Actionlink', {
                    'link'=>"<a href='/manage/profile/?authas=$user'>$ML{'.commlist.actinfo2'}</a>"}) . "&nbsp;&nbsp;";
                $ret .= BML::ml('Actionlink', {
                    'link'=>"<a href='$LJ::SITEROOT/customize/?authas=$user'>$ML{'.commlist.customize2'}</a>"}) . "&nbsp;&nbsp;";
                $ret .= BML::ml('Actionlink', {
-                   'link'=>"<a href='/community/settings.bml?authas=$user'>$ML{'.commlist.actsettings2'}</a>"}) . "&nbsp;&nbsp;";
+                   'link'=>"<a href='/community/settings?authas=$user'>$ML{'.commlist.actsettings2'}</a>"}) . "&nbsp;&nbsp;";
                $ret .= BML::ml('Actionlink', {
-                   'link'=>"<a href='/community/sentinvites.bml?authas=$user'>$ML{'.commlist.actinvites'}</a>"}) . "&nbsp;&nbsp;";
+                   'link'=>"<a href='/community/sentinvites?authas=$user'>$ML{'.commlist.actinvites'}</a>"}) . "&nbsp;&nbsp;";
                my $pend = $pending{$id} ? BML::ml('.commlist.actpending', { num => $pending{$id},
-                                                  aopts => "href=\"/community/pending.bml?authas=$user\"" }) : '';
+                                                  aopts => "href=\"/community/pending?authas=$user\"" }) : '';
                $ret .= BML::ml('Actionlink', {
-                   'link'=>"<a href='/community/members.bml?authas=$user'>$ML{'.commlist.actmembers2'}</a>$pend"}) . "&nbsp;&nbsp;";
+                   'link'=>"<a href='/community/members?authas=$user'>$ML{'.commlist.actmembers2'}</a>$pend"}) . "&nbsp;&nbsp;";
            }
            $ret .= "</td><td align='center'>";
            if ($mods{$id}) {
                my $num = $modcount{$id} || "0"; # relying on this to be <b>-wrapped
-               $ret .= BML::ml('.commlist.moderation.num2', {'aopts' => "href='$LJ::SITEROOT/community/moderate.bml?authas=$user'", 'num' => $num});
+               $ret .= BML::ml('.commlist.moderation.num2', {'aopts' => "href='$LJ::SITEROOT/community/moderate?authas=$user'", 'num' => $num});
            } else {
                $ret .= "&nbsp";
            }
@@ -151,7 +151,7 @@ body<=
     # form for setting email option
     $ret .= "<?h1 $ML{'.joinmail.title'} h1?>\n";
     $ret .= "<?p " . BML::ml('.joinmail.body2', { aopts=>"href='$LJ::SITEROOT/manage/subscriptions/'" }). " p?>\n";
-    $ret .= "<form method='post' action='manage.bml'>\n";
+    $ret .= "<form method='post' action='manage'>\n";
     $ret .= LJ::form_auth();
     # options for getting moderation emails
     $ret .= "<?p $ML{'.modemail.body'} p?>";
@@ -171,10 +171,10 @@ body<=
     $ret .= "<div class='columns-2-right'>";
 
     $ret .= "<?h1 $ML{'.create.header'} h1?>";
-    $ret .= "<?p " . BML::ml('.create.text2', {'aopts' => "href='$LJ::SITEROOT/community/create.bml'"}) . " p?>";
+    $ret .= "<?p " . BML::ml('.create.text2', {'aopts' => "href='$LJ::SITEROOT/community/create'"}) . " p?>";
 
     $ret .= "<?h1 $ML{'/manage/invites.bml.title'} h1?>";
-    $ret .= "<?p <a href=\"/manage/invites.bml\"><?_ml /manage/invites.bml.title _ml?></a> p?>";
+    $ret .= "<?p <a href=\"/manage/invites\"><?_ml /manage/invites.bml.title _ml?></a> p?>";
     $ret .= "</div><!-- end .columns-2-right -->";
     $ret .= "</div><!-- end .columns-2 -->";
     return $ret;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/members.bml
--- a/htdocs/community/members.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/members.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -21,13 +21,13 @@ body<=
 
     # old GET arg
     if ($GET{comm}) {
-        return BML::redirect("$LJ::SITEROOT/community/members.bml?authas=$GET{comm}");
+        return BML::redirect("$LJ::SITEROOT/community/members?authas=$GET{comm}");
     }
 
     my $cname = $GET{authas};
-    return BML::redirect("$LJ::SITEROOT/community/manage.bml") unless $cname;
+    return BML::redirect("$LJ::SITEROOT/community/manage") unless $cname;
 
-    $ret .= "<form action='members.bml' method='GET'>\n";
+    $ret .= "<form action='members' method='GET'>\n";
     $ret .= LJ::make_authas_select($remote, { authas => $GET{authas}, type => 'C' });
     $ret .= "</form>\n\n";
 
@@ -346,7 +346,7 @@ body<=
                         # if it succeeded, push the reinvited information
                         push @msgs, BML::ml('.reinvited2',
                             { user => LJ::ljuser($u),
-                              aopts => "href='$LJ::SITEROOT/manage/invites.bml'" });
+                              aopts => "href='$LJ::SITEROOT/manage/invites'" });
                     }
                 }
             }
@@ -363,7 +363,7 @@ body<=
             my $mailusername = $newmaintu->{user};
             my $mailusercname = $c->{name};
             my $mailclink = LJ::journal_base($c, ['community']);
-            my $mailcommanlink = "$LJ::SITEROOT/community/manage.bml";
+            my $mailcommanlink = "$LJ::SITEROOT/community/manage";
 
             my $html;
 
@@ -422,7 +422,7 @@ body<=
         if (@invited) {
             $ret .= "<?p ";
             $ret .= BML::ml('.success.invited2',
-                            { aopts => "href='$LJ::SITEROOT/manage/invites.bml'" });
+                            { aopts => "href='$LJ::SITEROOT/manage/invites'" });
             $ret .= " p?><ul>";
             foreach my $row (@invited) {
                 $ret .= "<li>" . LJ::ljuser($row->[0]) . ": ";
@@ -503,7 +503,7 @@ body<=
     # how to make links back to this page
     my $self_link = sub {
         my $sort = "&sort=$GET{'sort'}" if $GET{'sort'};
-        return "members.bml?authas=$cname&page=$_[0]$sort";
+        return "members?authas=$cname&page=$_[0]$sort";
     };
 
     my %items = BML::paging(\@users, $jumppage || $GET{'page'}, $page_size);
@@ -515,7 +515,7 @@ body<=
     $ret .= BML::ml('.intro', { aopts1 => "href='$LJ::HELPURL{maintainership}'", aopts2 => "href='$LJ::HELPURL{add_to_comm}'" }) . "<br /><br />";
     $ret .= $ML{'.intro.invite'};
 
-    $ret .= "<form method='post' action='members.bml?authas=$cname'>";
+    $ret .= "<form method='post' action='members?authas=$cname'>";
     $ret .= LJ::form_auth();
 
     # jump to user
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/moderate.bml
--- a/htdocs/community/moderate.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/moderate.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -20,10 +20,10 @@ body<=
 
     # old GET arg
     if ($GET{comm}) {
-        return BML::redirect("$LJ::SITEROOT/community/moderate.bml?authas=$GET{comm}");
+        return BML::redirect("$LJ::SITEROOT/community/moderate?authas=$GET{comm}");
     }
 
-    $ret .= "<form action='moderate.bml' method='GET'>\n";
+    $ret .= "<form action='moderate' method='GET'>\n";
     $ret .= LJ::make_authas_select($remote, { authas => $GET{authas}, type => 'C' });
     $ret .= "</form>\n\n";
 
@@ -171,11 +171,11 @@ body<=
         } else {
             $ret .= "<p>";
             $ret .= BML::ml('Backlink', {
-                'link'=>'/community/manage.bml',
+                'link'=>'/community/manage',
                 'text'=>$ML{'.manage'},
                 }) . "<br />";
             $ret .= BML::ml('Backlink', {
-                'link'=>"/community/moderate.bml?authas=$c->{'user'}",
+                'link'=>"/community/moderate?authas=$c->{'user'}",
                 'text'=>$ML{'.moderate'},
                 }) . "<br />";
             $ret .= "</p>";
@@ -188,7 +188,7 @@ body<=
     $modid += 0;
 
     # redirect to community/manage if a GET request with no arg
-    return BML::redirect("manage.bml") unless $comm;
+    return BML::redirect("manage") unless $comm;
 
     my $c = LJ::load_user($comm);
     unless ($c) {
@@ -222,7 +222,7 @@ body<=
         my $req = Storable::thaw($frreq);
         my $poster = LJ::load_userid($posterid);
         $ret .= "<?h1 $ML{'.approve.header'} h1?><?p $ML{'.approve.text'} p?>";
-        $ret .= "<p><form method='post' action='/community/moderate.bml'><center>";
+        $ret .= "<p><form method='post' action='/community/moderate'><center>";
         $ret .= $formauth;
         $ret .= "<input type='hidden' name='mode' value='approve_do'>";
         $ret .= "<input type='hidden' name='cid' value='$c->{'userid'}'>";
@@ -251,7 +251,7 @@ body<=
         my $req = Storable::thaw($frreq);
         my $poster = LJ::load_userid($posterid);
         $ret .= "<?h1 $ML{'.reject.header'} h1?><?p $ML{'.reject.text'} p?>";
-        $ret .= "<p><form method='post' action='/community/moderate.bml'><center>";
+        $ret .= "<p><form method='post' action='/community/moderate'><center>";
         $ret .= $formauth;
         $ret .= "<input type='hidden' name='mode' value='reject_do'>";
         $ret .= "<input type='hidden' name='cid' value='$c->{'userid'}'>";
@@ -290,7 +290,7 @@ body<=
             my %users;
             LJ::load_userids_multiple([ map { $_->{'posterid'}, \$users{$_->{'posterid'}} } @entries ]);
             foreach (sort { $a->{'logtime'} lt $b->{'logtime'} } @entries) {
-                my $link = "/community/moderate.bml?authas=$comm&amp;modid=" . $_->{'modid'};
+                my $link = "/community/moderate?authas=$comm&amp;modid=" . $_->{'modid'};
                 my $subject = $_->{'subject'} ? LJ::eall($_->{'subject'}) : "<i>[No Subject]</i>";
                 $ret .= "<tr><td>$_->{'logtime'}</td>" .
                     "<td><?ljuser " . $users{$_->{'posterid'}}->{'user'} . " ljuser?></td>" .
@@ -304,7 +304,7 @@ body<=
         }
         $ret .= "</div>";
         $ret .= BML::ml('Backlink', {
-            'link'=>'/community/manage.bml',
+            'link'=>'/community/manage',
             'text'=>$ML{'.manage'},
         }) . "<br />";
 
@@ -366,11 +366,11 @@ body<=
 
         $ret .= "<p>";
         $ret .= BML::ml('Backlink', {
-            'link'=>'/community/manage.bml',
+            'link'=>'/community/manage',
             'text'=>$ML{'.manage'},
         }) . "<br />";
         $ret .= BML::ml('Backlink', {
-            'link'=>"/community/moderate.bml?authas=$comm",
+            'link'=>"/community/moderate?authas=$comm",
             'text'=>$ML{'.moderate'},
         }) . "<br />";
         $ret .= "</p>";
@@ -410,7 +410,7 @@ body<=
         $actions .= "&nbsp;&nbsp;<input type='submit' name='action:reject' value='$ML{'.choice.reject'}' style='font-size: 15pt; background: #e08291; color: #000000' />";
         $actions .= "&nbsp;&nbsp;<input type='submit' name='action:mark_as_spam' value='$ML{'.choice.mark_as_spam'}' style='font-size: 15pt; background: #e08291; color: #000000' />";
 
-        $ret .= "<form method='post' action='/community/moderate.bml'>";
+        $ret .= "<form method='post' action='/community/moderate'>";
         $ret .= BML::fill_template("standout", {'DATA'=> $actions});
         $ret .= "</form>";
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/pending.bml
--- a/htdocs/community/pending.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/pending.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -16,14 +16,14 @@ body<=
 
     # old GET arg
     if ($GET{comm}) {
-        return BML::redirect("$LJ::SITEROOT/community/pending.bml?authas=$GET{comm}");
+        return BML::redirect("$LJ::SITEROOT/community/pending?authas=$GET{comm}");
     }
 
     my $cname = $GET{authas};
-    return BML::redirect("$LJ::SITEROOT/community/manage.bml") unless $cname;
+    return BML::redirect("$LJ::SITEROOT/community/manage") unless $cname;
 
     my $ret;
-    $ret .= "<form action='pending.bml' method='GET'>\n";
+    $ret .= "<form action='pending' method='GET'>\n";
     $ret .= LJ::make_authas_select($remote, { authas => $GET{authas}, type => 'C' });
     $ret .= "</form>\n\n";
 
@@ -132,7 +132,7 @@ body<=
 
     # how to make links back to this page
     my $self_link = sub {
-        return "pending.bml?authas=$cname&page=$_[0]";
+        return "pending?authas=$cname&page=$_[0]";
     };
 
     my %items = BML::paging(\@users, $jumppage || $GET{page}, $page_size);
@@ -141,7 +141,7 @@ body<=
     @users = @{$items{items}};
 
     # output starts here
-    $ret .= "<form method='post' action='pending.bml?authas=$cname' name='pending_member_form'>";
+    $ret .= "<form method='post' action='pending?authas=$cname' name='pending_member_form'>";
     $ret .= LJ::form_auth();
 
     # jump to user
@@ -193,7 +193,7 @@ body<=
     $ret .= $navbar;
 
     $ret .= BML::ml('Backlink', {
-        'link' => '/community/manage.bml',
+        'link' => '/community/manage',
         'text' => $ML{'/community/members.bml.manage2'},
     });
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/search.bml
--- a/htdocs/community/search.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/search.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -39,7 +39,7 @@ _code?>
 
 <center>
 
-<form action="/directory.bml">
+<form action="/directory">
 
 <table cellpadding='4' cellspacing='0' border='0'>
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/sentinvites.bml
--- a/htdocs/community/sentinvites.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/sentinvites.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -22,13 +22,13 @@ body<=
 
     # old GET arg
     if ($GET{comm}) {
-        return BML::redirect("$LJ::SITEROOT/community/sentinvites.bml?authas=$GET{comm}");
+        return BML::redirect("$LJ::SITEROOT/community/sentinvites?authas=$GET{comm}");
     }
 
     my $cname = $GET{authas};
-    return BML::redirect("$LJ::SITEROOT/community/manage.bml") unless $cname;
+    return BML::redirect("$LJ::SITEROOT/community/manage") unless $cname;
 
-    $ret .= "<form action='sentinvites.bml' method='GET'>\n";
+    $ret .= "<form action='sentinvites' method='GET'>\n";
     $ret .= LJ::make_authas_select($remote, { authas => $GET{authas}, type => 'C' });
     $ret .= "</form>\n\n";
 
@@ -110,7 +110,7 @@ body<=
     # hop out if there were no invites
     unless (%users) {
         return "$ret<?h1 $ML{'.none.title'} h1?><?p " .
-               BML::ml('.none.body', { aopts => "href='/community/members.bml?authas=$c->{user}'" }) .
+               BML::ml('.none.body', { aopts => "href='/community/members?authas=$c->{user}'" }) .
                " p?>";
     }
     
@@ -149,7 +149,7 @@ body<=
     my $self_link = sub {
         my $sort = "&sort=$GET{'sort'}" if $GET{'sort'};
         my $filter = "&show=$GET{'show'}" if $GET{'show'};
-        return "sentinvites.bml?authas=$cname&page=$_[0]$sort$filter";
+        return "sentinvites?authas=$cname&page=$_[0]$sort$filter";
     };
 
     my %items = BML::paging(\@users, $jumppage || $GET{'page'}, $page_size);
@@ -161,7 +161,7 @@ body<=
 
     # jump to user
     if ($items{'pages'} > 1) {
-        $ret .= "<form method='post' action='sentinvites.bml?authas=$cname'>";
+        $ret .= "<form method='post' action='sentinvites?authas=$cname'>";
         $ret .= "<div style='margin-left: 30px;'>Jump to user: ";
         $ret .= LJ::html_text({ 'name' => 'jumpto', 'value' => $POST{'jumpto'},
                                 'size' => '10', 'maxlength' => '25' }) . " ";
@@ -171,7 +171,7 @@ body<=
     }
 
     # setup showlinks
-    my $showlinks = "<form method='get' action='/community/sentinvites.bml'>";
+    my $showlinks = "<form method='get' action='/community/sentinvites'>";
     $showlinks .= LJ::html_hidden('authas', $c->{user});
     $showlinks .= $ML{'.filterto'};
     $showlinks .= LJ::html_select( { name => 'show', selected => $GET{show} }, all => $ML{'.filterto.opts.all'}, accepted => $ML{'.filterto.opts.accepted'}, rejected => $ML{'.filterto.opts.rejected'}, outstanding => $ML{'.filterto.opts.outstanding'} );
@@ -250,7 +250,7 @@ END
     $ret .= "</form>";
 
 
-    $ret .= "<br /><a href='/community/members.bml?authas=$c->{user}'>$ML{'.send'}</a>";
+    $ret .= "<br /><a href='/community/members?authas=$c->{user}'>$ML{'.send'}</a>";
     $ret .= "</div>\n\n";
     $ret .= $navbar;
     return $ret;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/settings.bml
--- a/htdocs/community/settings.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/settings.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -49,7 +49,7 @@ body<=
     my $mode = "modify";
     $mode = "create" if $GET{'mode'} eq 'create';
 
-    $ret .= "<form action='$LJ::SITEROOT/community/settings.bml' method='get'>";
+    $ret .= "<form action='$LJ::SITEROOT/community/settings' method='get'>";
     $ret .= LJ::make_authas_select($remote, { authas => $GET{authas}, type => "C" });
     $ret .= "</form>";
 
@@ -173,7 +173,7 @@ body<=
 
             $ret .= "<?p $ML{'.label.rellinks'} <ul><li><a href='" . $cu->journal_base . "'>$ML{'.label.commsite'}</a></li>";
             $ret .= "<li><a href='" . $cu->profile_url() . "'>$ML{'.label.comminfo'}</a></li><li>"
-                . BML::ml('.label.managepage', { 'aopts' => 'href="/community/manage.bml"' }) . "</li></ul> p?>";
+                . BML::ml('.label.managepage', { 'aopts' => 'href="/community/manage"' }) . "</li></ul> p?>";
 
             return $ret;
         }
@@ -197,13 +197,13 @@ body<=
     if ($mode eq 'modify') {
         if ($GET{comm}) {
             # old GET arg
-            return BML::redirect("$LJ::SITEROOT/community/settings.bml?authas=$GET{comm}");
+            return BML::redirect("$LJ::SITEROOT/community/settings?authas=$GET{comm}");
         }
         $cname = LJ::canonical_username($GET{'authas'});
         $c = LJ::load_user($cname);
         unless ($c) {
-            # if no community was specified, redirect to manage.bml
-            return BML::redirect("$LJ::SITEROOT/community/manage.bml");
+            # if no community was specified, redirect to manage
+            return BML::redirect("$LJ::SITEROOT/community/manage");
         }
 
         unless ( $c->is_community ) {
@@ -218,15 +218,15 @@ body<=
         $info{'moderated'} = $c->{'moderated'} ? 1 : 0;
     }
 
-    $ret .= "<form method='post' action='settings.bml?mode=$mode'>";
+    $ret .= "<form method='post' action='settings?mode=$mode'>";
     $ret .= LJ::form_auth();
 
     if ($mode eq 'create') {
         LJ::set_active_crumb('createcommunity');
           $ret .= "<?h2 $ML{'.label.commheader'} h2?>" .
-              ($mode eq 'modify' ? "<?p $ML{'.label.commchange'} p?>" : "<?p " . BML::ml('.label.commcreate2', {'aopts' => "href='$LJ::SITEROOT/create.bml'"}) . " p?>");
+              ($mode eq 'modify' ? "<?p $ML{'.label.commchange'} p?>" : "<?p " . BML::ml('.label.commcreate2', {'aopts' => "href='$LJ::SITEROOT/create'"}) . " p?>");
           $ret .= "<?standout <table width='350' cellpadding='7'><tr valign='top'><td><b>$ML{'.label.maintainer'}</b></td>";
-          $ret .= "<td><?ljuser $remote->{'user'} ljuser?><br />" . BML::ml('.label.maintainer.login2', {'aopts' => "href='$LJ::SITEROOT/login.bml?ret=1'"}) . "</td></tr>";
+          $ret .= "<td><?ljuser $remote->{'user'} ljuser?><br />" . BML::ml('.label.maintainer.login2', {'aopts' => "href='$LJ::SITEROOT/login?ret=1'"}) . "</td></tr>";
           $ret .= "<tr valign='top'><td><b>$ML{'.label.community'}</b></td>";
           $ret .= "<td>$ML{'.label.username'}<br /><input name='cuser' maxlength='25' value='$cname' /><br />";
           $ret .= "<?inerr $errors{'username'} inerr?><br />";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/community/transfer.bml
--- a/htdocs/community/transfer.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/community/transfer.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -50,7 +50,7 @@
 
     # setup the form to transfer the community
     $body .= "<?p $ML{'.body'} p?>";
-    $body .= "<form method='post' action='/community/transfer.bml'>";
+    $body .= "<form method='post' action='/community/transfer'>";
     $body .= LJ::form_auth();
     $body .= "<table><tr><td>$ML{'.account'}</td>";
     $body .= "<td>" . LJ::html_text({ name => 'comm', id => 'comm', value => $POST{comm} }) . "</td></tr>\n";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/create.bml
--- a/htdocs/create.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/create.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -30,7 +30,7 @@ body<=
     my $getextra = '?' . join( '&', @getargs ) if @getargs;
 
     if ( $LJ::USE_SSL && !$LJ::IS_SSL && $GET{ssl} ne 'no' ) {
-        return BML::redirect( "$LJ::SSLROOT/create.bml$getextra" );
+        return BML::redirect( "$LJ::SSLROOT/create$getextra" );
     }
 
     my %from_post;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/create/index.bml
--- a/htdocs/create/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/create/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -20,7 +20,7 @@ body<=
     use strict;
     use vars qw/ %GET %POST $title $windowtitle $headextra @errors @warnings /;
 
-    return BML::redirect( "$LJ::SITEROOT/create.bml" );
+    return BML::redirect( "$LJ::SITEROOT/create" );
 }
 _code?>
 <=body
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/create/setup.bml
--- a/htdocs/create/setup.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/create/setup.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -39,9 +39,9 @@ body<=
 
         # next page unless errors
         unless ( keys %{ $from_post{errors} } ) {
-            return BML::redirect( "$LJ::SITEROOT/create/upgrade.bml" )
+            return BML::redirect( "$LJ::SITEROOT/create/upgrade" )
                 if LJ::is_enabled( 'payments' ) && !$remote->is_paid;
-            return BML::redirect( "$LJ::SITEROOT/create/confirm.bml" );
+            return BML::redirect( "$LJ::SITEROOT/create/confirm" );
         }
     }
 
@@ -50,7 +50,7 @@ body<=
     $ret .= "<div id='create-page'>";
     $ret .= LJ::Widget::CreateAccountProgressMeter->render( step => 2 );
 
-    $ret .= "<form method='post' action='$LJ::SITEROOT/create/setup.bml'>";
+    $ret .= "<form method='post' action='$LJ::SITEROOT/create/setup'>";
     $ret .= LJ::form_auth();
 
     $ret .= LJ::Widget::CreateAccountProfile->render(
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/customize/advanced/index.bml
--- a/htdocs/customize/advanced/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/customize/advanced/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -18,13 +18,13 @@ body<=
 <?p <?_ml .documentation.text _ml?> p?>
 <ul>
 <li><a href="<?siteroot?>/doc/s2/"><?_ml .s2doc.link _ml?></a> -- <?_ml .s2doc.desc _ml?></li>
-<li><a href="<?siteroot?>/customize/advanced/layerbrowse.bml"><?_ml .publiclayers.link _ml?></a> -- <?_ml .publiclayers.desc _ml?></li>
+<li><a href="<?siteroot?>/customize/advanced/layerbrowse"><?_ml .publiclayers.link _ml?></a> -- <?_ml .publiclayers.desc _ml?></li>
 </ul>
 
 <?h1 <?_ml .advancedoptions.header _ml?> h1?>
 <ul>
-<li><a href="<?siteroot?>/customize/advanced/layers.bml"><?_ml .yourlayers.link _ml?></a> -- <?_ml .yourlayers.desc _ml?></li>
-<li><a href="<?siteroot?>/customize/advanced/styles.bml"><?_ml .yourstyles.link _ml?></a> -- <?_ml .yourstyles.desc _ml?></li>
+<li><a href="<?siteroot?>/customize/advanced/layers"><?_ml .yourlayers.link _ml?></a> -- <?_ml .yourlayers.desc _ml?></li>
+<li><a href="<?siteroot?>/customize/advanced/styles"><?_ml .yourstyles.link _ml?></a> -- <?_ml .yourstyles.desc _ml?></li>
 </ul>';
 _code?>
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/customize/advanced/layerbrowse.bml
--- a/htdocs/customize/advanced/layerbrowse.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/customize/advanced/layerbrowse.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -48,7 +48,7 @@
             my $typedes = " ($lay->{'type'}" . (! $is_child ? ": <b>$lid</b>" : '') . ")";
 
             # show link to detailed view
-            $body .= "<li><a href='layerbrowse.bml?id=$lay->{'uniq'}'>" . LJ::ehtml($layerinfo{$lid}->{'name'});
+            $body .= "<li><a href='layerbrowse?id=$lay->{'uniq'}'>" . LJ::ehtml($layerinfo{$lid}->{'name'});
             $body .= "</a>$typedes</li>\n";
 
             # done unless there are children to recurse through
@@ -61,7 +61,7 @@
                     my $is_active = LJ::run_hook("layer_is_active", $pub->{$child}->{uniq});
                     $num_children++ if !defined $is_active || $is_active;
                 }
-                $body .= "<ul><li>[<a href='layerbrowse.bml?expand=$lid'>";
+                $body .= "<ul><li>[<a href='layerbrowse?expand=$lid'>";
                 $body .= BML::ml('.layerchildren', {'numchildren' => $num_children}) . "</a>]</li></ul>";
                 return;
             }
@@ -145,22 +145,22 @@
     $body .= "<br />";
     # link to layer list if this is a public layer, otherwise user's layer list
     if (defined $pub->{$id}) {
-        $body .= BML::ml('Backlink', { 'link' => "$LJ::SITEROOT/customize/advanced/layerbrowse.bml", 'text' => $ML{'.nav.publiclayers'} }) . "\n";
+        $body .= BML::ml('Backlink', { 'link' => "$LJ::SITEROOT/customize/advanced/layerbrowse", 'text' => $ML{'.nav.publiclayers'} }) . "\n";
     } else {
-        $body .= BML::ml('Backlink', { 'link' => "$LJ::SITEROOT/customize/advanced/layers.bml", 'text' => $ML{'.nav.yourlayers'} }) . "\n";
-        $body .= BML::ml('Actionlink', { 'link' => "<a href='$LJ::SITEROOT/customize/advanced/layeredit.bml?id=$id'>$ML{'.nav.editlayer'}</a>" }) . "\n";
+        $body .= BML::ml('Backlink', { 'link' => "$LJ::SITEROOT/customize/advanced/layers", 'text' => $ML{'.nav.yourlayers'} }) . "\n";
+        $body .= BML::ml('Actionlink', { 'link' => "<a href='$LJ::SITEROOT/customize/advanced/layeredit?id=$id'>$ML{'.nav.editlayer'}</a>" }) . "\n";
     }
 
 
     if ($layer->{'b2lid'}) {
-        $body .= BML::ml('Actionlink', { 'link' => "<a href=\"$LJ::SITEROOT/customize/advanced/layerbrowse.bml?id=$layer->{'b2lid'}\">$ML{'.nav.parentlayer'}</a>" }) . "\n";
+        $body .= BML::ml('Actionlink', { 'link' => "<a href=\"$LJ::SITEROOT/customize/advanced/layerbrowse?id=$layer->{'b2lid'}\">$ML{'.nav.parentlayer'}</a>" }) . "\n";
     }
     if (defined $pub->{$id} && (! defined $srcview || $srcview != 0) ||
             $srcview == 1 ||
             LJ::can_manage($remote, $layer->{'userid'}) ||
             $isadmin) {
 
-        $body .= BML::ml('Actionlink', { 'link' => "$ML{'.nav.viewsource'} <a href=\"$LJ::SITEROOT/customize/advanced/layersource.bml?id=$id\">$ML{'.nav.viewsource.raw'}</a> | <a href=\"$LJ::SITEROOT/customize/advanced/layersource.bml?id=$id&fmt=html\">$ML{'.nav.viewsource.highlighted'}</a>" }) . "\n";
+        $body .= BML::ml('Actionlink', { 'link' => "$ML{'.nav.viewsource'} <a href=\"$LJ::SITEROOT/customize/advanced/layersource?id=$id\">$ML{'.nav.viewsource.raw'}</a> | <a href=\"$LJ::SITEROOT/customize/advanced/layersource?id=$id&fmt=html\">$ML{'.nav.viewsource.highlighted'}</a>" }) . "\n";
     }
 
     # layerinfo
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/customize/advanced/layers.bml
--- a/htdocs/customize/advanced/layers.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/customize/advanced/layers.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -9,7 +9,7 @@
 
     # authas switcher form
     my $authasform = sub {
-        $body .= "<form method='get' action='layers.bml'>\n";
+        $body .= "<form method='get' action='layers'>\n";
         $body .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} }) . "\n";
         $body .= "</form>\n\n";
     };
@@ -76,7 +76,7 @@
     }) . "\n";
     my $styles_arg = $noactions ? "?user=" . $u->user : "?authas=" . $u->user;
     $body .= BML::ml("Actionlink", {
-        'link' => "<a href='$LJ::SITEROOT/customize/advanced/styles.bml$styles_arg'>$ML{'.nav.yourstyles'}</a>",
+        'link' => "<a href='$LJ::SITEROOT/customize/advanced/styles$styles_arg'>$ML{'.nav.yourstyles'}</a>",
     }) . "\n";
 
 
@@ -125,7 +125,7 @@
         }
 
         # redirect so they can't refresh and create a new layer again
-        return BML::redirect("layers.bml?authas=$authas");
+        return BML::redirect("layers?authas=$authas");
     }
 
     # delete
@@ -149,10 +149,10 @@
             $title = BML::ml('.delete.title', {'name' => $name});
             $body .= "<br /> ";
             $body .= BML::ml("Backlink", {
-                'link' => "$LJ::SITEROOT/customize/advanced/layers.bml?authas=$authas",
+                'link' => "$LJ::SITEROOT/customize/advanced/layers?authas=$authas",
                 'text' => $ML{'.back2layers'},
             }) . "\n";
-            $body .= "<form method='post' action='layers.bml?authas=$authas'>";
+            $body .= "<form method='post' action='layers?authas=$authas'>";
             $body .= $formauth;
             $body .= LJ::html_hidden('action:del', '1', 'id', $id);
               
@@ -163,7 +163,7 @@
         }
 
         LJ::S2::delete_layer($u, $id);
-        return BML::redirect("layers.bml?authas=$authas");
+        return BML::redirect("layers?authas=$authas");
     }
 
     # authas switcher form
@@ -185,16 +185,16 @@
                 $lastbase = $bid;
                 my $parlay = $ulay->{$bid} || $pub->{$bid};
                 my $pname = LJ::ehtml($parlay->{'name'});
-                $body .= "<tr><td colspan='4'><small>" . BML::ml('.yourlayers.childof', {'aopts' => "href='$LJ::SITEROOT/customize/advanced/layerbrowse.bml?id=$bid'", 'layerid' => $bid, 'name' => $pname}) . "</small></td></tr>\n";
+                $body .= "<tr><td colspan='4'><small>" . BML::ml('.yourlayers.childof', {'aopts' => "href='$LJ::SITEROOT/customize/advanced/layerbrowse?id=$bid'", 'layerid' => $bid, 'name' => $pname}) . "</small></td></tr>\n";
             }
             my $lay = $ulay->{$lid};
             my $name = LJ::ehtml($lay->{'name'}) || "<i>$ML{'.yourlayers.noname'}</i>";
-            $body .= "<tr><td><a href='layerbrowse.bml?id=$lid'>$lid</a></td><td>$lay->{'type'}</td><td>$name</td><td>";
-            $body .= "<form method='post' style='display:inline' action='layeredit.bml?id=$lid'>";
+            $body .= "<tr><td><a href='layerbrowse?id=$lid'>$lid</a></td><td>$lay->{'type'}</td><td>$name</td><td>";
+            $body .= "<form method='post' style='display:inline' action='layeredit?id=$lid'>";
             $body .= LJ::html_submit('action:edit', $ML{'.btn.edit'}, { disabled => $noactions });
             $body .= "</form>";
 
-            $body .= "<form method='post' style='display:inline' action='layers.bml?authas=$authas'>";
+            $body .= "<form method='post' style='display:inline' action='layers?authas=$authas'>";
             $body .= $formauth;
             $body .= LJ::html_hidden('id', $lid);
             $body .= LJ::html_submit('action:del', $ML{'.btn.delete2'}, { disabled => $noactions });
@@ -214,7 +214,7 @@
 
     $body .= "<div style='margin-top: 10px;'>\n";
     $body .= "<?h2 $ML{'.createlayer.toplevel'} h2?>\n";
-    $body .= "<form method='post' action='layers.bml?authas=$authas'>\n";
+    $body .= "<form method='post' action='layers?authas=$authas'>\n";
     
     $body .= "$ML{'.createlayer.toplevel.label.type'} " . LJ::html_select({ 'name' => 'type' },
                                           "" => "",
@@ -240,7 +240,7 @@
     $body .= "</div>\n\n";
 
     $body .= "<?h2 $ML{'.createlayer.layoutspecific'} h2?>\n";
-    $body .= "<form method='post' action='layers.bml?authas=$authas'>\n";
+    $body .= "<form method='post' action='layers?authas=$authas'>\n";
     $body .= $formauth;
 
     $body .= "$ML{'.createlayer.layoutspecific.label.type'} " . LJ::html_select({ 'name' => 'type' },
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/customize/advanced/layersource.bml
--- a/htdocs/customize/advanced/layersource.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/customize/advanced/layersource.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -14,7 +14,7 @@
     my $remote = LJ::get_remote();
 
     my $id = $GET{'id'};
-    return BML::redirect('layerbrowse.bml') unless $id =~ /^\d+$/;
+    return BML::redirect('layerbrowse') unless $id =~ /^\d+$/;
 
     my $lay = defined $pub->{$id} ? $pub->{$id} : LJ::S2::load_layer($id);
     return $err->($ML{'/customize/advanced/layerbrowse.bml.error.layerdoesntexist'})
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/customize/advanced/styles.bml
--- a/htdocs/customize/advanced/styles.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/customize/advanced/styles.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -9,7 +9,7 @@
 
     # authas switcher form
     my $authasform = sub {
-        $body .= "<form method='get' action='styles.bml'>\n";
+        $body .= "<form method='get' action='styles'>\n";
         $body .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} }) . "\n";
         $body .= "</form>\n\n";
     };
@@ -83,7 +83,7 @@
         'text' => $ML{'.back2'},
     }) . "\n";
     $body .= BML::ml("Actionlink", {
-        'link' => "<a href='$LJ::SITEROOT/customize/advanced/layers.bml$getextra'>$ML{'.nav.yourlayers'}</a>",
+        'link' => "<a href='$LJ::SITEROOT/customize/advanced/layers$getextra'>$ML{'.nav.yourlayers'}</a>",
     }) . "\n";
 
     # edit mode
@@ -105,7 +105,7 @@
             LJ::set_userprop($u, "stylesys", '2');
             LJ::set_userprop($u, "s2_style", $id);
             LJ::run_hooks('apply_theme', $u);
-            return BML::redirect("styles.bml$getextra");
+            return BML::redirect("styles$getextra");
         }
 
         # get public layers
@@ -163,7 +163,7 @@
 
         # set up start of output
         $title = $ML{'.editstyle.title'};
-        $body .= "<br />" . BML::ml('Backlink', { 'text' => $ML{'.back2styles'}, 'link' => "$LJ::SITEROOT/customize/advanced/styles.bml$getextra" }) . "\n";
+        $body .= "<br />" . BML::ml('Backlink', { 'text' => $ML{'.back2styles'}, 'link' => "$LJ::SITEROOT/customize/advanced/styles$getextra" }) . "\n";
 
         ### process edit actions
 
@@ -172,7 +172,7 @@
             return "<b>$ML{'Error'}</b> $ML{'error.invalidform'}" unless LJ::check_form_auth();
             LJ::S2::delete_user_style($u, $id);
             undef $id; # don't show form below
-            return BML::redirect("styles.bml$getextra");
+            return BML::redirect("styles$getextra");
         }
 
         # save changes
@@ -257,7 +257,7 @@
             LJ::S2::set_style_layers($u, $style->{'styleid'}, @layers);
 
             # redirect if they clicked the bottom button
-            return BML::redirect("styles.bml$getextra") if $POST{'action:savechanges'};
+            return BML::redirect("styles$getextra") if $POST{'action:savechanges'};
         }
 
     # no style id, process actions for non-edit mode
@@ -277,7 +277,7 @@
             my $styleid = LJ::S2::create_style($u, $POST{'stylename'});
             return $err->($ML{'.error.cantcreatestyle'}) unless $styleid;
 
-            return BML::redirect("styles.bml?id=$styleid$getextra_amp");
+            return BML::redirect("styles?id=$styleid$getextra_amp");
         }
 
         # load style currently in use
@@ -293,7 +293,7 @@
         if (%$ustyle) {
             my $journalbase = LJ::journal_base($u);
             foreach my $styleid (sort { $ustyle->{$a} cmp $ustyle->{$b} || $a <=> $b} keys %$ustyle) {
-                $body .= "<tr><td><form style='display:inline' method='post' action='styles.bml?id=$styleid$getextra_amp'>";
+                $body .= "<tr><td><form style='display:inline' method='post' action='styles?id=$styleid$getextra_amp'>";
                 $body .= $formauth;
                 my @b = $styleid == $u->{'s2_style'} ? "<b>" : "</b>";
                 $body .= $b[0];
@@ -320,7 +320,7 @@
 
     my $extra = $id ? "?id=$id" : '';
     $extra .= $extra ? $getextra_amp : $getextra;
-    $body .= "<form name='styleForm' method='post' action='styles.bml$extra'>";
+    $body .= "<form name='styleForm' method='post' action='styles$extra'>";
     $body .= $formauth;
 
     # create a new style, or change the name of the style currently being edited
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/customize/index.bml
--- a/htdocs/customize/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/customize/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -45,7 +45,7 @@ body<=
             return "<?h1 $ML{'Error'} h1?><?p $ML{'error.invalidform'} p?>"
                 unless LJ::check_form_auth();
 
-            return BML::redirect("$LJ::SITEROOT/customize/options.bml$getextra");
+            return BML::redirect("$LJ::SITEROOT/customize/options$getextra");
         }
         my @errors = LJ::Widget->handle_post(\%POST, qw(JournalTitles ThemeChooser ThemeNav LayoutChooser AdLayout));
         $ret .= LJ::bad_input(@errors) if @errors;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/customize/options.bml
--- a/htdocs/customize/options.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/customize/options.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -44,7 +44,7 @@ body<=
         $ret .= "<div class='beta-feedback'><a href='$LJ::CUSTOMIZE_FEEDBACK_LINK'>$ML{'.customize.feedback'}</a></div>";
     }
 
-    $ret .= "<form action='$LJ::SITEROOT/customize/options.bml' method='get' class='theme-switcher'>";
+    $ret .= "<form action='$LJ::SITEROOT/customize/options' method='get' class='theme-switcher'>";
     $ret .= LJ::make_authas_select($remote, { authas => $GET{authas}, label => $ML{'.switcher.label'}, button => $ML{'.switcher.btn'} });
     $ret .= "</form>";
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/customize/viewuser.bml
--- a/htdocs/customize/viewuser.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/customize/viewuser.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -8,7 +8,7 @@
     my $dbh = LJ::get_db_writer();
 
     my $remote = LJ::get_remote();
-    return "<?h1 $ML{'.login.required'} h1?><?p " . BML::ml('.login.first', {'url'=>"href='/login.bml?ret=1'"}) . " p?>"
+    return "<?h1 $ML{'.login.required'} h1?><?p " . BML::ml('.login.first', {'url'=>"href='/login?ret=1'"}) . " p?>"
         unless $remote;
 
     my $authas = $GET{authas} || $remote->{user};
@@ -21,7 +21,7 @@
     $body = "";
     $title = $ML{".user.layer"};
 
-    $body .= "<form method='get' action='viewuser.bml'>\n";
+    $body .= "<form method='get' action='viewuser'>\n";
     $body .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} }) . "\n";
     $body .= "</form>\n\n";
 
@@ -90,8 +90,8 @@
     # load the language and layout choices for core.
     LJ::S2::load_layer_info(\%layerinfo, \@layerids);
    
-    $body .= "<a href='viewuser.bml?journal=$authas'>$ML{'.raw'}</a> | ";
-    $body .= "<a href='viewuser.bml?journal=$authas&as=theme'>$ML{'.as.theme'}</a>\n";
+    $body .= "<a href='viewuser?journal=$authas'>$ML{'.raw'}</a> | ";
+    $body .= "<a href='viewuser?journal=$authas&as=theme'>$ML{'.as.theme'}</a>\n";
 
     $body .= "<p><textarea rows='40' cols='60' wrap='off'>";
     
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/delcomment.bml
--- a/htdocs/delcomment.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/delcomment.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -138,7 +138,7 @@ _info?><?_code
 
 #    $body .= "<?h1 $ML{'.confirm.head'} h1?>";
 #    $body .= "<?p $ML{'.confirm.body'} p?>";
-    $body .= "<form method='post' action='delcomment.bml?";
+    $body .= "<form method='post' action='delcomment?";
     $body .= "journal=$u->{'user'}&id=$GET{'id'}'>\n";
     $body .= LJ::form_auth();
     $body .= "<?standout ";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/dev/userlist.bml
--- a/htdocs/dev/userlist.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/dev/userlist.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -41,19 +41,19 @@ body<=
     # sort bar
     my $pagearg = $GET{'page'} > 1 ? "&amp;page=$GET{'page'}" : "";
     my $pagearg2 = $GET{'page'} > 1 ? "?page=$GET{'page'}" : "";
-    $ret .= "<?p <strong>Sort by:</strong> [<a href='userlist.bml$pagearg2'> User ID
-        </a>|<a href='userlist.bml?sort=user$pagearg'> Username
-        </a>|<a href='userlist.bml?sort=jt$pagearg'> Journal Type
-        </a>|<a href='userlist.bml?sort=sv$pagearg'> Status Vis
+    $ret .= "<?p <strong>Sort by:</strong> [<a href='userlist$pagearg2'> User ID
+        </a>|<a href='userlist?sort=user$pagearg'> Username
+        </a>|<a href='userlist?sort=jt$pagearg'> Journal Type
+        </a>|<a href='userlist?sort=sv$pagearg'> Status Vis
         </a>] p?>";
 
     # page bar
     my $next = $page + 2;
     $pagearg = $page > 1 ? "&amp;page=$page" : "";
     $ret .= "<?p [" if $page || !$islastpage;
-    $ret .= "<a href='userlist.bml?sort=$GET{'sort'}$pagearg'> Previous Page </a>" if $page;
+    $ret .= "<a href='userlist?sort=$GET{'sort'}$pagearg'> Previous Page </a>" if $page;
     $ret .= "|" if $page && !$islastpage;
-    $ret .= "<a href='userlist.bml?sort=$GET{'sort'}&amp;page=$next'> Next Page </a>" if !$islastpage;
+    $ret .= "<a href='userlist?sort=$GET{'sort'}&amp;page=$next'> Next Page </a>" if !$islastpage;
     $ret .= "] p?>" if $page || !$islastpage;
 
     $ret .= "<br /><br /> <table width='100%' border='1'>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/didyouknow/index.bml
--- a/htdocs/didyouknow/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/didyouknow/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -4,7 +4,7 @@
     use vars qw($title $body %POST);
 
     my $u = LJ::get_remote()
-        or return BML::redirect("$LJ::SITEROOT/login.bml");
+        or return BML::redirect("$LJ::SITEROOT/login");
 
     $title = $ML{'.title'};
     $body = "";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/directory.bml
--- a/htdocs/directory.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/directory.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -116,7 +116,7 @@ body<=
             next unless ($count{'stateus'}->{$state});
             my $shape = "poly";
             if ($coords =~ /^[^,]+,[^,]+,[^,]+,[^,]+$/) { $shape = "RECTANGLE"; }
-            $ret .= "<area shape='$shape' alt='$state' coords=\"$coords\" href=\"/directory.bml?s_loc=1&amp;loc_cn=US&amp;loc_st=$state&amp;opt_sort=ut\" onmouseover=\"Directory.updateStatus('";
+            $ret .= "<area shape='$shape' alt='$state' coords=\"$coords\" href=\"/directory?s_loc=1&amp;loc_cn=US&amp;loc_st=$state&amp;opt_sort=ut\" onmouseover=\"Directory.updateStatus('";
             $ret .= BML::eall($state{$state});
             $ret .= " - ";
             $ret .= ($count{'stateus'}->{$state}+0);
@@ -146,7 +146,7 @@ body<=
         foreach (sort { $country{$a} cmp $country{$b} } keys %{$count{'country'}})
         {
             $count++;
-            $ret .= "<li><a href=\"/directory.bml?s_loc=1&amp;loc_cn=$_&amp;opt_sort=ut\">$country{$_}</a> <i>($count{'country'}->{$_})</i></li>\n";
+            $ret .= "<li><a href=\"/directory?s_loc=1&amp;loc_cn=$_&amp;opt_sort=ut\">$country{$_}</a> <i>($count{'country'}->{$_})</i></li>\n";
             if ($col==0 && $count > ($total/2)) { $ret .= "</ul></td><td align='left'><ul>"; $col = 1; }
         }
         $ret .= "</ul></td></tr></table></div>";
@@ -181,8 +181,8 @@ body<=
     # Do the actual search
 
     my $url = "$LJ::SITEROOT/";
-    $url .= $GET{journaltype} && $GET{journaltype} eq "C" ? "community/search.bml"
-                                                          : "directorysearch.bml";
+    $url .= $GET{journaltype} && $GET{journaltype} eq "C" ? "community/search"
+                                                          : "directorysearch";
     $ret .= qq {
         <div id="NewSearch">
             <a href="$url"><< $ML{'.new_search'}</a>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/directorysearch.bml
--- a/htdocs/directorysearch.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/directorysearch.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -38,7 +38,7 @@ _code?>
 
 <?p 
 <?_code
-    my $ret = BML::ml('.use_this_dir2', { 'aopts' => "href='$LJ::SITEROOT/community/search.bml'", sitename => $LJ::SITENAMESHORT });
+    my $ret = BML::ml('.use_this_dir2', { 'aopts' => "href='$LJ::SITEROOT/community/search'", sitename => $LJ::SITENAMESHORT });
     return $ret;
 _code?>
  p?>
@@ -47,7 +47,7 @@ _code?>
 
 <center>
 
-<form style='margin-top: 1.5em' action='/directory.bml' method='get'>
+<form style='margin-top: 1.5em' action='/directory' method='get'>
 
 <table cellpadding='4' cellspacing='0' border='0'>
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/editjournal.bml
--- a/htdocs/editjournal.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/editjournal.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -61,7 +61,7 @@ body<=
             my $ditemid = $itemid * 256 + $res{"events_${i}_anum"};
 
             $ret .= "<?hr?><table><tr valign='top'><td align='middle'>";
-            $ret .= "<form method='post' action='editjournal.bml$getextra'>\n";
+            $ret .= "<form method='post' action='editjournal$getextra'>\n";
             $ret .= LJ::html_hidden('itemid',$ditemid,'mode',"edit");
             $ret .= LJ::html_submit( "itemid-$ditemid", $ML{'.edit.this.entry'} );
             $ret .= "</form>";
@@ -236,7 +236,7 @@ body<=
                 my $journalu = $usejournal ? $usejournal_u : $u;
                 my $j_base = $journalu->journal_base;
                 my $entry_url = LJ::item_link($journalu, $itemid, $res{anum});
-                my $edititemlink = "/editjournal.bml?itemid=$ditemid";
+                my $edititemlink = "/editjournal?itemid=$ditemid";
 
                 # update crosspost if we're posting to our own journal and have
                 # selected crosspost.
@@ -313,18 +313,18 @@ body<=
 
                         if ($spid) {
                             $entry_obj->set_prop( unsuspend_supportid => $spid );
-                            my $url = "$LJ::SITEROOT/support/see_request.bml?id=$spid";
+                            my $url = "$LJ::SITEROOT/support/see_request?id=$spid";
                             $result .= "<?p " . BML::ml('.success.editedunsuspend', { url => "<a href='$url'>$url</a>" }) . " p?>";
                         }
                     } elsif ($POST{'action:save'} && $entry_obj->is_suspended && !$entry_obj->prop("unsuspend_supportid")) {
-                        $result .= "<?p " . BML::ml('.success.editedstillsuspended', { aopts => "href='$LJ::SITEROOT/abuse/report.bml'" }) . " p?>";
+                        $result .= "<?p " . BML::ml('.success.editedstillsuspended', { aopts => "href='$LJ::SITEROOT/abuse/report'" }) . " p?>";
                     }
                 }
 
                 $result .= "<div id='fromhere'>$ML{'.success.fromhere'}<ul>";
                 $result .= "<li><a href='$entry_url'>$ML{'.success.fromhere.viewentry'}</a></li>" unless $deleted;
                 $result .= "<li><a href='$j_base'>$ML{'.success.fromhere.viewentries'}</a></li>";
-                $result .= "<li><a href='$LJ::SITEROOT/editjournal.bml'>$ML{'.success.fromhere.manageentries'}</a></li>";
+                $result .= "<li><a href='$LJ::SITEROOT/editjournal'>$ML{'.success.fromhere.manageentries'}</a></li>";
                 $result .= "</ul></div>";
                 $result .= "</td>";
 
@@ -369,7 +369,7 @@ body<=
             # start edit form
             my $ret; my $js;
             $ret .= "<table><tr><td>";
-            $ret .= "<div style='width: 100%; float: left;'><form method='post' action='editjournal.bml$getextra' id='updateForm' name='updateForm'>";
+            $ret .= "<div style='width: 100%; float: left;'><form method='post' action='editjournal$getextra' id='updateForm' name='updateForm'>";
             $ret .= LJ::form_auth();
             $ret .= LJ::html_hidden('itemid', $ditemid,'mode','edit','edited',1) . "\n";
 
@@ -425,7 +425,7 @@ body<=
             # -- shove into \$head which is a reference into $_[1]->{head} and will
             #    be placed in the correct BML head portion later
             # -- this is a hack, should be done by weblib and pushed into \$$head above
-            #    in a way which is compatible with both this page and update.bml
+            #    in a way which is compatible with both this page and update
             $$head .= qq{
     <script type="text/javascript">
     //<![CDATA[
@@ -448,7 +448,7 @@ body<=
 
         ### already authenticated from above
 
-        return BML::redirect("$LJ::SITEROOT/editjournal.bml")
+        return BML::redirect("$LJ::SITEROOT/editjournal")
             unless LJ::did_post();
 
         my %res;
@@ -490,7 +490,7 @@ body<=
         if ($res{'events_count'} == 1) {
             my $ditemid = ($res{'events_1_itemid'} << 8) + $res{'events_1_anum'};
             my $ditemid_get = $getextra ? "$getextra&itemid=$ditemid" : "?itemid=$ditemid";
-            return BML::redirect("$LJ::SITEROOT/editjournal.bml$ditemid_get");
+            return BML::redirect("$LJ::SITEROOT/editjournal$ditemid_get");
         }
 
         # how many results did we get?
@@ -513,17 +513,17 @@ body<=
         $ret .= "<table style='width: 100%;'><tr><td>";
 
         # user switcher
-        $ret .= "<form action='editjournal.bml' method='get'>\n";
+        $ret .= "<form action='editjournal' method='get'>\n";
         $ret .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'}, 'type' => 'P' });
         $ret .= "</form>\n\n";
 
         # header
         $ret .= "<?p " . BML::ml('.desc',
-                                {'aopts' => "href='$LJ::SITEROOT/editprivacy.bml'"})
+                                {'aopts' => "href='$LJ::SITEROOT/editprivacy'"})
                  . " p?>\n";
 
         # edit form
-        $ret .= "<form action='editjournal.bml$getextra' method='post'>\n";
+        $ret .= "<form action='editjournal$getextra' method='post'>\n";
         $ret .= LJ::html_hidden("mode","edit");
         $ret .= "<?standout <table>\n";
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/editpics.bml
--- a/htdocs/editpics.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/editpics.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -244,7 +244,7 @@ use strict;
                         LJ::mogclient()->store_content("upf_$current_upload{index}:$u->{userid}", "temp", $current_upload{image});
                     }
 
-                    $factory_redirect = "$LJ::SITEROOT/tools/userpicfactory.bml?keywords=" .
+                    $factory_redirect = "$LJ::SITEROOT/tools/userpicfactory?keywords=" .
                         BML::eurl($current_upload{keywords}) . "&comments=" .
                         BML::eurl($current_upload{comments}) . "&descriptions=" .
                         BML::eurl($current_upload{descriptions}) .
@@ -304,7 +304,7 @@ use strict;
     }
 
     # authas switcher form
-    $body .= "<form method='get' id='userpic_authas' action='editpics$suffix.bml'>\n";
+    $body .= "<form method='get' id='userpic_authas' action='editpics$suffix'>\n";
     $body .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} }) . "\n";
     $body .= "</form>\n\n";
 
@@ -327,8 +327,8 @@ use strict;
             $body .= qq {
                 <iframe name='upiframe' width='1' height='1' style='border: none'></iframe>
                 <div id='uploadBox' class='pkg'><div id='uploadBox-inner'>
-                    <form enctype="multipart/form-data" action="editpics$suffix.bml$getextra" method='post' id='uploadPic'>
-                    <input type="hidden" id="go_to" name="go_to" value="editpics$suffix.bml$getextra" />
+                    <form enctype="multipart/form-data" action="editpics$suffix$getextra" method='post' id='uploadPic'>
+                    <input type="hidden" id="go_to" name="go_to" value="editpics$suffix$getextra" />
             };
 
             $body .= "<?h1 $ML{'.uploadheader'} h1?>\n";
@@ -457,7 +457,7 @@ use strict;
     # print out each pic and editing fields
     if ( scalar @userpics ) {
         $body .= "<div id='current_userpics'>";
-        $body .= "<form method='post' action='editpics$suffix.bml$getextra'>";
+        $body .= "<form method='post' action='editpics$suffix$getextra'>";
         $body .= LJ::form_auth();
 
         $body .= qq {
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/editprivacy.bml
--- a/htdocs/editprivacy.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/editprivacy.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -81,7 +81,7 @@ body<=
                                 { aopts => "href='" . $u->journal_base() . "/calendar/'" })
                 . " p?>\n";;
 
-        $ret .= "<form method='post' action='./editprivacy.bml'>";
+        $ret .= "<form method='post' action='./editprivacy'>";
         $ret .= "<?h1 $ML{'.timeframe'} h1?>";
         $ret .= "<table><tr><td>\n";
         $ret .= LJ::html_check({ 'type' => 'radio', 'name' => 'time',
@@ -139,7 +139,7 @@ body<=
 
         my ($posts, $s_unixtime, $e_unixtime);
         my $form_root = $more_public ? $LJ::SSLROOT : ".";
-        my $body = "<form method='post' action='$form_root/editprivacy.bml'>";
+        my $body = "<form method='post' action='$form_root/editprivacy'>";
 
         $body .= LJ::bad_input(@errors) if @errors;
         $body .= "<p>Change \"$security{$POST{'s_security'}}[1]\" posts to \"$security{$POST{'e_security'}}[2]\"";
@@ -208,7 +208,7 @@ body<=
                                                        e_security => $security{$POST{e_security}}[0],
                                                        s_unixtime => $POST{s_unixtime},
                                                        e_unixtime => $POST{e_unixtime} } );
-                return BML::redirect("$LJ::SITEROOT/editprivacy.bml?mode=secured");
+                return BML::redirect("$LJ::SITEROOT/editprivacy?mode=secured");
             }
         }
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/edittags.bml
--- a/htdocs/edittags.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/edittags.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -91,7 +91,7 @@ body<=
     $ret .= "<tr><td class='l'>$ML{'.subject'}</td><td>$subj</td></tr>" if $subj;
 
     $ret .= "<tr><td class='l'>$ML{'.current'}</td>";
-    $ret .= '<form method="POST" action="/edittags.bml" id="edit_tagform">';
+    $ret .= '<form method="POST" action="/edittags" id="edit_tagform">';
     $ret .= LJ::form_auth();
     $ret .= "<td class='sep'>";
     if ( LJ::Tags::can_add_tags($u, $remote) ) {
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/export.bml
--- a/htdocs/export.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/export.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -20,14 +20,14 @@ body<=
     # no authentication needs to be done on this page, it's just a form anyway
 
     # user switcher
-    $ret .= "<form action='export.bml' method='get'>\n";
+    $ret .= "<form action='export' method='get'>\n";
     $ret .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'}, 'showall' => 1 });
     $ret .= "</form>\n\n";
 
     $ret .= "<?h1 <?_ml .title _ml?> h1?>\n";
     $ret .= "<?p <?_ml .description _ml?> p?>\n";
 
-    $ret .= "<form action='export_do.bml?authas=$authas' method='post'>\n";
+    $ret .= "<form action='export_do?authas=$authas' method='post'>\n";
    
     # main form
     $ret .= <<'HTMLBLOCK';
@@ -101,7 +101,7 @@ standout?>
 <?h1 <?_ml lostinfo.head _ml?> h1?>
 HTMLBLOCK
 
-    $ret .= "<?p " . BML::ml('lostinfo.text2', {'aopts' => "href='$LJ::SITEROOT/lostinfo.bml'"}) . " p?>";
+    $ret .= "<?p " . BML::ml('lostinfo.text2', {'aopts' => "href='$LJ::SITEROOT/lostinfo'"}) . " p?>";
 
 }
 _code?>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/imgupload.bml
--- a/htdocs/imgupload.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/imgupload.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -58,7 +58,7 @@
 
     $$head .= qq~
         <script type="text/javascript">
-            var urlaction  = 'imgupload.bml';
+            var urlaction  = 'imgupload';
 
             function onCancel () {
                 window.parent.InOb.onClosePopup();
@@ -80,7 +80,7 @@
 
     $ret .= "<div class='insob-wrapper'>";
     $ret .= "<div class='insobjOuter' id='insobjOuter'>";
-    $ret .= "<form id='insobjform' enctype='multipart/form-data' action='imgupload.bml' method='post' onsubmit='return window.parent.InOb.onSubmit()' >";
+    $ret .= "<form id='insobjform' enctype='multipart/form-data' action='imgupload' method='post' onsubmit='return window.parent.InOb.onSubmit()' >";
     $ret .= "<div class='tabs'><ul><li id='tabInsert' class='on'><a href='javascript: void(0);' onclick='window.parent.InOb.showSelectorPage();setTab(\"tabInsert\");return false;'>Insert Image</a></li>";
 
     $ret .= "<li id='tabPhotobucket'><a href='javascript: void(0);' onclick='window.parent.InOb.photobucket(seedurl,pb_affsite_id);setTab(\"tabPhotobucket\");return false;'>Photobucket</a></li>" if $LJ::PHOTOBUCKET_JWIDGET_ID;
@@ -127,7 +127,7 @@
     $$body = $ret;
 
     if ( $LJ::PHOTOBUCKET_JWIDGET_ID ) {
-        $$head .= "<script type='text/javascript'>var seedurl='$LJ::SITEROOT/photobucket_cb.bml';";
+        $$head .= "<script type='text/javascript'>var seedurl='$LJ::SITEROOT/photobucket_cb';";
         $$head .= "var pb_affsite_id = $LJ::PHOTOBUCKET_JWIDGET_ID;</script>\n";
     }
     $$head .= LJ::res_includes();
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/imguploadrte.bml
--- a/htdocs/imguploadrte.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/imguploadrte.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -123,7 +123,7 @@
                        <td><span fckLang="DlgImgPreview">Preview</span></td></tr>
                        <tr>
                        <td valign="top">
-                       <iframe class="ImagePreviewArea" src="$LJ::SITEROOT/imgpreview.bml" frameborder="no" marginheight="0" marginwidth="0"></iframe>
+                       <iframe class="ImagePreviewArea" src="$LJ::SITEROOT/imgpreview" frameborder="no" marginheight="0" marginwidth="0"></iframe>
                        </td></tr>
                        </table></td></tr>
                        </table></td></tr>
@@ -216,7 +216,7 @@
                     </div>
                 };
     
-            $$head .= "<script type='text/javascript'>var seedurl='$LJ::SITEROOT/photobucket_cb.bml';";
+            $$head .= "<script type='text/javascript'>var seedurl='$LJ::SITEROOT/photobucket_cb';";
             $$head .= "var pb_affsite_id = $LJ::PHOTOBUCKET_JWIDGET_ID;</script>\n";
         }
     
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/inbox/compose.bml
--- a/htdocs/inbox/compose.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/inbox/compose.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -134,7 +134,7 @@ body<=
                 unless (@errors) {
                     $body .= "Your message has been sent successfully.";
                     $body .= "<?p From here you can:<ul>";
-                    $body .= "<li><a href='$LJ::SITEROOT/inbox/compose.bml'>Send a new message</a></li>";
+                    $body .= "<li><a href='$LJ::SITEROOT/inbox/compose'>Send a new message</a></li>";
                     $body .= "<li><a href='$LJ::SITEROOT/inbox/'>Return to Inbox</a></li>";
                     $body .= "<li><a href='$LJ::SITEROOT/'>Return Home</a></li>";
                     $body .= "</ul> p?>\n";
@@ -193,7 +193,7 @@ body<=
         <td valign="top" style="padding-left: 10px; width: 100%;">
     };
 
-    $body .= '<form action="./compose.bml" method="POST" id="compose">';
+    $body .= '<form action="./compose" method="POST" id="compose">';
 
     $body .= LJ::form_auth();
     my $pic = ''; # displays chosen/default pic
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/interests.bml
--- a/htdocs/interests.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/interests.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -35,7 +35,7 @@ body<=
         my $ret = '';
         $ret .= "<?h1 $ML{'.popular.head'} h1?><?p $ML{'.popular.text'} ";
 
-        $ret .= BML::ml('.popular.textmode', { 'aopts' => "href='$LJ::SITEROOT/interests.bml?view=popular&mode=text'" })
+        $ret .= BML::ml('.popular.textmode', { 'aopts' => "href='$LJ::SITEROOT/interests?view=popular&mode=text'" })
             unless $GET{mode} eq 'text';
 
         $ret .= " p?>";
@@ -50,7 +50,7 @@ body<=
             $interests{$int} = {
                                 int   => $int,
                                 eint  => LJ::ehtml($int),
-                                url   => "/interests.bml?int=" . LJ::eurl($int),
+                                url   => "/interests?int=" . LJ::eurl($int),
                                 value => $count,
                                 };
         }
@@ -79,19 +79,19 @@ body<=
             return $ret;
         }
 
-        # force them to either come from the interests.bml page, or have posted the request.
+        # force them to either come from the interests page, or have posted the request.
         # if both fail, ask them to confirm with a post form.
 
         my $dbr = LJ::get_db_reader();
 
-        unless ($did_post || BML::get_client_header('Referer') =~ /^\Q$LJ::SITEROOT\E\/interests\.bml\?/)
+        unless ($did_post || BML::get_client_header('Referer') =~ /^\Q$LJ::SITEROOT\E\/interests\?/)
         {
             my ($int) = $dbr->selectrow_array("SELECT interest FROM interests WHERE intid=?", undef, $intid);
             LJ::text_out(\$int);
 
             $ret .= "<?h1 $ML{'.add.confirm.head'} h1?>";
             $ret .= "<?p " . BML::ml(".add.confirm.text", {'interest' => $int});
-            $ret .= "<form method='post' action='interests.bml'><div align='center'>";
+            $ret .= "<form method='post' action='interests'><div align='center'>";
             $ret .= LJ::html_hidden('mode' => 'add', 'intid' => $intid);
             $ret .= LJ::html_submit(undef, BML::ml(".add.btn.text", {'interest' => $int}));
             $ret .= LJ::form_auth();
@@ -227,10 +227,10 @@ body<=
 
         return "<?h1 $ML{'Error'} h1?><?p $ML{'.error.nointerests'} p?>" unless %fromint;
 
-        my $ret = "<?p <form method='get' action='interests.bml'>";
+        my $ret = "<?p <form method='get' action='interests'>";
         $ret .= LJ::html_hidden(mode => 'enmasse', fromuser => $fromu->{'user'});
         $ret .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} });
-        $ret .= "</form> p?><form method='post' action='interests.bml$getextra'>";
+        $ret .= "</form> p?><form method='post' action='interests$getextra'>";
         $ret .= "<?h1 $ML{'.enmasse.header'} h1?><?p ";
 
         if ($u->{'userid'} == $fromu->{'userid'}) {
@@ -391,12 +391,12 @@ body<=
 
         $ret .= "<table>";
         $ret .= "<tr valign='middle'><td class='findandmodify'>$ML{'.interested.in'}</td>";
-        $ret .= "<td class='findandmodify'><form method='get' action='interests.bml'>";
+        $ret .= "<td class='findandmodify'><form method='get' action='interests'>";
         $ret .= LJ::html_text({name => 'int', size => 20, value => $interest || $e_int}) . "&nbsp;";
         $ret .= LJ::html_submit(undef, $ML{'.interested.btn.find'});
         $ret .= "</form></td></tr>";
         $ret .= "<tr valign='middle'><td class='findandmodify'>$ML{'.enmasse.intro'}</td>";
-        $ret .= "<td class='findandmodify'><form method='get' action='interests.bml'>";
+        $ret .= "<td class='findandmodify'><form method='get' action='interests'>";
         $ret .= LJ::html_text({name => 'fromuser', size => 20}) . "&nbsp;";
         $ret .= LJ::html_submit(undef, $ML{'.enmasse.btn'});
         $ret .= LJ::html_hidden('mode', 'enmasse');
@@ -406,9 +406,9 @@ body<=
         # no results
         unless ( $interest ) {
             $ret .= "<?h1 $ML{'.nocomms.header'} h1?><?p ";
-            $ret .= BML::ml( '.nocomms.text', { 'int' => $e_int, 'aopts' => qq(href="$LJ::SITEROOT/community/create.bml") } );
+            $ret .= BML::ml( '.nocomms.text', { 'int' => $e_int, 'aopts' => qq(href="$LJ::SITEROOT/community/create") } );
             $ret .= " p?><?h1 $ML{'.nousers.header'} h1?><?p ";
-            $ret .= BML::ml( '.nousers.text', { 'int' => $e_int, 'aopts_manage' => "href='$LJ::SITEROOT/manage/profile/'", 'aopts_int' => "href='$LJ::SITEROOT/interests.bml'" } );
+            $ret .= BML::ml( '.nousers.text', { 'int' => $e_int, 'aopts_manage' => "href='$LJ::SITEROOT/manage/profile/'", 'aopts_int' => "href='$LJ::SITEROOT/interests'" } );
             $ret .= "p?>";
             return $ret;
         } 
@@ -480,9 +480,9 @@ body<=
 
         $ret .= "<h1>" . BML::ml(".users.header", {'interest' => $interest}) . "</h1>\n<p class='interestinfo'>";
         if ($remote) {
-            $ret .= " " . BML::ml('.addint2', {'aopts' => "href='$LJ::SITEROOT/interests.bml?mode=add&amp;intid=$intid'"});
+            $ret .= " " . BML::ml('.addint2', {'aopts' => "href='$LJ::SITEROOT/interests?mode=add&amp;intid=$intid'"});
         }
-        $ret .= " " . BML::ml('.morestuff2', {'aopts' => "href='$LJ::SITEROOT/interests.bml'"}) . "</p>";
+        $ret .= " " . BML::ml('.morestuff2', {'aopts' => "href='$LJ::SITEROOT/interests'"}) . "</p>";
 
         my $us = $int_query->( "userinterests" );
         my @ul = grep { $_
@@ -516,17 +516,17 @@ body<=
 
     if ( LJ::is_enabled('interests-popular') ) {
         $ret .= "<tr valign='top'><td colspan='2'>";
-        $ret .= "<a href=\"interests.bml?view=popular\">$ML{'.interests.viewpop'}</a></td></tr>";
+        $ret .= "<a href=\"interests?view=popular\">$ML{'.interests.viewpop'}</a></td></tr>";
     }
 
     $ret .= "<tr valign='top'><td align='left'>$ML{'.interested.in'}</td>";
-    $ret .= "<td><form method='get' action='interests.bml'>";
+    $ret .= "<td><form method='get' action='interests'>";
     $ret .= LJ::html_text({name => 'int', size => 20}) . "&nbsp;";
     $ret .= LJ::html_submit(undef, $ML{'.interested.btn.find'});
     $ret .= "</form></td></tr>";
 
     if ( LJ::is_enabled('interests-findsim') && $remote && LJ::get_cap($remote, 'findsim') ) {
-        $ret .= "<tr valign='top'><td>$ML{'.interests.findsim'}</td><td><form method='get' action='interests.bml'>";
+        $ret .= "<tr valign='top'><td>$ML{'.interests.findsim'}</td><td><form method='get' action='interests'>";
         $ret .= LJ::html_hidden('mode', 'findsim_do');
         $ret .= LJ::html_text({name => 'user', value => $remote->{'user'}, size => 20}) . "&nbsp;";
         $ret .= LJ::html_submit(undef, $ML{'.interested.btn.find'});
@@ -534,7 +534,7 @@ body<=
     }
 
     $ret .= "<tr valign='top'><td>$ML{'.enmasse.intro'}</td>";
-    $ret .= "<td><form method='get' action='interests.bml'>";
+    $ret .= "<td><form method='get' action='interests'>";
     $ret .= LJ::html_text({name => 'fromuser', size => 20}) . "&nbsp;";
     $ret .= LJ::html_submit(undef, $ML{'.enmasse.btn'});
     $ret .= LJ::html_hidden('mode', 'enmasse');
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/js/commentmanage.js
--- a/htdocs/js/commentmanage.js	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/js/commentmanage.js	Sat Aug 01 14:31:59 2009 +0000
@@ -587,7 +587,7 @@ function createModerationFunction (ae, d
 
         xtr.onreadystatechange = state_callback;
 
-        var postUrl = ae.href.replace(/.+talkscreen\.bml/, "/" + LJ_cmtinfo.journal + "/__rpc_talkscreen");
+        var postUrl = ae.href.replace(/.+talkscreen/, "/" + LJ_cmtinfo.journal + "/__rpc_talkscreen");
 
         //var postUrl = ae.href;
         xtr.open("POST", postUrl + "&jsmode=1", true);
@@ -605,10 +605,10 @@ function setupAjax () {
     var ct = document.links.length;
     for (var i=0; i<ct; i++) {
         var ae = document.links[i];
-        if (ae.href.indexOf("talkscreen.bml") != -1) {
+        if (ae.href.indexOf("talkscreen") != -1) {
             ae.onclick = createModerationFunction(ae, dItemid);
 
-        } else if (ae.href.indexOf("delcomment.bml") != -1) {
+        } else if (ae.href.indexOf("delcomment") != -1) {
 
             var findIDre = /id=(\d+)/;
             var reMatch = findIDre.exec(ae.href);
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/js/contextualhover.js
--- a/htdocs/js/contextualhover.js	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/js/contextualhover.js	Sat Aug 01 14:31:59 2009 +0000
@@ -479,7 +479,7 @@ ContextualPopup.renderPopup = function (
             var vgift = document.createElement("span");
 
             var sendvgift = document.createElement("a");
-            sendvgift.href = window.Site.siteroot + "/shop/vgift.bml?to=" + data.username;
+            sendvgift.href = window.Site.siteroot + "/shop/vgift?to=" + data.username;
             sendvgift.innerHTML = "Send a virtual gift";
 
             vgift.appendChild(sendvgift);
@@ -501,7 +501,7 @@ ContextualPopup.renderPopup = function (
                 var setBan = document.createElement("span");
                 var setBanLink = document.createElement("a");
                 
-                setBanLink.href = window.Site.siteroot + '/manage/banusers.bml';
+                setBanLink.href = window.Site.siteroot + '/manage/banusers';
                 
                 if (data.is_comm) {
                     setBanLink.innerHTML = 'Ban community';
@@ -528,7 +528,7 @@ ContextualPopup.renderPopup = function (
                 // if use banned - show unban link
                 var setUnban = document.createElement("span");
                 var setUnbanLink = document.createElement("a");
-                setUnbanLink.href = window.Site.siteroot + '/manage/banusers.bml';
+                setUnbanLink.href = window.Site.siteroot + '/manage/banusers';
                 setUnbanLink.innerHTML = 'Unban user';
                 setUnban.appendChild(setUnbanLink);
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/js/cprod.js
--- a/htdocs/js/cprod.js	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/js/cprod.js	Sat Aug 01 14:31:59 2009 +0000
@@ -23,7 +23,7 @@ CProd.next = function (evt) {
           });
 
   var req = HTTPReq.getJSON({
-      "url": "/tools/endpoints/cprod.bml",
+      "url": "/tools/endpoints/cprod",
       "method": "GET",
         "data": data,
       "onData": CProd.gotData
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/js/entry.js
--- a/htdocs/js/entry.js	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/js/entry.js	Sat Aug 01 14:31:59 2009 +0000
@@ -144,7 +144,7 @@ function altlogin (e) {
 
     f = document.updateForm;
     if (! f) return false;
-    f.action = 'update.bml?altlogin=1';
+    f.action = 'update?altlogin=1';
     
     if (f.security) {
         f.security.options[3] = null;
@@ -217,7 +217,7 @@ function entryPreview(entryForm) {
 function entryPreview(entryForm) {
     var f=entryForm;
     var action=f.action;
-    f.action='/preview/entry.bml'; 
+    f.action='/preview/entry'; 
     f.target='preview';
     window.open('','preview','width=760,height=600,resizable=yes,status=yes,toolbar=no,location=no,menubar=no,scrollbars=yes');
     f.submit(); 
@@ -354,7 +354,7 @@ function getUserTags(defaultjournal) {
     }
 
     HTTPReq.getJSON({
-        url: "/tools/endpoints/gettags.bml?user=" + user,
+        url: "/tools/endpoints/gettags?user=" + user,
         method: "GET",
         onData: function (data) {
             // disable any InputComplete objects that are already on the tag field
@@ -392,7 +392,7 @@ function changeSecurityOptions(defaultjo
     }
 
     HTTPReq.getJSON({
-        url: "/tools/endpoints/getsecurityoptions.bml?user=" + user,
+        url: "/tools/endpoints/getsecurityoptions?user=" + user,
         method: "GET",
         onData: function (data) {
             if ($('security')) {
@@ -524,7 +524,7 @@ InOb.handleInsertSelect = function () {
     if (selected == 0) {
         return true;
     } else if (selected == 1) {
-        include = 'imgupload.bml';
+        include = 'imgupload';
     } else {
         alert('Unknown index selected');
         return false;
@@ -551,7 +551,7 @@ InOb.handleInsertEmbed = function () {
 
 InOb.handleInsertImage = function () {
     var include;
-    include = '/imgupload.bml';
+    include = '/imgupload';
     onInsertObject(include);
     return true;
 }
@@ -892,7 +892,7 @@ LJDraft.save = function (drafttext, cb) 
 
     HTTPReq.getJSON({
       method: "POST",
-      url: "/tools/endpoints/draft.bml",
+      url: "/tools/endpoints/draft",
       onData: finished,
       onError: function () { LJDraft.saveInProg = false; },
       data: HTTPReq.formEncoded({"saveDraft": drafttext})
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/js/quickreply.js
--- a/htdocs/js/quickreply.js	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/js/quickreply.js	Sat Aug 01 14:31:59 2009 +0000
@@ -131,7 +131,7 @@
         }
 
         var qr_form = xGetElementById('qrform');
-        qr_form.action = Site.siteroot + '/talkpost_do.bml';
+        qr_form.action = Site.siteroot + '/talkpost_do';
         qr_form.submit();
 
         // don't do default form action
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/js/richtext.js
--- a/htdocs/js/richtext.js	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/js/richtext.js	Sat Aug 01 14:31:59 2009 +0000
@@ -117,7 +117,7 @@ function make_user (res, type) {
         img.setAttribute("style", "vertical-align: bottom; border: 0;");
 
         var uinfo_link = document.createElement("a");
-        uinfo_link.setAttribute("href", siteroot + '/userinfo.bml?user=' + res);
+        uinfo_link.setAttribute("href", siteroot + '/userinfo?user=' + res);
         uinfo_link.appendChild(img);
 
         var userlink = document.createTextNode(res);
@@ -132,7 +132,7 @@ function make_user (res, type) {
 
         rng.insertNode(span);
     } else { // ie
-        return "<span class=\"ljuser\" style='white-space: nowrap;'><a href='" + siteroot + "/userinfo.bml?user=" + res + "'><img src='" + siteroot + "/img/userinfo.gif' alt='userinfo' width='17' height='17' style='vertical-align: bottom; border: 0;' /></a><a href='" + siteroot + "/users/" + res + "/'><b>" + res + "</b></a></span> ";
+        return "<span class=\"ljuser\" style='white-space: nowrap;'><a href='" + siteroot + "/userinfo?user=" + res + "'><img src='" + siteroot + "/img/userinfo.gif' alt='userinfo' width='17' height='17' style='vertical-align: bottom; border: 0;' /></a><a href='" + siteroot + "/users/" + res + "/'><b>" + res + "</b></a></span> ";
     }
 }
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/js/rte.js
--- a/htdocs/js/rte.js	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/js/rte.js	Sat Aug 01 14:31:59 2009 +0000
@@ -17,7 +17,7 @@ function LJUser(textArea) {
         var postData = {
             "username" : username
         };
-        var url = window.parent.Site.siteroot + "/tools/endpoints/ljuser.bml";
+        var url = window.parent.Site.siteroot + "/tools/endpoints/ljuser";
 
         var gotError = function(err) {
             alert(err+' '+username);
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/js/widgets/createaccount.js
--- a/htdocs/js/widgets/createaccount.js	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/js/widgets/createaccount.js	Sat Aug 01 14:31:59 2009 +0000
@@ -101,7 +101,7 @@ CreateAccount.checkUsername = function (
     if ($('create_user').value == "") return;
 
     HTTPReq.getJSON({
-        url: "/tools/endpoints/checkforusername.bml?user=" + $('create_user').value,
+        url: "/tools/endpoints/checkforusername?user=" + $('create_user').value,
         method: "GET",
         onData: function (data) {
             if (data.error) {
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/js/widgets/friendinterests.js
--- a/htdocs/js/widgets/friendinterests.js	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/js/widgets/friendinterests.js	Sat Aug 01 14:31:59 2009 +0000
@@ -3,7 +3,7 @@ FriendInterests.init = function () {
 FriendInterests.init = function () {
     FriendInterests.user = $('from_user').value;
     HTTPReq.getJSON({
-        url: "/tools/endpoints/getinterests.bml?user=" + FriendInterests.user,
+        url: "/tools/endpoints/getinterests?user=" + FriendInterests.user,
         onData: FriendInterests.gotInterests,
         onError: function (msg) { }
     });
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/legal/index.bml
--- a/htdocs/legal/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/legal/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -27,9 +27,9 @@ body<=
 
     my $ret = <<PAGE; 
 
-<div class='itemhead'><a href="tos.bml"><?_ml .tos-header _ml?></a></div>
+<div class='itemhead'><a href="tos"><?_ml .tos-header _ml?></a></div>
 <div class='itemdef'><?_ml .tos _ml?></div>
-<div class='itemhead'><a href="privacy.bml"><?_ml .privacy-header _ml?></a></div>
+<div class='itemhead'><a href="privacy"><?_ml .privacy-header _ml?></a></div>
 <div class='itemdef'><?_ml .privacy _ml?></div>
 
 PAGE
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/legal/privacy.bml
--- a/htdocs/legal/privacy.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/legal/privacy.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -22,7 +22,7 @@ body<=
     my $ret;
 
     $ret .= <<PAGE;
-<p>We hate legalese, so we've tried to make ours readable. If you've got any questions, feel free to <a href='$LJ::SITEROOT/support/submit.bml'>ask us</a>, and we'll do our best to answer.</p>
+<p>We hate legalese, so we've tried to make ours readable. If you've got any questions, feel free to <a href='$LJ::SITEROOT/support/submit'>ask us</a>, and we'll do our best to answer.</p>
 
 <p>This privacy statement ("Privacy Policy") covers all websites (such as $LJ::DOMAIN_WEB) owned and operated by $LJ::SITECOMPANY ("we", "us", "our") and all associated services.</p>
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/legal/tos.bml
--- a/htdocs/legal/tos.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/legal/tos.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -23,7 +23,7 @@ body<=
 
     $ret .= <<PAGE;
 <p>We hate legalese, so we've tried to make ours readable. If you've got 
-any questions, feel free to <a href='$LJ::SITEROOT/support/submit.bml'>ask us</a>, and we'll do our best to answer.</p>
+any questions, feel free to <a href='$LJ::SITEROOT/support/submit'>ask us</a>, and we'll do our best to answer.</p>
 
 <h2>Terms of Service</h2>
 
@@ -36,7 +36,7 @@ through the Website, including but not l
 <p>The Website is offered subject to your acceptance, without 
 modification, of all of the terms and conditions contained within, along with all 
 other operating rules, policies (including, without limitation, 
-${LJ::SITENAMESHORT}'s <a href="$LJ::SITEROOT/legal/privacy.bml">Privacy 
+${LJ::SITENAMESHORT}'s <a href="$LJ::SITEROOT/legal/privacy">Privacy 
 Policy</a>) and procedures that may be published from time to time on 
 this Website by us (collectively, the Agreement).</p>
 
@@ -100,7 +100,7 @@ of account or the features available to 
 <h2>III. Privacy Policy</h2>
 
 <p>Your use of the Website is governed by the Privacy Policy, currently 
-located at $LJ::SITEROOT/legal/privacy.bml. </p>
+located at $LJ::SITEROOT/legal/privacy. </p>
 
 
 <h2>IV. Indemnity</h2>
@@ -385,7 +385,7 @@ have no legal or contractual effect.</p>
 
 <h2>XVIII. Reporting Violations</h2>
 
-<p>For instructions on how to report a violation of this Agreement, please see <a href="http://www.dreamwidth.org/support/faqbrowse.bml?faqid=80">How do I report a violation of Dreamwidth's Terms of Service?</a></p>
+<p>For instructions on how to report a violation of this Agreement, please see <a href="http://www.dreamwidth.org/support/faqbrowse?faqid=80">How do I report a violation of Dreamwidth's Terms of Service?</a></p>
 
 
 <h2>XIX. Creative Commons</h2>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/login.bml
--- a/htdocs/login.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/login.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -50,7 +50,7 @@
     my $want_success_redirect = sub {
         if ($POST{returnto}) {
             # this passes in the URI of the page to redirect to on success, eg:
-            # /manage/profile/index.bml?authas=test or whatever
+            # /manage/profile/index?authas=test or whatever
             my $uri = $POST{returnto};
             if ($uri =~ /^\//) {
                 $uri = $LJ::SITEROOT . $uri;
@@ -103,7 +103,7 @@
             $body .= "</div>\n";
 
         } elsif (LJ::did_post() && $POST{'action:logout'}) {
-            my $url = $old_remote ? "$LJ::SITEROOT/logout.bml?user=" . $old_remote->user : "$LJ::SITEROOT/logout.bml";
+            my $url = $old_remote ? "$LJ::SITEROOT/logout?user=" . $old_remote->user : "$LJ::SITEROOT/logout";
             return BML::redirect($url);
         }
 
@@ -124,7 +124,7 @@
             $body .= "<?p " . BML::ml(".loggedin.text2",
                                       { 'username' => LJ::ljuser($remote)} ) . " p?>\n";
             if ($remote->is_identity && !$remote->is_validated) {
-                $body .= "<?warningbar " . BML::ml('.loggedin.openidemail', { aopts1 => "href='$LJ::SITEROOT/changeemail.bml'", aopts2 => "href='$LJ::SITEROOT/register.bml'" }) . " warningbar?>";
+                $body .= "<?warningbar " . BML::ml('.loggedin.openidemail', { aopts1 => "href='$LJ::SITEROOT/changeemail'", aopts2 => "href='$LJ::SITEROOT/register'" }) . " warningbar?>";
             }
             $body .= "<br />\n";
 
@@ -132,7 +132,7 @@
                 $body .= "<div style='float: left; padding: 5px 10px 0px 10px;'>";
                 $body .= "<img src='/img/silk/profile/post.png'></div>\n";
                 $body .= "<div style='margin-left: 36px;'>";
-                $body .= "<?h2 <a href='$LJ::SITEROOT/update.bml'>";
+                $body .= "<?h2 <a href='$LJ::SITEROOT/update'>";
                 $body .= "$ML{'.loggedin.suggesthead1'}</a> h2?>\n";
                 $body .= "$ML{'.loggedin.suggest1'}<br />&nbsp;\n";
                 $body .= "</div>\n";
@@ -146,7 +146,7 @@
             $body .= "$ML{'.loggedin.suggest2'}<br />&nbsp;</div>\n";
             $body .= "<br />\n";
 
-            $body .= "<form action='login.bml$getextra' method='post' id='login'>\n";
+            $body .= "<form action='login$getextra' method='post' id='login'>\n";
             $body .= LJ::form_auth();
             $body .= "<?h2 $ML{'.login.changelog'} h2?>";
             $body .= "<table cellpadding='3' style='width: 300px; background-color: #ededed; border: 1px solid #aaa'>\n";
@@ -203,7 +203,7 @@
             $body .= "<div class='login-create-account'>\n";
             $body .= "<hr class='hr' />\n";
             $body .= "<h4>$ML{'.createaccount.header'}</h4>\n";
-            $body .= "<form action='<?siteroot?>/create.bml' method='get'><input type='submit' value='$ML{'.createaccount.button'}' class='create-account' /></form>\n";
+            $body .= "<form action='<?siteroot?>/create' method='get'><input type='submit' value='$ML{'.createaccount.button'}' class='create-account' /></form>\n";
             $body .= "<ul>\n";
             $body .= "<li>$ML{'.createaccount.whylogin.benefit1'}</li>";
             $body .= "<li>$ML{'.createaccount.whylogin.benefit2'}</li>";
@@ -278,7 +278,7 @@
 
             if (! $u) {
                 my $euser = LJ::eurl($user);
-                push @errors, [ unknown_user => BML::ml('.error.notuser', { 'aopts' => "href='$LJ::SITEROOT/create.bml?user=$euser'" })]
+                push @errors, [ unknown_user => BML::ml('.error.notuser', { 'aopts' => "href='$LJ::SITEROOT/create?user=$euser'" })]
                     unless $u;
             } else {
                 push @errors, [ purged_user => "$ML{'error.purged.text'}" ] if $u->is_expunged;
@@ -314,7 +314,7 @@
                 if ($chal_opts->{'expired'}) {
                     push @errors, [ expired_challenge => $ML{'error.expiredchal'}];
                 } else {
-                    push @errors, [ bad_password => BML::ml( 'error.badpassword2', { aopts => "href='$LJ::SITEROOT/lostinfo.bml'" } ) ];
+                    push @errors, [ bad_password => BML::ml( 'error.badpassword2', { aopts => "href='$LJ::SITEROOT/lostinfo'" } ) ];
                 }
             }
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/logout.bml
--- a/htdocs/logout.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/logout.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -70,7 +70,7 @@
             {
                 return BML::redirect($POST{ret_fail} . LJ::eurl('incorrect_sessid'));
             }
-            $body .= "<form action='logout.bml' method='post'>";
+            $body .= "<form action='logout' method='post'>";
             $body .= LJ::html_hidden('ret', $GET{'ret'}) if $GET{'ret'};
             $body .= LJ::html_hidden("user", $u->{'user'},
                                      "sessid", $u->{'_session'}->{'sessid'});
@@ -90,7 +90,7 @@
                                                      "userid=$u->{'userid'} AND timeexpire > UNIX_TIMESTAMP() ".
                                                      "AND sessid <> $curid");
             if (@$sessions) {
-                $body .= "<form method='post' action='logout.bml'>";
+                $body .= "<form method='post' action='logout'>";
                 $body .= LJ::html_hidden("action:killall", '1');
                 $body .= "<?h1 $ML{'.killall.head'} h1?><?p $ML{'.killall.text'} ";
                 $body .= "<blockquote><input type='submit' value='$ML{'.killall.btn'}'></blockquote> p?></form>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/lostinfo.bml
--- a/htdocs/lostinfo.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/lostinfo.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -20,7 +20,7 @@ body<=
 #        $ret .= "<?h1 $ML{'.title'} h1?>\n";
         $ret .= "<?h1 $ML{'.recaptcha.title'} h1?>\n";
 
-        $ret .= "<form action='lostinfo.bml' method='post'>\n";
+        $ret .= "<form action='lostinfo' method='post'>\n";
 
         if (LJ::is_enabled("recaptcha")) {
             my $c = Captcha::reCAPTCHA->new;
@@ -149,11 +149,11 @@ body<=
         # register an auth action for them to reset their password
         my $aa = LJ::register_authaction($u->{'userid'}, "reset_password", $email);
         $body = BML::ml('/lostinfo_do.bml.lostpasswordmail.reset', {
-                            lostinfolink => "$LJ::SITEROOT/lostinfo.bml",
+                            lostinfolink => "$LJ::SITEROOT/lostinfo",
                             sitename => $LJ::SITENAME,
                             username => $u->{user},
                             emailadr => $u->email_raw,
-                            resetlink => "$LJ::SITEROOT/changepassword.bml?auth=$aa->{aaid}.$aa->{authcode}",
+                            resetlink => "$LJ::SITEROOT/changepassword?auth=$aa->{aaid}.$aa->{authcode}",
                         });
         $body .= "\n\n" .BML::ml('/lostinfo_do.bml.lostpasswordmail.part3',
                         { 'remoteip' => BML::get_remote_host() . " (" . BML::get_remote_ip() . ")" });
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/banusers.bml
--- a/htdocs/manage/banusers.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/banusers.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -69,13 +69,13 @@ body<=
 
     my $ret;
 
-    $ret .= "<form action='$LJ::SITEROOT/manage/banusers.bml' method='get'>";
+    $ret .= "<form action='$LJ::SITEROOT/manage/banusers' method='get'>";
     $ret .= LJ::make_authas_select($remote, { authas => $GET{authas} });
     $ret .= "</form>";
 
     $ret .= "<div style='margin-top: 20px;'>$submit_msg</div>";
 
-    $ret .= "<form action='$LJ::SITEROOT/manage/banusers.bml$getextra' method='post' name='ban_users_form'>";
+    $ret .= "<form action='$LJ::SITEROOT/manage/banusers$getextra' method='post' name='ban_users_form'>";
     $ret .= LJ::form_auth();
 
     # ban users
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/circle/add.bml
--- a/htdocs/manage/circle/add.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/circle/add.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -29,7 +29,7 @@
     unless ($user && $userid)
     {
         $title = $ML{'Error'};
-        $body = BML::ml('.error2.text2', {'aopts' => "href='$LJ::SITEROOT/manage/circle/edit.bml'"});
+        $body = BML::ml('.error2.text2', {'aopts' => "href='$LJ::SITEROOT/manage/circle/edit'"});
         return;
     }
 
@@ -96,11 +96,11 @@
 
         $body .= "<?p " . BML::ml('.add.text2', { 'ljuser' => LJ::ljuser($u) }) . " p?>";
         $body .= "<ul><li><a href='" . $remote->journal_base . "/read'>$ML{'.add.next.friends'}</a></li>";
-        $body .= "<li><a href='$LJ::SITEROOT/manage/circle/edit.bml'>$ML{'.add.next.modify'}</a></ul>";
+        $body .= "<li><a href='$LJ::SITEROOT/manage/circle/edit'>$ML{'.add.next.modify'}</a></ul>";
         return;
     }
 
-    $body .= "<form method='post' name='editFriends' action='add.bml'>\n";
+    $body .= "<form method='post' name='editFriends' action='add'>\n";
     $body .= LJ::form_auth();
     $body .= LJ::html_hidden(mode  => 'add',
                              user  => $user,
@@ -127,14 +127,14 @@
 
         # Is this account redirected?
         } elsif ( $u->is_redirect && $u->prop('renamedto') ) {
-            return BML::redirect("$LJ::SITEROOT/manage/circle/add.bml?user=" . $u->prop('renamedto'));
+            return BML::redirect("$LJ::SITEROOT/manage/circle/add?user=" . $u->prop('renamedto'));
 
         } elsif ( $u->is_community ) {
             $windowtitle = BML::ml('.confirm.title.community'.$add, {'user'=> $user });
             $title = BML::ml('.confirm.title.community'.$add, {'icon'=> $icon, 'user'=> $user });
             unless ( $remote->member_of( $u ) ) {
                 if ( $remote->is_person ) {
-                    $body .= "<?p " . BML::ml( '.confirm.text1.community2', {'aopts' => "href='$LJ::SITEROOT/community/join.bml?comm=$user'"} ) . " p?>";
+                    $body .= "<?p " . BML::ml( '.confirm.text1.community2', {'aopts' => "href='$LJ::SITEROOT/community/join?comm=$user'"} ) . " p?>";
                 } else {
                     $body .= "<?p $ML{'.confirm.text1.community2.openid'} p?>";
                 }
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/circle/edit.bml
--- a/htdocs/manage/circle/edit.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/circle/edit.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -24,7 +24,7 @@ body<=
     my $u = LJ::get_authas_user($authas);
     return LJ::bad_input($ML{'error.invalidauth'})
         unless $u;
-    return BML::redirect("$LJ::SITEROOT/community/members.bml?authas=$u->{'user'}")
+    return BML::redirect("$LJ::SITEROOT/community/members?authas=$u->{'user'}")
         if $u->is_community;
     return LJ::bad_input($ML{'.error.badjournaltype'})
         unless $u->is_person || $u->is_identity;
@@ -46,7 +46,7 @@ body<=
         my $us = LJ::load_userids( @trusted_userids, keys %$watch_list, @trusted_by_userids, @watched_by_userids, @member_of_userids );
         my @nonperson_userids;
 
-        $ret .= "<form method='post' name='editFriends' action='edit.bml$getextra'>\n";
+        $ret .= "<form method='post' name='editFriends' action='edit$getextra'>\n";
         $ret .= LJ::form_auth();
 
         # people table
@@ -161,11 +161,11 @@ body<=
 
                     if ( $is_member_of_userid{$uid} ) {
                         $m_text = "Y";
-                        $jl_url = "community/leave.bml";
+                        $jl_url = "community/leave";
                         $jl_text = $ML{'.comm.leave'};
                     } else {
                         $m_text = "N";
-                        $jl_url = "community/join.bml";                                                     
+                        $jl_url = "community/join";                                                     
                         $jl_text = $ML{'.comm.join'};
                      }
 
@@ -195,7 +195,7 @@ body<=
 
         ### add friends
         $ret .= "<?h2 $ML{'.addrelationships.head'} h2?>\n";
-        $ret .= "<?p " . BML::ml('.addrelationships.text', { sitename => $LJ::SITENAMESHORT, aopts => "href='$LJ::SITEROOT/manage/circle/invite.bml'" }) . " p?>";
+        $ret .= "<?p " . BML::ml('.addrelationships.text', { sitename => $LJ::SITENAMESHORT, aopts => "href='$LJ::SITEROOT/manage/circle/invite'" }) . " p?>";
 
         $ret .= "<br />";
         $ret .= "<div align='center'><table id='addfriends'>\n";
@@ -375,8 +375,8 @@ body<=
         $ret .= "<?p $ML{'.success.fromhere'} p?>";
         $ret .= "<ul>";
         $ret .= "<li><a href='" . $u->journal_base . "/read'>$ML{'.success.friendspage'}</a></li>";
-        $ret .= "<li><a href='$LJ::SITEROOT/manage/circle/edit.bml'>$ML{'.success.editfriends'}</a></li>";
-        $ret .= "<li><a href='$LJ::SITEROOT/manage/circle/editfilters.bml'>$ML{'.success.editgroups'}</a></li>";
+        $ret .= "<li><a href='$LJ::SITEROOT/manage/circle/edit'>$ML{'.success.editfriends'}</a></li>";
+        $ret .= "<li><a href='$LJ::SITEROOT/manage/circle/editfilters'>$ML{'.success.editgroups'}</a></li>";
         $ret .= "</ul>";
 
         return $ret;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/circle/editfilters.bml
--- a/htdocs/manage/circle/editfilters.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/circle/editfilters.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -87,12 +87,12 @@
     my $trusted_us = LJ::load_userids( keys %$trust_list );
 
     # authas switcher form
-    $body .= "<form method='get' action='editfilters.bml'>\n";
+    $body .= "<form method='get' action='editfilters'>\n";
     $body .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} }) . "\n";
     $body .= "</form>\n\n";
 
     $body .= "<?p $ML{'.text'} p?><?p $ML{'.text.sec'} p?><p>";
-    $body .= "<form method='post' name='fg' action='editfilters.bml$getextra'>";
+    $body .= "<form method='post' name='fg' action='editfilters$getextra'>";
     $body .= LJ::form_auth();
     $body .= "<input type='hidden' name='mode' value='save' />";
     for ( my $i = 1; $i <= 60; $i++ ) {
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/circle/filter.bml
--- a/htdocs/manage/circle/filter.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/circle/filter.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -50,7 +50,7 @@
     
     
     unless ($res{'frgrp_maxnum'}) {
-        $body = "<?h1 $ML{'.error.nogroups.header'} h1?><?p " . BML::ml('.error.nogroups2', {'aopts' => "href='$LJ::SITEROOT/manage/circle/editfilters.bml'"}) . " p?>";
+        $body = "<?h1 $ML{'.error.nogroups.header'} h1?><?p " . BML::ml('.error.nogroups2', {'aopts' => "href='$LJ::SITEROOT/manage/circle/editfilters'"}) . " p?>";
         return;
     }
     
@@ -65,7 +65,7 @@
     }
     
     $body .= "<?h1 $ML{'.select.header'} h1?><?p $ML{'.select'} p?>";
-    $body .= "<form method='post' style='display: inline' action='filter.bml'>\n";
+    $body .= "<form method='post' style='display: inline' action='filter'>\n";
     $body .= LJ::html_hidden("user", $remote->{'user'},
                              "mode", "view",
                              "type", "mergefilters");
@@ -79,7 +79,7 @@
 
     $body .= LJ::html_submit($ML{'.submit'});
     $body .= " <input type='reset' value=\"$ML{'.reset'}\"></div>";
-    $body .= "<?p " . BML::ml('.editgroups', { 'link' => "<a href='editfilters.bml'>$ML{'/manage/circle/editfilters.bml.title'}</a>" }) . " p?>";
+    $body .= "<?p " . BML::ml('.editgroups', { 'link' => "<a href='editfilters'>$ML{'/manage/circle/editfilters.bml.title'}</a>" }) . " p?>";
     $body .= "</form>";
     
     return;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/circle/index.bml
--- a/htdocs/manage/circle/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/circle/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -20,19 +20,19 @@ _code?>
 <?p <?_ml .about _ml?> p?>
 <table cellspacing='2' cellpadding='5' border='0'>
 <tr>
-  <td class='name'><a href="<?siteroot?>/manage/circle/invite.bml"><?_ml .invite.title _ml?></a></td>
+  <td class='name'><a href="<?siteroot?>/manage/circle/invite"><?_ml .invite.title _ml?></a></td>
   <td><?_code BML::ml('.invite.about2', { sitename => $LJ::SITENAMESHORT }); _code?></td>
 </tr>
 <tr>
-  <td class='name'><a href="<?siteroot?>/manage/circle/edit.bml"><?_ml /manage/circle/edit.bml.title3 _ml?></a></td>
+  <td class='name'><a href="<?siteroot?>/manage/circle/edit"><?_ml /manage/circle/edit.bml.title3 _ml?></a></td>
   <td><?_ml .edit.about _ml?></td>
 </tr>
 <tr>
-  <td class='name'><a href="<?siteroot?>/manage/circle/editfilters.bml"><?_ml /manage/circle/editfilters.bml.title2 _ml?></a></td>
+  <td class='name'><a href="<?siteroot?>/manage/circle/editfilters"><?_ml /manage/circle/editfilters.bml.title2 _ml?></a></td>
   <td><?_ml .editgroups.about _ml?> <?_ml .filter _ml?></td>
 </tr>
 <tr>
-  <td class='name'><a href="<?siteroot?>/manage/circle/filter.bml"><?_ml /manage/circle/filter.bml.title2 _ml?></a></td>
+  <td class='name'><a href="<?siteroot?>/manage/circle/filter"><?_ml /manage/circle/filter.bml.title2 _ml?></a></td>
   <td><?_ml .filter.about _ml?></td>
 </tr>
 </table>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/circle/invite.bml
--- a/htdocs/manage/circle/invite.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/circle/invite.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -22,7 +22,7 @@
 
     my %ierr;
     my $email = $POST{invite_email} || '';
-    my $create_link = ($LJ::USE_SSL ? $LJ::SSLROOT : $LJ::SITEROOT) . "/create.bml?from=$u->{user}";
+    my $create_link = ($LJ::USE_SSL ? $LJ::SSLROOT : $LJ::SITEROOT) . "/create?from=$u->{user}";
 
     
     my @invitecodes;
@@ -180,7 +180,7 @@
 
        # Over rate limit
        } else {
-           $body = BML::ml('.error.overratelimit', {'sitename' => $LJ::SITENAMESHORT, 'aopts' => "href='$LJ::SITEROOT/manage/circle/invite.bml'"});
+           $body = BML::ml('.error.overratelimit', {'sitename' => $LJ::SITENAMESHORT, 'aopts' => "href='$LJ::SITEROOT/manage/circle/invite'"});
            return;
        }
     }
@@ -190,7 +190,7 @@
         $body .= $findfriends_intro;
     } elsif ( $LJ::USE_ACCT_CODES ) {
         my $unusedinvites = DW::InviteCodes->unused_count( userid => $u->id );
-        $body .= "<?p " . BML::ml('.intro.code2', { aopts => "href='$LJ::SITEROOT/manage/invitecodes.bml'" , num => $unusedinvites } ) . " p?>";
+        $body .= "<?p " . BML::ml('.intro.code2', { aopts => "href='$LJ::SITEROOT/manage/invitecodes'" , num => $unusedinvites } ) . " p?>";
     } else {
         $body .= "<?p " . BML::ml('.intro', { aopts => "href='$create_link'", createlink => $create_link} ) . " p?>";
     }
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/domain.bml
--- a/htdocs/manage/domain.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/domain.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -95,7 +95,7 @@ body<=
     my $ret;
 
     # user switcher
-    $ret .= "<form action='$LJ::SITEROOT/manage/domain.bml' method='get'>\n";
+    $ret .= "<form action='$LJ::SITEROOT/manage/domain' method='get'>\n";
     $ret .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} });
     $ret .= "</form>\n\n";
 
@@ -103,7 +103,7 @@ body<=
     ### JOURNAL DOMAIN OPTIONS
     ###
 
-    $ret .= "<form method='post' action='/manage/domain.bml?authas=$authas'>\n";
+    $ret .= "<form method='post' action='/manage/domain?authas=$authas'>\n";
     $ret .= LJ::form_auth();
 
     my $has_cap = LJ::get_cap($u, 'domainmap');
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/emailpost.bml
--- a/htdocs/manage/emailpost.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/emailpost.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -214,7 +214,7 @@ body<=
                     <a name="pgp"></a>
                     <fieldset><legend>$ML{'.help.advanced.pgp.header'} <img src="/img/key.gif" width="16" height="16"></legend>
                     <?p } . BML::ml('.help.advanced.pgp.text1', {'pgp' => "<b>PGP</b>"}) . qq{ p?>
-                    <?p } . BML::ml('.help.advanced.pgp.text2', {'aopts' => "href='$LJ::SITEROOT/manage/pubkey.bml'"}) . qq{ p?>
+                    <?p } . BML::ml('.help.advanced.pgp.text2', {'aopts' => "href='$LJ::SITEROOT/manage/pubkey'"}) . qq{ p?>
                     <?emailex
                     $to_pgp
                     $from_pgp
@@ -253,7 +253,7 @@ body<=
             }
             $ret .= '</li>';
         }
-        $ret .= "<li><a href='emailpost.bml'>$ML{'.help.manage.header'}</a></li>";
+        $ret .= "<li><a href='emailpost'>$ML{'.help.manage.header'}</a></li>";
         $ret .= '</ul>';
         $ret .= '<hr /><br />' if $type;
 
@@ -333,7 +333,7 @@ body<=
         my $ret;
         $ret .= "<?h1 $ML{'.success.header'} h1?>";
         $ret .= "<?p $ML{'.success.saved'} p?>";
-        $ret .= "<?p " . BML::ml('.success.info', {'aopts' => "href='$LJ::SITEROOT/manage/emailpost.bml?mode=help'"}) . " p?>";
+        $ret .= "<?p " . BML::ml('.success.info', {'aopts' => "href='$LJ::SITEROOT/manage/emailpost?mode=help'"}) . " p?>";
         if ($LJ::HELPURL{emailpost}) {
             $ret .= "<?h1 $ML{'.instructions.header'} h1?>";
             $ret .= "<?p FIXME: link to helpurl p?>";
@@ -366,7 +366,7 @@ body<=
         sort { $trusted->{$a}->{'sortorder'} <=> $trusted->{$b}->{'sortorder'} } keys %$trusted;
     my @userpics = @{ $res->{'pickws'} };
     
-    $ret .= "<?p " . BML::ml('.intro', {'aopts' => "href='$LJ::SITEROOT/manage/emailpost.bml?mode=help'"}) . " p?><br />";
+    $ret .= "<?p " . BML::ml('.intro', {'aopts' => "href='$LJ::SITEROOT/manage/emailpost?mode=help'"}) . " p?><br />";
 
     unless (LJ::get_cap($u, 'emailpost')) {
         $ret .= $ML{'.sorry.acct'};
@@ -375,7 +375,7 @@ body<=
 
     $ret .= "<?h1 $ML{'.addresses.header'} h1?>";
     $ret .= "<?p $ML{'.addresses.text'} p?>";
-    $ret .= "<form method='post' action='emailpost.bml'>\n";
+    $ret .= "<form method='post' action='emailpost'>\n";
     $ret .= LJ::form_auth();
     $ret .= "<div style='margin-left:40px;'>";
     $ret .= "<table border=\"0\"><tr><td>$ML{'.addresses.table.address'}</td><td>$ML{'.addresses.table.errors'}</td></tr>";
@@ -400,7 +400,7 @@ body<=
     $ret .= '</div><br />';
 
     $ret .= "<?h1 $ML{'.settings.header'} h1?>";
-    $ret .= "<?p " . BML::ml('.settings.text', {'aopts' => "href='$LJ::SITEROOT/manage/emailpost.bml?mode=help'"}) . " p?>";
+    $ret .= "<?p " . BML::ml('.settings.text', {'aopts' => "href='$LJ::SITEROOT/manage/emailpost?mode=help'"}) . " p?>";
     $ret .= "<div style='margin-left:40px;'>";
     $ret .= "<table cellspacing='0' class='settings'>";
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/externalaccount.bml
--- a/htdocs/manage/externalaccount.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/externalaccount.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -7,7 +7,7 @@ use strict;
     
     if ($LJ::USE_SSL && ! $LJ::IS_SSL && $FORM{ssl} ne "no") {
         my $getextra = $GET{acctid} ? "?acctid=" . LJ::eurl($GET{acctid}) : "";
-        return BML::redirect("$LJ::SSLROOT/manage/externalaccount.bml$getextra");
+        return BML::redirect("$LJ::SSLROOT/manage/externalaccount$getextra");
     }
 
     BML::set_language_scope('/manage/externalaccount.bml');
@@ -53,7 +53,7 @@ use strict;
 
     my $body .= qq {
       <div id='settings_page'>
-        <form action="/manage/externalaccount.bml" method="post" id="createacct">
+        <form action="/manage/externalaccount" method="post" id="createacct">
           <div id='xpost_add'>
             <table class='setting_table'>
     };
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/index.bml
--- a/htdocs/manage/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -68,19 +68,19 @@ body<=
     my $ret;
 
     my $remote = LJ::get_remote();
-    return BML::ml('.login2', {'aopts' => "href='$LJ::SITEROOT/login.bml?ret=1'"}) unless $remote;
+    return BML::ml('.login2', {'aopts' => "href='$LJ::SITEROOT/login?ret=1'"}) unless $remote;
 
     my $u = $BMLCodeBlock::u;
     return LJ::bad_input($ML{'error.invalidauth'})
         unless $u;
 
 
-    $ret .= "</a><form action='/manage/index.bml' method='get'>\n";
+    $ret .= "</a><form action='/manage/index' method='get'>\n";
     $ret .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} });
     $ret .= "</form>\n\n";
 
     my $status = $u->{'status'} eq "A" ? $ML{'.youraccount.validated.yes'} :
-        "<a href='$LJ::SITEROOT/register.bml?authas=$u->{user}'>$ML{'.youraccount.validated.no'}</a>";
+        "<a href='$LJ::SITEROOT/register?authas=$u->{user}'>$ML{'.youraccount.validated.no'}</a>";
     my $is_identity_no_email = $u->is_identity && !$u->email_raw;
 
     $ret .= "<?h1 $ML{'.youraccount.header'} h1?><div style='margin-left: 2em;'>";
@@ -88,7 +88,7 @@ body<=
     $ret .= "<tr><th align='left'>$ML{'.youraccount.user'}</th><td>" . LJ::ljuser($u) . "</td></tr>";
     $ret .= "<tr><th align='left'>$ML{'.youraccount.name'}</th><td>" . LJ::ehtml($u->{'name'}) . "</td></tr>";
     if ($is_identity_no_email) {
-        $ret .= "<tr><th align='left'>$ML{'.youraccount.email'}</th><td><a href='$LJ::SITEROOT/changeemail.bml'>$ML{'.youraccount.setemail'}</a></td></tr>";
+        $ret .= "<tr><th align='left'>$ML{'.youraccount.email'}</th><td><a href='$LJ::SITEROOT/changeemail'>$ML{'.youraccount.setemail'}</a></td></tr>";
     } else {
         $ret .= "<tr><th align='left'>$ML{'.youraccount.email'}</th><td>" . $u->email_raw . " " . BML::ml('.youraccount.validated', {'status' => "<em>$status</em>"}) . "</td></tr>";
     }
@@ -113,7 +113,7 @@ list<=
     my $u = $BMLCodeBlock::u;
     return '' if $u->is_identity;
 
-    return '<li><a href="/changepassword.bml" title="<?_ml .information.changepass.about _ml?>"><?_ml .information.changepass _ml?></a></li>';
+    return '<li><a href="/changepassword" title="<?_ml .information.changepass.about _ml?>"><?_ml .information.changepass _ml?></a></li>';
 _code?>
 
 <?_code
@@ -124,10 +124,10 @@ _code?>
     my $u = $BMLCodeBlock::u;
     return '' if $u->is_identity;
 
-    return '<li><a href="./emailpost.bml" title="<?_ml .information.mobilepost.about _ml?>"><?_ml .information.mobilepost _ml?></a></li>';
+    return '<li><a href="./emailpost" title="<?_ml .information.mobilepost.about _ml?>"><?_ml .information.mobilepost _ml?></a></li>';
 _code?>
 
-<li><a href="./pubkey.bml" title="<?_ml .information.pubkey.about _ml?>"><?_ml .information.pubkey _ml?></a></li>
+<li><a href="./pubkey" title="<?_ml .information.pubkey.about _ml?>"><?_ml .information.pubkey _ml?></a></li>
 
 <?_code
     my $remote = LJ::get_remote();
@@ -139,9 +139,9 @@ _code?>
     }
 _code?>
 
-<li><a href="/schools/manage.bml" title="<?_ml .schools _ml?>"><?_ml .schools _ml?></a></li>
-<li><a href="/manage/logins.bml" title="<?_ml .manage.logins _ml?>"><?_ml .manage.logins _ml?></a></li>
-<li><a href="/accountstatus.bml<?authas?>" title="<?_ml .information.status.about _ml?>">
+<li><a href="/schools/manage" title="<?_ml .schools _ml?>"><?_ml .schools _ml?></a></li>
+<li><a href="/manage/logins" title="<?_ml .manage.logins _ml?>"><?_ml .manage.logins _ml?></a></li>
+<li><a href="/accountstatus<?authas?>" title="<?_ml .information.status.about _ml?>">
 <?_code
 {
     my $remote = LJ::get_remote();
@@ -164,17 +164,17 @@ list<=
     my $authas = ref $u ? "?authas=$u->{user}" : "";
     my $authas_sep = $authas ? "&" : "?";
     my $customization;
-    $customization .= "<li><a href='/customize/index.bml$authas' title='$ML{'.customization.customize.about'}'><?_ml .customization.customize _ml?></a></li>";
+    $customization .= "<li><a href='/customize/index$authas' title='$ML{'.customization.customize.about'}'><?_ml .customization.customize _ml?></a></li>";
     if ($u->{'stylesys'} == 2) {
-        $customization .= "<li><a href='/customize/advanced/index.bml$authas' title='$ML{'.customization.advanced.about'}'><?_ml .customization.advanced _ml?></a></li>";
-        $customization .= "<li><a href='$LJ::SITEROOT/customize/options.bml$authas${authas_sep}group=linkslist' title='$ML{'.customization.links.about'}'><?_ml .customization.links _ml?></a></li>";
+        $customization .= "<li><a href='/customize/advanced/index$authas' title='$ML{'.customization.advanced.about'}'><?_ml .customization.advanced _ml?></a></li>";
+        $customization .= "<li><a href='$LJ::SITEROOT/customize/options$authas${authas_sep}group=linkslist' title='$ML{'.customization.links.about'}'><?_ml .customization.links _ml?></a></li>";
     }
     return $customization;
 }
 _code?>
-<li><a href="/customize/options.bml<?authas?>" title="<?_ml .customization.moodtheme.set _ml?>"><?_ml .customization.moodtheme.set.header _ml?></a></li>
-<li><a href="./moodthemes.bml<?authas?>" title="<?_ml .customization.moodtheme.editor _ml?>"><?_ml .customization.moodtheme.editor.header _ml?></a></li>
-<li><a href="/customize/options.bml<?authas?>" title="<?_ml .customization.navstrip _ml?>"><?_ml .customization.navstrip _ml?></a></li>
+<li><a href="/customize/options<?authas?>" title="<?_ml .customization.moodtheme.set _ml?>"><?_ml .customization.moodtheme.set.header _ml?></a></li>
+<li><a href="./moodthemes<?authas?>" title="<?_ml .customization.moodtheme.editor _ml?>"><?_ml .customization.moodtheme.editor.header _ml?></a></li>
+<li><a href="/customize/options<?authas?>" title="<?_ml .customization.navstrip _ml?>"><?_ml .customization.navstrip _ml?></a></li>
 <=list
 block?>
 
@@ -188,17 +188,17 @@ list<=
     my $u = $BMLCodeBlock::u;
     return '' if $u->is_identity;
 
-    return '<li><a href="/editjournal.bml" title="<?_ml .entries.edit.about _ml?>"><?_ml /editjournal.bml.title _ml?></a></li>';
+    return '<li><a href="/editjournal" title="<?_ml .entries.edit.about _ml?>"><?_ml /editjournal.bml.title _ml?></a></li>';
 _code?>
 
-<li><a href="/tools/memories.bml<?authas?>" title="<?_ml .entries.memories.about _ml?>"><?_ml /tools/memories.bml.title.memorable _ml?></a></li>
+<li><a href="/tools/memories<?authas?>" title="<?_ml .entries.memories.about _ml?>"><?_ml /tools/memories.bml.title.memorable _ml?></a></li>
 
 <?_code
     my $u = $BMLCodeBlock::u;
     return '' if $u->is_identity;
     return '' unless LJ::is_enabled('tags');
     my $authas = $BMLCodeBlock::authas;
-    return qq(<li><a href="/manage/tags.bml$authas" title="<?_ml .entries.tags.about _ml?>"><?_ml /manage/tags.bml.title2 _ml?></a></li>);
+    return qq(<li><a href="/manage/tags$authas" title="<?_ml .entries.tags.about _ml?>"><?_ml /manage/tags.bml.title2 _ml?></a></li>);
 
 _code?>
 <=list
@@ -216,7 +216,7 @@ header=><?_ml .userpics.header _ml?>
 header=><?_ml .userpics.header _ml?>
 about=><?_ml .userpics        _ml?>
 list<=
-<li><a href="/editpics.bml<?authas?>"><?_ml .userpics.edit.about _ml?></a></li>
+<li><a href="/editpics<?authas?>"><?_ml .userpics.edit.about _ml?></a></li>
 <=list
 block?>
 
@@ -224,10 +224,10 @@ header=><?_ml .friends.header _ml?>
 header=><?_ml .friends.header _ml?>
 about=><?_ml .friends        _ml?>
 list<=
-<li><a href="/manage/circle/edit.bml" title="<?_ml .friends.edit.about _ml?>"><?_ml /manage/circle/edit.bml.title2 _ml?></a></li>
-<li><a href="/manage/circle/editfilters.bml" title="<?_ml .friends.groups.about _ml?>"><?_ml /manage/circle/editfilters.bml.title2 _ml?></a></li>
-<li><a href="/manage/circle/filter.bml" title="<?_ml .friends.filter.about _ml?>"><?_ml .friends.filter _ml?></a></li>
-<li><a href="/manage/invitecodes.bml" title="<?_ml .invites.manage.about _ml?>"><?_ml .invites.manage _ml?></a></li>
+<li><a href="/manage/circle/edit" title="<?_ml .friends.edit.about _ml?>"><?_ml /manage/circle/edit.bml.title2 _ml?></a></li>
+<li><a href="/manage/circle/editfilters" title="<?_ml .friends.groups.about _ml?>"><?_ml /manage/circle/editfilters.bml.title2 _ml?></a></li>
+<li><a href="/manage/circle/filter" title="<?_ml .friends.filter.about _ml?>"><?_ml .friends.filter _ml?></a></li>
+<li><a href="/manage/invitecodes" title="<?_ml .invites.manage.about _ml?>"><?_ml .invites.manage _ml?></a></li>
 <=list
 block?>
 
@@ -240,9 +240,9 @@ header=><?_ml .communities.header _ml?>
 header=><?_ml .communities.header _ml?>
 about=><?_ml .communities        _ml?>
 list<=
-<li><a href="/community/create.bml" title="<?_ml .communities.create.about _ml?>"><?_ml /community/create.bml.title _ml?></a></li>
-<li><a href="/community/manage.bml" title="<?_ml .communities.manage.about _ml?>"><?_ml /community/manage.bml.title2 _ml?></a></li>
-<li><a href="/manage/invites.bml" title="<?_ml .communities.invites.about _ml?>"><?_ml /manage/invites.bml.title _ml?></a></li>
+<li><a href="/community/create" title="<?_ml .communities.create.about _ml?>"><?_ml /community/create.bml.title _ml?></a></li>
+<li><a href="/community/manage" title="<?_ml .communities.manage.about _ml?>"><?_ml /community/manage.bml.title2 _ml?></a></li>
+<li><a href="/manage/invites" title="<?_ml .communities.invites.about _ml?>"><?_ml /manage/invites.bml.title _ml?></a></li>
 <=list
 block?>
           );
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/invitecodes.bml
--- a/htdocs/manage/invitecodes.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/invitecodes.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -82,7 +82,7 @@ body<=
                 $ret .= $u->ljuser_display;
             } else {
                 my $create_link = ($LJ::USE_SSL ? $LJ::SSLROOT : $LJ::SITEROOT)
-                    . "/create.bml?from=$remote->{user}&code=".$code->code;
+                    . "/create?from=$remote->{user}&code=".$code->code;
                 $ret .= BML::ml( '.code.use', { aopts => "href='$create_link'" } );
             }        
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/logins.bml
--- a/htdocs/manage/logins.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/logins.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -20,7 +20,7 @@ body<=
     if (LJ::check_priv($u, 'canview', 'sessions') ||
         LJ::check_priv($u, 'canview', '*')) {
         $user = LJ::canonical_username($GET{'user'} || $POST{'user'});
-        $body .= "<form method='GET' action='logins.bml'>\n";
+        $body .= "<form method='GET' action='logins'>\n";
         $body .= "<label for='user'>$ML{'.user'} ";
         $body .= LJ::html_text({'name' => 'user',
                                 'id' => 'user',
@@ -45,7 +45,7 @@ body<=
 
         my $sid = $POST{'x'};
         $sessions->{$sid}->destroy if $sessions->{$sid};
-        return BML::redirect("logins.bml");
+        return BML::redirect("logins");
     }
 
     my $sth = $u->prepare("SELECT logintime, sessid, ip, ua FROM loginlog WHERE userid=?")
@@ -88,7 +88,7 @@ body<=
             $body .= "<td style='whitespace: nowrap; font-size: 0.75em'>$ML{'.loggedin.table.current'}</td>";
         } elsif(!$user) {
             $body .= "<td>\n<form method='POST' ";
-            $body .= "action='$LJ::SITEROOT/manage/logins.bml'>\n";
+            $body .= "action='$LJ::SITEROOT/manage/logins'>\n";
             $body .= LJ::html_hidden('loguser' => $user) if $user;
             $body .= LJ::html_hidden('x' => $login->[1]) . "\n";
             $body .= LJ::form_auth() . "\n";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/moodthemes.bml
--- a/htdocs/manage/moodthemes.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/moodthemes.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -156,7 +156,7 @@ body<=
     return LJ::bad_input($ML{'error.invalidauth'})
         unless $u;
 
-    my $self_uri = "/manage/moodthemes.bml";
+    my $self_uri = "/manage/moodthemes";
     $self_uri .= "?authas=$authas" if $authas ne $remote->{'user'};
 
     # Populated with all the moods later in editform
@@ -388,7 +388,7 @@ body<=
     } else { # Show the first form to select user, which one to edit, or create a new one
 
         # user switcher
-        $ret .= "<form action='/manage/moodthemes.bml' method='get'>\n";
+        $ret .= "<form action='/manage/moodthemes' method='get'>\n";
         $ret .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} });
         $ret .= "</form>\n\n";
 
@@ -432,10 +432,10 @@ body<=
 
                     my $use_dis = 0;
                     if ($tid == $u->{'moodthemeid'}) {
-                        $ret .= "<tr><td><b><a href='/moodlist.bml?moodtheme=$tid&ownerid=$u->{'userid'}'>$ename</a></b></td>";
+                        $ret .= "<tr><td><b><a href='/moodlist?moodtheme=$tid&ownerid=$u->{'userid'}'>$ename</a></b></td>";
                         $use_dis = 1;
                     } else {
-                        $ret .= "<tr><td><a href='/moodlist.bml?moodtheme=$tid&ownerid=$u->{'userid'}'>$ename</a></td>";
+                        $ret .= "<tr><td><a href='/moodlist?moodtheme=$tid&ownerid=$u->{'userid'}'>$ename</a></td>";
                     }
 
                     my @head_moods = (15, 25, 2); # happy, sad, angry
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/profile/index.bml
--- a/htdocs/manage/profile/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/profile/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -119,7 +119,7 @@ body<=
         $ret .= "</div><div style='margin-left: 110px'>\n";
         $ret .= "<span class='helper'>$ML{'.userpic'}</span>";
         $ret .= LJ::help_icon('upic_keywords');
-        $ret .= "<?p <a href='$LJ::SITEROOT/editpics.bml$getextra'>$ML{'.userpic.change'}</a> p?>\n";
+        $ret .= "<?p <a href='$LJ::SITEROOT/editpics$getextra'>$ML{'.userpic.change'}</a> p?>\n";
         $ret .= "</td>";
         $ret .= "</tr>\n";
 
@@ -133,7 +133,7 @@ body<=
             $ret .= "</td></tr>\n";
         } else {
             $ret .= "<td>" . LJ::html_hidden('name_absent', 'yes');
-            $ret .= "<?inerr " . BML::ml('.error.invalidname2', {'aopts' => "href='$LJ::SITEROOT/utf8convert.bml'"}) . " inerr?></td></tr>\n";
+            $ret .= "<?inerr " . BML::ml('.error.invalidname2', {'aopts' => "href='$LJ::SITEROOT/utf8convert'"}) . " inerr?></td></tr>\n";
         }
 
         if ( $u->is_individual ) {
@@ -200,7 +200,7 @@ body<=
                                     Y => BML::ml(".security.visibility.everybody"),
                                     F => BML::ml(".security.visibility.friends"),
                                     N => BML::ml(".security.visibility.nobody") );
-            $ret .= " &nbsp; <a href='$LJ::SITEROOT/schools/manage.bml$getextra'>$ML{'.schools.manage'}</a></td></tr>\n";
+            $ret .= " &nbsp; <a href='$LJ::SITEROOT/schools/manage$getextra'>$ML{'.schools.manage'}</a></td></tr>\n";
         }
 
         $ret .= "</table>\n";
@@ -257,7 +257,7 @@ body<=
             $ret .= "</table>\n";
         } else {
             $ret .= LJ::html_hidden('bio_absent', 'yes');
-            $ret .= "<?p <?inerr " . BML::ml('.error.invalidbio', {'aopts' => "href='$LJ::SITEROOT/utf8convert.bml'"}) . " inerr?> p?>\n";
+            $ret .= "<?p <?inerr " . BML::ml('.error.invalidbio', {'aopts' => "href='$LJ::SITEROOT/utf8convert'"}) . " inerr?> p?>\n";
         }
 
         $ret .= "<div class='section_head'>$ML{'.section.web'}</div>\n";
@@ -313,7 +313,7 @@ body<=
         # email
 
         $ret .= "<tr><td class='field_name'> $ML{'.fn.email.system'}</td><td>\n";
-        $ret .= "<b>" . $u->email_raw . "</b> &nbsp; <a href='$LJ::SITEROOT/changeemail.bml$getextra'>$ML{'.email.change.system'}</a></td></tr>";
+        $ret .= "<b>" . $u->email_raw . "</b> &nbsp; <a href='$LJ::SITEROOT/changeemail$getextra'>$ML{'.email.change.system'}</a></td></tr>";
 
         $ret .= "<tr><td class='field_name'> $ML{'.fn.email.display'}</td><td>\n";
 
@@ -456,7 +456,7 @@ body<=
                                           @opts);
             }
 
-            $ret .= " " . BML::ml('.txt.details', {'aopts' => "href='$LJ::SITEROOT/tools/textmessage.bml?mode=details'"}) . "</td></tr>\n";
+            $ret .= " " . BML::ml('.txt.details', {'aopts' => "href='$LJ::SITEROOT/tools/textmessage?mode=details'"}) . "</td></tr>\n";
             $ret .= "<tr><td class='field_name'>$ML{'.fn.txtnum'}</td><td>";
             $ret .= LJ::html_text({ 'name' => 'txtmsg_number',  'value' => $tminfo->{'number'},
                                     'size' => '15', 'maxlength' => '40' });
@@ -742,7 +742,7 @@ body<=
                          "<?p $ML{'.success.gonext'} p?>" .
                          "<ul><li><a href='$profile_url'>$ML{'.success.viewprofile'}</a></li>" .
                          "<li><a href='$LJ::SITEROOT/manage/profile/$getextra'>$ML{'.success.editprofile'}</a></li>" .
-                         "<li><a href='$LJ::SITEROOT/editpics.bml$getextra'>$ML{'.success.editpics'}</a></li></ul>";
+                         "<li><a href='$LJ::SITEROOT/editpics$getextra'>$ML{'.success.editpics'}</a></li></ul>";
     }
 
     # should never happen
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/pubkey.bml
--- a/htdocs/manage/pubkey.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/pubkey.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -55,7 +55,7 @@ body<=
 
             # This page shows them their key saved
             # eventually add a confirmation bar on it
-            return BML::redirect('/pubkey.bml');
+            return BML::redirect('/pubkey');
         }
     }
 
@@ -65,8 +65,8 @@ body<=
     my $ret;
     $ret .= "<?p ";
     $ret .= BML::ml('.info', {
-        aoptsinfo => "href='/userinfo.bml'",
-        aoptshelp => "href='emailpost.bml?mode=help&type=advanced\#pgp'",
+        aoptsinfo => "href='/userinfo'",
+        aoptshelp => "href='emailpost?mode=help&type=advanced\#pgp'",
     });
     $ret .= " p?>";
     $ret .= "<?p ";
@@ -77,7 +77,7 @@ body<=
     $ret .= " p?>";
 
     $ret .= "<?h1 $ML{'.header'} <img src='/img/key.gif' height='16' width='16'> h1?>";
-    $ret .= "<form method='post' action='pubkey.bml'>\n";
+    $ret .= "<form method='post' action='pubkey'>\n";
     $ret .= LJ::form_auth();
     $ret .= $error if $error;
     $ret .= "<?p $ML{'.pastekey'} p?>\n";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/manage/tags.bml
--- a/htdocs/manage/tags.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/manage/tags.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -206,8 +206,8 @@ HEAD
         }
         $ret .= "</select>\n                ";
         $ret .= "<div class='tagsort'>";
-        $ret .= $GET{sort} eq 'use' ? BML::ml('.sort.a', { aopts => "href='$LJ::SITEROOT/manage/tags.bml?authas=$u->{user}&sort=alpha'" }) :
-                                      BML::ml('.sort.b', { aopts => "href='$LJ::SITEROOT/manage/tags.bml?authas=$u->{user}&sort=use'" });
+        $ret .= $GET{sort} eq 'use' ? BML::ml('.sort.a', { aopts => "href='$LJ::SITEROOT/manage/tags?authas=$u->{user}&sort=alpha'" }) :
+                                      BML::ml('.sort.b', { aopts => "href='$LJ::SITEROOT/manage/tags?authas=$u->{user}&sort=use'" });
         $ret .= '</div>';
     } else {
         $ret .= "<div class='taginfo'>$ML{'.none'}</div>"
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/misc/adult_concepts.bml
--- a/htdocs/misc/adult_concepts.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/misc/adult_concepts.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -54,7 +54,7 @@ body<=
     $ret .= "<br />";
 
     $ret .= "<div align='center'>";
-    $ret .= "<form method='POST' action='$LJ::SITEROOT/misc/adult_concepts.bml'>";
+    $ret .= "<form method='POST' action='$LJ::SITEROOT/misc/adult_concepts'>";
     $ret .= LJ::form_auth();
     $ret .= LJ::html_hidden( ret => $returl, journalid => $journal->id, entryid => defined $entry ? $entry->ditemid : 0 );
     $ret .= LJ::html_submit( adult_check => $ML{'.btn.viewconfirm'} ) . " ";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/misc/adult_explicit.bml
--- a/htdocs/misc/adult_explicit.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/misc/adult_explicit.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -60,7 +60,7 @@ body<=
     $ret .= "<br />";
 
     $ret .= "<div align='center'>";
-    $ret .= "<form method='POST' action='$LJ::SITEROOT/misc/adult_explicit.bml'>";
+    $ret .= "<form method='POST' action='$LJ::SITEROOT/misc/adult_explicit'>";
     $ret .= LJ::form_auth();
     $ret .= LJ::html_hidden( ret => $returl, journalid => $journal->id, entryid => defined $entry ? $entry->ditemid : 0 );
     if ( $remote && $remote->best_guess_age ) {
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/misc/beta.bml
--- a/htdocs/misc/beta.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/misc/beta.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -54,7 +54,7 @@ body<=
 
             LJ::modify_caps( $u, @$caps );
 
-            return BML::redirect( "$LJ::SITEROOT/misc/beta.bml?authas=" . $u->user );
+            return BML::redirect( "$LJ::SITEROOT/misc/beta?authas=" . $u->user );
         }
 
         return "Not sure what you want me to do!";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/misc/downgrader.bml
--- a/htdocs/misc/downgrader.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/misc/downgrader.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -59,7 +59,7 @@ body<=
     die $dbh->errstr if $dbh->err;
 
     $ret = $u->ljuser_display . " has been expired... wait for the email!<br /><br />";
-    $ret .= '<a href="/misc/downgrader.bml">That was fun, expire some more!</a>';
+    $ret .= '<a href="/misc/downgrader">That was fun, expire some more!</a>';
     return $ret;
 }
 _code?>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/misc/get_domain_session.bml
--- a/htdocs/misc/get_domain_session.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/misc/get_domain_session.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -2,7 +2,7 @@
 {
     use strict;
     use vars qw(%GET);
-    return BML::redirect(LJ::Session->helper_url($GET{'return'}) || "$LJ::SITEROOT/login.bml");
+    return BML::redirect(LJ::Session->helper_url($GET{'return'}) || "$LJ::SITEROOT/login");
 }
 _code?>
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/misc/suggest_qotd.bml
--- a/htdocs/misc/suggest_qotd.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/misc/suggest_qotd.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -49,7 +49,7 @@ Their suggestion(s):
 
     $ret .= "<?p $ML{'.intro'} p?>";
 
-    $ret .= "<form action='suggest_qotd.bml' method='post'>";
+    $ret .= "<form action='suggest_qotd' method='post'>";
     $ret .= LJ::form_auth();
     $ret .= "<div style='padding: 10px; margin-left: 20px;'>";
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/misc/whereami.bml
--- a/htdocs/misc/whereami.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/misc/whereami.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -33,7 +33,7 @@ body<=
     my $cname = $LJ::CLUSTER_NAME{$u->clusterid} || $ML{'.cluster.unknown'};
 
     my $ret = '<?p <?_ml .intro _ml?> p?>';
-    $ret .= "<form method='get' id='userpic_authas' action='$LJ::SITEROOT/misc/whereami.bml'>\n";
+    $ret .= "<form method='get' id='userpic_authas' action='$LJ::SITEROOT/misc/whereami'>\n";
     $ret .= LJ::make_authas_select($remote, { authas => $GET{authas} }) . "\n";
     $ret .= "</form><br /><?p ";
     $ret .= BML::ml( '.cluster', { cluster => $cname, user => $u->ljuser_display } );
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/mobile/index.bml
--- a/htdocs/mobile/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/mobile/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -17,7 +17,7 @@
     $ret .= "<h2><?_ml .options.header _ml?></h2><ul>";
 
     unless ($u) {
-        $ret .= "<li>" . BML::ml( ".options.login_prompt", { aopts => "href='login.bml'"  } ) . "</li>";
+        $ret .= "<li>" . BML::ml( ".options.login_prompt", { aopts => "href='login'"  } ) . "</li>";
     }
 
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/mobile/login.bml
--- a/htdocs/mobile/login.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/mobile/login.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -51,7 +51,7 @@ form { margin-left: 2em; }
 
 <h2><?_ml .ssl.header _ml?></h2>
 <p<?_ml .ssl.text _ml?></p>
-<form method='post' action='<?_code return $LJ::SSLROOT _code?>/mobile/login.bml'>
+<form method='post' action='<?_code return $LJ::SSLROOT _code?>/mobile/login'>
 <?_ml .form.username _ml?>: <input name='user' size='15' /><br />
 <?_ml .form.password _ml?>: <input name='password' type='password' size='15' />
 <input type='submit' value="<?_ml .form.button _ml?>" />
@@ -60,7 +60,7 @@ form { margin-left: 2em; }
 <h2><?_ml .basic.header _ml?></h2>
 <p><?_ml .basic.text _ml?></p>
 
-<form method='post' action='<?_code return $LJ::SITEROOT _code?>/mobile/login.bml'>
+<form method='post' action='<?_code return $LJ::SITEROOT _code?>/mobile/login'>
 <?_ml .form.username _ml?>: <input name='user' size='15' /><br />
 <?_ml .form.password _ml?>: <input name='password' type='password' size='15' />
 <input type='submit' value="<?_ml .form.button _ml?>" />
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/mobile/post.bml
--- a/htdocs/mobile/post.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/mobile/post.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -11,7 +11,7 @@ _info?><?_code
     };
 
     $u = LJ::get_remote()
-	or return $err->( BML::ml( ".post.login", { aopts => "href='login.bml'" } ) );
+	or return $err->( BML::ml( ".post.login", { aopts => "href='login'" } ) );
 
     $res = LJ::Protocol::do_request("login", {
 	"ver" => $LJ::PROTOCOL_VER,
@@ -74,7 +74,7 @@ _code?>
 <?_code BML::ml( ".post.back", { aopts => "href='./'", sitename => $LJ::SITENAMESHORT } ) _code?>
 <h1><?_ml .form.header _ml?></h1>
 
-<form method='post' action='/mobile/post.bml'>
+<form method='post' action='/mobile/post'>
 <?_code { return LJ::form_auth(); } _code?>
 <?_ml .form.subject _ml?>:<br />
 <input name='subject' size='50' style='width: 90%' /><br />
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/mobile/read.bml
--- a/htdocs/mobile/read.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/mobile/read.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -9,7 +9,7 @@
     use vars qw (%GET);
 
     my $u = LJ::User->remote
-        or return BML::ml( '.read.login', { aopts => "href='login.bml'" } );
+        or return BML::ml( '.read.login', { aopts => "href='login'" } );
 
     my $itemsperpage = 50;
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/moodlist.bml
--- a/htdocs/moodlist.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/moodlist.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -112,12 +112,12 @@ body<=
 
             $ret .= "<td align='center'>";
             $ret .= BML::ml('Actionlink', {
-                'link' => "<a href='$LJ::SITEROOT/moodlist.bml?moodtheme=$theme->{moodthemeid}'>$ML{'.nav.viewall'}</a>"
+                'link' => "<a href='$LJ::SITEROOT/moodlist?moodtheme=$theme->{moodthemeid}'>$ML{'.nav.viewall'}</a>"
             });
             $ret .= "</td>";
         };
 
-        $ret .= "<form action='moodlist.bml' method='get'>\n";
+        $ret .= "<form action='moodlist' method='get'>\n";
         $ret .= LJ::html_hidden("page", $items{page});
         $ret .= "<table width='100%' border='0' cellspacing='0' cellpadding='0'><tr><td></td>";
 
@@ -156,7 +156,7 @@ body<=
     # Determine the action depending on the GET arguments, or lack thereof
     if (defined $GET{'moodtheme'}) {
         $ret .= BML::ml('Backlink', {
-                'link'=>"$LJ::SITEROOT/moodlist.bml",
+                'link'=>"$LJ::SITEROOT/moodlist",
                 'text'=>$ML{'.back2'},
             }). "<br />";
 
@@ -196,11 +196,11 @@ body<=
                         (@user_themes ? (0, "---") : ()),
                         (map {$_->{moodthemeid}, $_->{name}} @user_themes));
 
-                $ret .= "<div style='margin-bottom:15px'><form action='moodlist.bml' method='GET'>";
+                $ret .= "<div style='margin-bottom:15px'><form action='moodlist' method='GET'>";
                 $ret .= LJ::html_select({'name' => "moodtheme", 'selected' => "$themeid"},
                                         @opts);
                 $ret .= "&nbsp;<input type='submit' value=\"$ML{'.btn.view'}\" /></form>";
-                $ret .= "<a href='/moodlist.bml?moodtheme=$themeid&mode=tree'>$ML{'.view.tree'}</a></div></td></tr>";
+                $ret .= "<a href='/moodlist?moodtheme=$themeid&mode=tree'>$ML{'.view.tree'}</a></div></td></tr>";
             }
 
             # Output all the moods
@@ -268,13 +268,13 @@ body<=
                 my @opts = ((map {$_->{moodthemeid}, $_->{name}} @themes),
                    (@user_themes ? (0, "---") : ()),
                             (map {$_->{moodthemeid}, $_->{name}} @user_themes));
-                $ret .= "<div style='margin-bottom:15px; margin-top:30px' align='center'><form action='moodlist.bml' method='GET'>";
+                $ret .= "<div style='margin-bottom:15px; margin-top:30px' align='center'><form action='moodlist' method='GET'>";
                 $ret .= LJ::html_select({'name' => "moodtheme", 'selected' => "$GET{moodtheme}"},
                                         @opts);
                 $ret .= "&nbsp;<input type='submit' value=\"$ML{'.btn.view'}\" />";
                 $ret .= LJ::html_hidden('mode' => 'tree');
                 $ret .= "</form>";
-                $ret .= "<a href='/moodlist.bml?moodtheme=$theme->{moodthemeid}'>$ML{'.view.table'}</a></div>";
+                $ret .= "<a href='/moodlist?moodtheme=$theme->{moodthemeid}'>$ML{'.view.table'}</a></div>";
             }
             $ret .= "<ul>\n";
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/multisearch.bml
--- a/htdocs/multisearch.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/multisearch.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -13,10 +13,10 @@
     if ($type eq "nav_and_user" || $type eq "nav") {
         # Some special shortcuts used for easy navigation
         if ($q =~ /^faq (\d+)$/) {
-            return BML::redirect("$LJ::SITEROOT/support/faqbrowse.bml?faqid=$1&view=full");
+            return BML::redirect("$LJ::SITEROOT/support/faqbrowse?faqid=$1&view=full");
         }
         if ($q =~ /^req(uest)? (\d+)$/) {
-            return BML::redirect("$LJ::SITEROOT/support/see_request.bml?id=$2");
+            return BML::redirect("$LJ::SITEROOT/support/see_request?id=$2");
         }
         if ($q =~ m!(.+)/(pics|full)!) {
             if (my $u = LJ::load_user($1)) {
@@ -104,7 +104,7 @@
         if ($user) {
             my $url;
             if ($what eq "pics") {
-                $url = "$LJ::SITEROOT/allpics.bml?user=$user";
+                $url = "$LJ::SITEROOT/allpics?user=$user";
             } elsif ($output eq "foaf") {
                 $url = LJ::journal_base($user) . '/data/foaf';
             } else {
@@ -112,19 +112,19 @@
                     $url = $u->profile_url;
                     $url .= "?mode=full" if $what eq 'full';
                 } else {
-                    $url = "$LJ::SITEROOT/userinfo.bml?user=$user";
+                    $url = "$LJ::SITEROOT/userinfo?user=$user";
                 }
             }
             return BML::redirect($url);
         } else {
-            return BML::redirect("$LJ::SITEROOT/random.bml");
+            return BML::redirect("$LJ::SITEROOT/random");
         }
     }
 
     if ($type eq "int") {
         my $int = lc($q);
         if ($int) {
-            return BML::redirect("$LJ::SITEROOT/interests.bml?int=" . LJ::eurl($int));
+            return BML::redirect("$LJ::SITEROOT/interests?int=" . LJ::eurl($int));
         } else {
             $title = $ML{'.nointerest.title'};
             $body = "<?h1 $ML{'Error'} h1?><?p $ML{'.nointerest.text'} p?>";
@@ -203,7 +203,7 @@
         my @parts = split(/\s*,\s*/, $q);
         if (@parts==0 || @parts>3) {
             $title = $ML{'.formaterror'};
-            $body .= "<?h1 $ML{'.region.head'} h1?><?p " . BML::ml('.region.bodytext2', {'aopts' => "href='$LJ::SITEROOT/directorysearch.bml'"}) . " p?>";
+            $body .= "<?h1 $ML{'.region.head'} h1?><?p " . BML::ml('.region.bodytext2', {'aopts' => "href='$LJ::SITEROOT/directorysearch'"}) . " p?>";
             return;
         }
 
@@ -229,13 +229,13 @@
             }
         }
         ($city, $state, $country) = map { LJ::eurl($_); } ($city, $state, $country);
-        return BML::redirect("$LJ::SITEROOT/directory.bml?s_loc=1&loc_cn=$country&loc_st=$state&loc_ci=$city&opt_sort=ut&opt_format=pics&opt_pagesize=50");
+        return BML::redirect("$LJ::SITEROOT/directory?s_loc=1&loc_cn=$country&loc_st=$state&loc_ci=$city&opt_sort=ut&opt_format=pics&opt_pagesize=50");
     }
 
     if ($type eq "faq") {
         my $term = lc($q);
         if ($term) {
-            return BML::redirect("$LJ::SITEROOT/support/faqsearch.bml?q=" . LJ::eurl($term));
+            return BML::redirect("$LJ::SITEROOT/support/faqsearch?q=" . LJ::eurl($term));
         } else {
             $title = $ML{'.nofaqsearch.title'};
             $body = "<?h1 $ML{'Error'} h1?><?p $ML{'.nofaqsearch.text'} p?>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/openid/index.bml
--- a/htdocs/openid/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/openid/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -44,13 +44,13 @@ p?>
 
 <?p 
 <?_code 
-BML::ml(".main.using_your_openid_here.email2", { 'aopts1' => "href='$LJ::SITEROOT/changeemail.bml'", 'aopts2' => "href='$LJ::SITEROOT/register.bml'" })
+BML::ml(".main.using_your_openid_here.email2", { 'aopts1' => "href='$LJ::SITEROOT/changeemail'", 'aopts2' => "href='$LJ::SITEROOT/register'" })
 _code?>
 p?>
 
 
    <div style='padding: 0.4em; margin-left: 25px; margin-right: 25px; width: auto; text-align: center; background: #ccc; border: #000'>
-<form method='post' action='login.bml' style='display:inline; width:auto'><nobr><b><?_ml .login.openid_url _ml?></b> <input class='sexy' id='openid_url' name="openid_url" size='30' />
+<form method='post' action='login' style='display:inline; width:auto'><nobr><b><?_ml .login.openid_url _ml?></b> <input class='sexy' id='openid_url' name="openid_url" size='30' />
 <input style='background: #ff6200; color: #fff;' type='submit' value='<?_ml .login.submit _ml?>' /></nobr><br /><?_ml .login.example _ml?></form></div>
 
 <?h1 <?_ml .main.openid_other_sites _ml?> h1?>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/openid/login.bml
--- a/htdocs/openid/login.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/openid/login.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -17,7 +17,7 @@
     return $err->($ML{'.error.no_support'})
         unless LJ::OpenID::consumer_enabled();
 
-    my $return_to = "$LJ::SITEROOT/openid/login.bml";
+    my $return_to = "$LJ::SITEROOT/openid/login";
 
     my $remote = LJ::get_remote();
     if ($remote) {
@@ -63,7 +63,7 @@
         $u->make_login_session($sess_opts->{'exptype'}, $sess_opts->{'ipfixed'});
         LJ::set_remote($u);
 
-        return BML::redirect("$LJ::SITEROOT/login.bml");
+        return BML::redirect("$LJ::SITEROOT/login");
     }
 
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/poll/create.bml
--- a/htdocs/poll/create.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/poll/create.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -94,7 +94,7 @@
         # postto switcher form
         # If remote can make polls, show all communities they have posting access to
         # If remote can't make polls, show only paid communities they maintain
-        $body .= "<form method='get' action='create.bml'>\n";
+        $body .= "<form method='get' action='create'>\n";
         if ($remote_can_make_polls) {
             $body .= LJ::make_postto_select($remote, { 'authas' => $GET{'authas'} }) . "\n";
         } else {
@@ -385,7 +385,7 @@
 
         ### Form Header
 
-        $ret .= "<form method='post' action='create.bml$getextra'>\n";
+        $ret .= "<form method='post' action='create$getextra'>\n";
         $ret .= LJ::html_hidden('count', $poll->{'count'});
 
         $ret .= "<div style='margin: 10px 0 20px 40px'><b>$ML{'.haserrors'}</b></div>\n"
@@ -657,7 +657,7 @@
         $ret .= "<div align='center'>\n";
 
         # edit poll
-        $ret .= "<form method='post' action='create.bml$getextra' style='display: inline'>\n";
+        $ret .= "<form method='post' action='create$getextra' style='display: inline'>\n";
         $ret .= $poll_hidden->($poll);
         $ret .= LJ::html_submit('edit_poll', undef, { 'raw' => "value='&larr; $ML{'.button.editpoll'}'" }) . "\n";
 
@@ -671,7 +671,7 @@
 
         # submit button / form
         my $usejournal = $getextra ? "?usejournal=$authas" : '';
-        $ret .= "<form method='post' action='$LJ::SITEROOT/update.bml$usejournal' style='display: inline'>\n";
+        $ret .= "<form method='post' action='$LJ::SITEROOT/update$usejournal' style='display: inline'>\n";
         $ret .= LJ::form_auth();
         $ret .= LJ::html_hidden('event', $code) . "\n";
         $ret .= LJ::html_submit('showform', undef, { 'raw' => "value='$ML{'.button.postpoll'} &rarr;'" }) . "\n";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/poll/index.bml
--- a/htdocs/poll/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/poll/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -23,7 +23,7 @@
     my $pollid = ($FORM{'id'} || $FORM{'pollid'})+0;
 
     unless ($pollid) {
-        return BML::redirect( "$LJ::SITEROOT/poll/create.bml" );
+        return BML::redirect( "$LJ::SITEROOT/poll/create" );
     }
 
     my $poll = LJ::Poll->new($pollid);
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/portal/alter.bml
--- a/htdocs/portal/alter.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/portal/alter.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -19,7 +19,7 @@
      LJ::Portal::delete_box($portopts, $loc, $pos, $bname);
      LJ::Portal::save_portopts($remote, $portopts);
      if ($loc eq "moz") {
-         return BML::redirect("$LJ::SITEROOT/portal/moz.bml");
+         return BML::redirect("$LJ::SITEROOT/portal/moz");
      } else {
          return BML::redirect("$LJ::SITEROOT$LJ::PORTAL_URI");
      }
@@ -30,7 +30,7 @@
      LJ::Portal::move_box($portopts, $loc, $pos, $bname, $op);
      LJ::Portal::save_portopts($remote, $portopts);
      if ($loc eq "moz") {
-         return BML::redirect("$LJ::SITEROOT/portal/moz.bml");
+         return BML::redirect("$LJ::SITEROOT/portal/moz");
      } else {
          return BML::redirect("$LJ::SITEROOT$LJ::PORTAL_URI");
      }
@@ -58,7 +58,7 @@
      $body .= "<?h1 Add New Box h1?><?p You can create a new box to show on the main page:<ul>";
      foreach my $loc (@LJ::PORTAL_COLS)
      {
-         $body .= "<form method='post' action='alter.bml'>";
+         $body .= "<form method='post' action='alter'>";
          $body .= LJ::html_hidden("op", "addnew",
                                   "loc", $loc);
          $body .= "<p><b>$LJ::Portal::colname{$loc}</b><br>";
@@ -115,7 +115,7 @@
      $body = "If you're running Mozilla or Netscape &gt;= 6.0 you can click the link below to add this LJ portal box to your Mozilla sidebar.  If you're using Internet Explorer, sorry.<p>";
      $body .= "<ul>";
 
-     $body .= "<a href=\"javascript:sidebar.addPanel('$LJ::SITENAME','$LJ::SITEROOT/portal/moz.bml','')\"><b>&lt;--- Add $LJ::SITENAME Mozilla Sidebar</b></a>";
+     $body .= "<a href=\"javascript:sidebar.addPanel('$LJ::SITENAME','$LJ::SITEROOT/portal/moz','')\"><b>&lt;--- Add $LJ::SITENAME Mozilla Sidebar</b></a>";
      $body .= "</ul>";
      $body .= "If you just added a new box to the sidebar or changed a setting and the $LJ::SITENAME sidebar is already open, hit the reload link in the sidebar.";
      return;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/portal/get.bml
--- a/htdocs/portal/get.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/portal/get.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -15,7 +15,7 @@
     $head = '<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">';
 
     if (!$remote) {
-        $body = "Sorry, you must be <a href=\"$LJ::SITEROOT/login.bml\">logged in</a> and have cookies enabled to use your modules.";
+        $body = "Sorry, you must be <a href=\"$LJ::SITEROOT/login\">logged in</a> and have cookies enabled to use your modules.";
         return;
     }
 
@@ -55,7 +55,7 @@
             var Site;
         if (!Site)
             Site = new Object();
-        Site.postUrl = "$LJ::SITEROOT/portal/index.bml";
+        Site.postUrl = "$LJ::SITEROOT/portal/index";
         Site.doFade = $doFade;
         Site.doAnimate = 1;
         Site.imgprefix = "$LJ::IMGPREFIX";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/portal/ig.bml
--- a/htdocs/portal/ig.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/portal/ig.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -28,7 +28,7 @@
     }
 
     if (!$remote) {
-        return $returncontent->("Sorry, you must be <a href=\"$LJ::SITEROOT/login.bml\">logged in</a> and have cookies enabled to use your modules.");
+        return $returncontent->("Sorry, you must be <a href=\"$LJ::SITEROOT/login\">logged in</a> and have cookies enabled to use your modules.");
     }
 
     my $portalconfig = LJ::Portal::Config->new($remote);
@@ -50,7 +50,7 @@
     return qq {<?xml version="1.0"?>
 <Module>
 <ModulePrefs title="$title" />
-<Content type="url" href="$LJ::SITEROOT/portal/get.bml?pboxid=$pboxid" />
+<Content type="url" href="$LJ::SITEROOT/portal/get?pboxid=$pboxid" />
 </Module>
     };
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/portal/moz.bml
--- a/htdocs/portal/moz.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/portal/moz.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -15,6 +15,6 @@
  
  LJ::Portal::make_mozilla_bar($remote, \%FORM, $opts);
 
- return "<html><head>$head<title>$title</title><body marginwidth=2 marginheight=2 $bodyopts><base target=_content><center><font size=-1><a href=\"$LJ::SITEROOT/\">$LJ::SITENAME</a><br>(<a target=_self href=\"javascript:location.reload(true)\">Reload</a> | <a href=\"$LJ::SITEROOT/portal/alter.bml?op=a\">Add Box</a>)</font><br>$body</body></html>";
+ return "<html><head>$head<title>$title</title><body marginwidth=2 marginheight=2 $bodyopts><base target=_content><center><font size=-1><a href=\"$LJ::SITEROOT/\">$LJ::SITENAME</a><br>(<a target=_self href=\"javascript:location.reload(true)\">Reload</a> | <a href=\"$LJ::SITEROOT/portal/alter?op=a\">Add Box</a>)</font><br>$body</body></html>";
 
 _code?>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/portal/selectmodule.bml
--- a/htdocs/portal/selectmodule.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/portal/selectmodule.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -15,7 +15,7 @@
     $head = '<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">';
 
     if (!$remote) {
-        $body = "Sorry, you must be <a href=\"$LJ::SITEROOT/login.bml\">logged in</a> and have cookies enabled to use your modules.";
+        $body = "Sorry, you must be <a href=\"$LJ::SITEROOT/login\">logged in</a> and have cookies enabled to use your modules.";
         return;
     }
 
@@ -55,7 +55,7 @@
             var Site;
         if (!Site)
             Site = new Object();
-        Site.postUrl = "$LJ::SITEROOT/portal/index.bml";
+        Site.postUrl = "$LJ::SITEROOT/portal/index";
         Site.doFade = $doFade;
         Site.doAnimate = 1;
         Site.imgprefix = "$LJ::IMGPREFIX";
@@ -84,8 +84,8 @@
                 </div>
             </td>
             <td>
-                <div><a href="get.bml?pboxid=$pboxid">Module Link</a></div>
-                <div><a href="ig.bml?pboxid=$pboxid">ig</a></div>
+                <div><a href="get?pboxid=$pboxid">Module Link</a></div>
+                <div><a href="ig?pboxid=$pboxid">ig</a></div>
             </td>
             </tr>
         };
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/postreg/find.bml
--- a/htdocs/postreg/find.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/postreg/find.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -13,7 +13,7 @@ body<=
 
     $ret .= "<div id='browse'>";
     $ret .= "<h2>" . BML::ml('.browse', {'sitename' => $LJ::SITENAMESHORT}) . "</h2>";
-    $ret .= "<p><a href='$LJ::SITEROOT/interests.bml?view=popular'>$ML{'.browse.popinterests'}</a><br />";
+    $ret .= "<p><a href='$LJ::SITEROOT/interests?view=popular'>$ML{'.browse.popinterests'}</a><br />";
     $ret .= BML::ml('.browse.popinterests.desc', {'sitename' => $LJ::SITENAMESHORT}) . "</p>";
     $ret .= "<p><a href='$LJ::SITEROOT/schools/'>$ML{'.browse.schools'}</a><br />";
     $ret .= "$ML{'.browse.schools.desc'}</p>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/postreg/index.bml
--- a/htdocs/postreg/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/postreg/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -34,7 +34,7 @@ body<=
     if (LJ::did_post()) {
         # redirect to the next page without saving if the user clicked that button
         if ($POST{skip}) {
-            return BML::redirect("$LJ::SITEROOT/postreg/find.bml");
+            return BML::redirect("$LJ::SITEROOT/postreg/find");
         }
 
         # Save all of the settings
@@ -43,7 +43,7 @@ body<=
         $save_rv = LJ::Setting->save_all($remote, \%POST, \@settings);
 
         # redirect to the next page if there's no errors
-        return BML::redirect("$LJ::SITEROOT/postreg/find.bml") 
+        return BML::redirect("$LJ::SITEROOT/postreg/find") 
             unless LJ::Setting->save_had_errors($save_rv);
     }
 
@@ -65,7 +65,7 @@ body<=
     $ret .= "</div>";
     $ret .= LJ::Widget::FriendInterests->render( user => $remote, from => $remote->who_invited );
     $ret .= "<p class='submit-wrapper'>" . LJ::html_submit('save', $ML{'.btn.save'}) . "</p>";
-    $ret .= "<p class='skip'><a href='<?siteroot?>/postreg/find.bml'>$ML{'.skip_step_title'} &raquo;</a></p>";
+    $ret .= "<p class='skip'><a href='<?siteroot?>/postreg/find'>$ML{'.skip_step_title'} &raquo;</a></p>";
     $ret .= "</form>";
 
     return $ret;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/pubkey.bml
--- a/htdocs/pubkey.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/pubkey.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -45,7 +45,7 @@ body<=
     });
     $ret .= " p?> <?p ";
     $ret .= BML::ml('.info.upload', {
-        aopts => 'href="/manage/pubkey.bml"',
+        aopts => 'href="/manage/pubkey"',
     });
     $ret .= " p?>";
     return $ret;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/register.bml
--- a/htdocs/register.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/register.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -17,7 +17,7 @@ body<=
 
  my $remote = LJ::get_remote();
 
- return "<?p " . BML::ml('.error.identity_no_email', {'aopts' => "href='$LJ::SITEROOT/changeemail.bml'"}) . " p?>"
+ return "<?p " . BML::ml('.error.identity_no_email', {'aopts' => "href='$LJ::SITEROOT/changeemail'"}) . " p?>"
      if $remote && $remote->is_identity && !$remote->email_raw;
 
  my $foruser = $GET{foruser};
@@ -38,7 +38,7 @@ body<=
  my $show_validate = sub {
     my $user = shift;
     return "<?p " . BML::ml('.ask.body', {'email' => $user->email_raw}) . " p?>" .
-           "<form action='register.bml' method='post'>" .
+           "<form action='register' method='post'>" .
            LJ::html_hidden('authas', $user->{'user'}) .
            "<blockquote>" . LJ::html_submit("action:send", "$ML{'.ask.button'}") .
            "</blockquote></form>";
@@ -74,7 +74,7 @@ body<=
 
      unless ($aa) {
          return "<?h1 $ML{'Error'} h1?><?p " .
-             BML::ml('.error.invalidcode', { aopts => "href='$LJ::SITEROOT/register.bml'" }) . " p?>";
+             BML::ml('.error.invalidcode', { aopts => "href='$LJ::SITEROOT/register'" }) . " p?>";
      }
 
      my $u = LJ::load_userid($aa->{'userid'});
@@ -82,7 +82,7 @@ body<=
      # verify their email hasn't subsequently changed
      unless ($u->email_raw eq $aa->{arg1}) {
          return "<?h1 $ML{'Error'} h1?><?p " .
-             BML::ml('.error.emailchanged', { aopts => "href='$LJ::SITEROOT/register.bml'" }) . " p?>";
+             BML::ml('.error.emailchanged', { aopts => "href='$LJ::SITEROOT/register'" }) . " p?>";
      }
 
      ## if the user is OpenID, prove that he or she is human
@@ -98,7 +98,7 @@ body<=
         }
         else {
             my $ret = "<?h1 $ML{'.validate.human.title'} h1?>";
-            $ret .= "<form method='POST' action='$LJ::SITEROOT/register.bml'><input type='hidden' name='qs' value='$qs'>";
+            $ret .= "<form method='POST' action='$LJ::SITEROOT/register'><input type='hidden' name='qs' value='$qs'>";
             $ret .= $c->get_options_setter({ theme => 'white' });
             $ret .= $c->get_html( LJ::conf_test($LJ::RECAPTCHA{public_key}) );
             $ret .= "<input type='submit' value='$ML{'.validate.human.submit'}' ></form>";
@@ -125,7 +125,7 @@ body<=
          $ret .= "<p><strong><a href='" . $u->journal_base . "/read/'>$ML{'.new.101.reading.question'}</a></strong><br />";
 
          $ret .= "$ML{'.new.101.reading.answer'}</p>";
-         $ret .= "<p><strong><a href='$LJ::SITEROOT/community/search.bml'>$ML{'.new.101.community.question'}</a></strong><br />";
+         $ret .= "<p><strong><a href='$LJ::SITEROOT/community/search'>$ML{'.new.101.community.question'}</a></strong><br />";
          $ret .= "$ML{'.new.101.community.answer'}</p>";
          $ret .= "</div>";
          $ret .= "<div class='columns-2-right'>";
@@ -163,7 +163,7 @@ body<=
              }
          }
 
-         $ret .= "<form method='get' action='register.bml'>\n";
+         $ret .= "<form method='get' action='register'>\n";
          $ret .= $ML{'.ask.select'} . ": ";
          $ret .= LJ::html_select({ 'name' => 'authas', selected => $GET{'authas'} || $remote->{user} }, @list) . " ";
          $ret .= LJ::html_submit(undef, $ML{'.ask.switch'});
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/reject.bml
--- a/htdocs/reject.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/reject.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -42,7 +42,7 @@ body<=
                '<?p ' . BML::ml('.commreject.text', {
                            user => LJ::ljuser($username),
                            comm => LJ::ljuser($commname),
-                           aopts => "href=\"$LJ::SITEROOT/community/members.bml?authas=$commname\"",
+                           aopts => "href=\"$LJ::SITEROOT/community/members?authas=$commname\"",
                         }) . ' p?>';
     }
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/robots.txt
--- a/htdocs/robots.txt	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/robots.txt	Sat Aug 01 14:31:59 2009 +0000
@@ -1,5 +1,6 @@ User-Agent: *
 User-Agent: *
 Disallow: /directory.bml
+Disallow: /directory
 
 #
 # Blocked journals aren't listed here because robots.txt files
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/shop.bml
--- a/htdocs/shop.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/shop.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -43,7 +43,7 @@ body<=
 
     $ret .= "<div class='shopbox'>";
     $ret .= "<p>" . BML::ml( '.sideblurb', { sitename => $LJ::SITENAMESHORT, aopts => "href='$LJ::HELPURL{paidaccountinfo}'" } ) . "</p>";
-    $ret .= "<p>" . BML::ml( '.viewhistory', { aopts => "href='$LJ::SITEROOT/shop/history.bml'" } ). "</p>"
+    $ret .= "<p>" . BML::ml( '.viewhistory', { aopts => "href='$LJ::SITEROOT/shop/history'" } ). "</p>"
         if LJ::get_remote();
     $ret .= "</div>";
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/shop/gifts.bml
--- a/htdocs/shop/gifts.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/shop/gifts.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -87,7 +87,7 @@ body<=
 
     if ( $freeusers || $freecommunities ) {
         $ret .= "<h2>" . BML::ml( '.free.header' ) . "</h2>\n";
-        $ret .= "<p>" . BML::ml( '.free.about', { 'aopts' => "href='$LJ::SITEROOT/support/faqbrowse.bml?faqid=153'" } ) . "</p>";
+        $ret .= "<p>" . BML::ml( '.free.about', { 'aopts' => "href='$LJ::SITEROOT/support/faqbrowse?faqid=153'" } ) . "</p>";
 
         #build different lists for personal and community accounts
         if ( $freeusers ) {
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/site/index.bml
--- a/htdocs/site/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/site/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -34,29 +34,29 @@ body<=
 <div id='maplinks-left'>
  <dl><dt><?_code return BML::ml('.maplinks.manage-journal-title', { sitename => $LJ::SITENAMESHORT }); _code?></dt>
   <dd><ul>
-   <li><a href='/update.bml'><?_ml .maplinks.post-entry _ml?></a></li>
-   <li><a href='/editjournal.bml'><?_ml .maplinks.edit-entries _ml?></a></li>
-   <li><a href='/tools/recent_comments.bml'><?_ml .maplinks.manage-comments _ml?></a></li>
-   <li><a href='/manage/tags.bml'><?_ml .maplinks.manage-tags _ml?></a></li>
-   <li><a href='/tools/memories.bml'><?_ml .maplinks.manage-memories _ml?></a></li>
+   <li><a href='/update'><?_ml .maplinks.post-entry _ml?></a></li>
+   <li><a href='/editjournal'><?_ml .maplinks.edit-entries _ml?></a></li>
+   <li><a href='/tools/recent_comments'><?_ml .maplinks.manage-comments _ml?></a></li>
+   <li><a href='/manage/tags'><?_ml .maplinks.manage-tags _ml?></a></li>
+   <li><a href='/tools/memories'><?_ml .maplinks.manage-memories _ml?></a></li>
    <li><a href='/manage/profile'><?_ml .maplinks.manage-profile _ml?></a></li>
-   <li><a href='/editpics.bml'><?_ml .maplinks.manage-userpics _ml?></a></li>
-   <li><a href='/poll/create.bml'><?_ml .maplinks.create-poll _ml?></a></li>
+   <li><a href='/editpics'><?_ml .maplinks.manage-userpics _ml?></a></li>
+   <li><a href='/poll/create'><?_ml .maplinks.create-poll _ml?></a></li>
   </ul></dd>
  </dt></dl>
 
  <dl><dt><?_code return BML::ml('.maplinks.manage-readlist-title', { sitename => $LJ::SITENAMESHORT }); _code?></dt>
   <dd><ul>
    <li><a href='/manage/circle/'><?_ml .maplinks.manage-readlist _ml?></a></li>
-   <li><a href='/manage/circle/editfilters.bml'><?_ml .maplinks.manage-groups _ml?></a></li>
-   <li><a href='/manage/circle/filter.bml'><?_ml .maplinks.filter-readlist  _ml?></a></li>
+   <li><a href='/manage/circle/editfilters'><?_ml .maplinks.manage-groups _ml?></a></li>
+   <li><a href='/manage/circle/filter'><?_ml .maplinks.filter-readlist  _ml?></a></li>
    <li><a href='/syn'><?_ml .maplinks.synfeeds _ml?></a></li>
   </ul></dd>
  </dt></dl>
 
  <dl><dt><?_code return BML::ml('.maplinks.manage-invite-friend-title', { sitename => $LJ::SITENAMESHORT }); _code?></dt>
   <dd><ul>
-   <li><a href='/manage/circle/invite.bml'><?_ml .maplinks.invite-friend _ml?></a></li>
+   <li><a href='/manage/circle/invite'><?_ml .maplinks.invite-friend _ml?></a></li>
   </ul></dd>
  </dt></dl>
 
@@ -65,29 +65,29 @@ body<=
    <li><a href='/manage/settings'><?_ml .maplinks.manage-settings _ml?></a></li>
    <li><a href='/inbox'><?_ml .maplinks.inbox _ml?></a></li>
    <li><a href='/shop'><?_ml .maplinks.upgrade _ml?></a></li>
-   <li><a href='/changepassword.bml'><?_ml .maplinks.changepassword _ml?></a></li>
-   <li><a href='/accountstatus.bml'><?_ml .maplinks.changestatus _ml?></a></li>
+   <li><a href='/changepassword'><?_ml .maplinks.changepassword _ml?></a></li>
+   <li><a href='/accountstatus'><?_ml .maplinks.changestatus _ml?></a></li>
   </ul></dd>
  </dt></dl>
 
  <dl><dt><?_code return BML::ml('.maplinks.customize-title', { sitename => $LJ::SITENAMESHORT }); _code?></dt>
   <dd><ul>
    <li><a href='/customize'><?_ml .maplinks.selectstyle _ml?></a></li>
-   <li><a href='/customize/options.bml'><?_ml .maplinks.customizestyle _ml?></a></li>
-   <li><a href='/customize/options.bml?group=linkslist'><?_ml .maplinks.manage-linkslist _ml?></a></li>
-   <li><a href='/support/faqbrowse.bml?faqcat=styles'><?_ml .maplinks.about-customizing _ml?></a></li>
+   <li><a href='/customize/options'><?_ml .maplinks.customizestyle _ml?></a></li>
+   <li><a href='/customize/options?group=linkslist'><?_ml .maplinks.manage-linkslist _ml?></a></li>
+   <li><a href='/support/faqbrowse?faqcat=styles'><?_ml .maplinks.about-customizing _ml?></a></li>
    <li><a href='/customize/advanced/'><?_ml .maplinks.advanced-customization _ml?></a></li>
-   <li><a href='/customize/advanced/layerbrowse.bml'><?_ml .maplinks.layer-browser _ml?></a></li>
+   <li><a href='/customize/advanced/layerbrowse'><?_ml .maplinks.layer-browser _ml?></a></li>
    <li><a href='/doc/s2'><?_ml .maplinks.s2-manual _ml?></a></li>
   </ul></dd>
  </dt></dl>
 
  <dl><dt><?_code return BML::ml('.maplinks.community-title', { sitename => $LJ::SITENAMESHORT }); _code?></dt>
   <dd><ul>
-   <li><a href='/community/create.bml'><?_ml .maplinks.create-comm _ml?></a></li>
-   <li><a href='/community/manage.bml'><?_ml .maplinks.manage-comm _ml?></a></li>
-   <li><a href='/manage/invites.bml'><?_ml .maplinks.manage-invites _ml?></a></li>
-   <li><a href='/community/search.bml'><?_ml .maplinks.search-comm _ml?></a></li>
+   <li><a href='/community/create'><?_ml .maplinks.create-comm _ml?></a></li>
+   <li><a href='/community/manage'><?_ml .maplinks.manage-comm _ml?></a></li>
+   <li><a href='/manage/invites'><?_ml .maplinks.manage-invites _ml?></a></li>
+   <li><a href='/community/search'><?_ml .maplinks.search-comm _ml?></a></li>
   </ul></dd></dl>
 
 </div>
@@ -95,14 +95,14 @@ body<=
 
  <dl><dt><?_code return BML::ml('.maplinks.learn-site-title', { sitename => $LJ::SITENAMESHORT }); _code?></dt>
   <dd><ul>
-   <li><a href='/support/faqbrowse.bml?faqcat=about'><?_ml .maplinks.aboutus _ml?></a></li>
-   <li><a href='/legal/tos.bml'><?_ml .maplinks.tos _ml?></a></li>
-   <li><a href='/legal/privacy.bml'><?_ml .maplinks.privacy _ml?></a></li>
-   <li><a href='/legal/principles.bml'><?_ml .maplinks.principles _ml?></a></li>
-   <li><a href='/legal/diversity.bml'><?_ml .maplinks.diversity _ml?></a></li>
+   <li><a href='/support/faqbrowse?faqcat=about'><?_ml .maplinks.aboutus _ml?></a></li>
+   <li><a href='/legal/tos'><?_ml .maplinks.tos _ml?></a></li>
+   <li><a href='/legal/privacy'><?_ml .maplinks.privacy _ml?></a></li>
+   <li><a href='/legal/principles'><?_ml .maplinks.principles _ml?></a></li>
+   <li><a href='/legal/diversity'><?_ml .maplinks.diversity _ml?></a></li>
    <li><a href='/legal/'><?_ml .maplinks.legal _ml?></a></li>
-   <li><a href='/stats.bml'><?_ml .maplinks.sitestats _ml?></a></li>
-   <li><a href='staff.bml'><?_ml .maplinks.staff _ml?></a></li>
+   <li><a href='/stats'><?_ml .maplinks.sitestats _ml?></a></li>
+   <li><a href='staff'><?_ml .maplinks.staff _ml?></a></li>
   </ul></dd></dl>
 
  <dl><dt><?_code return BML::ml('.maplinks.official-journals-title', { sitename => $LJ::SITENAMESHORT }); _code?></dt>
@@ -111,31 +111,31 @@ body<=
    <li><?ljuser dw_maintenance ljuser?></li>
    <li><?ljuser dw_lounge ljuser?></li>
    <li><?ljuser dw_suggestions ljuser?></li>
-   <li><a href='/support/faqbrowse.bml?faqid=65'><?_ml .maplinks.official-journals.list _ml?></a></li>
+   <li><a href='/support/faqbrowse?faqid=65'><?_ml .maplinks.official-journals.list _ml?></a></li>
   </ul></dd></dl>
 
  <dl><dt><?_code return BML::ml('.maplinks.gethelp-title', { sitename => $LJ::SITENAMESHORT }); _code?></dt>
   <dd><ul>
-   <li><a href='/support/faq.bml'><?_ml .maplinks.faq _ml?></a></li>
-   <li><a href='/support/faqsearch.bml'><?_ml .maplinks.faqsearch _ml?></a></li>
+   <li><a href='/support/faq'><?_ml .maplinks.faq _ml?></a></li>
+   <li><a href='/support/faqsearch'><?_ml .maplinks.faqsearch _ml?></a></li>
    <li><a href='/support/'><?_ml .maplinks.support _ml?></a></li>
   </ul></dd></dl>
 
  <dl><dt><?_code return BML::ml('.maplinks.explore-title', { sitename => $LJ::SITENAMESHORT }); _code?></dt>
   <dd><ul>
-   <li><a href='/directorysearch.bml'><?_ml .maplinks.directory _ml?></a></li>
-   <li><a href='/community/search.bml'><?_ml .maplinks.search-comm _ml?></a></li>
+   <li><a href='/directorysearch'><?_ml .maplinks.directory _ml?></a></li>
+   <li><a href='/community/search'><?_ml .maplinks.search-comm _ml?></a></li>
   </ul></dd></dl>
 
  <dl><dt><?_code return BML::ml('.maplinks.toys-title', { sitename => $LJ::SITENAMESHORT }); _code?></dt>
   <dd><ul>
-   <li><a href='/birthdays.bml'><?_ml .maplinks.birthdays _ml?></a></li>
+   <li><a href='/birthdays'><?_ml .maplinks.birthdays _ml?></a></li>
   </ul></dd></dl>
 
  <dl><dt><?_code return BML::ml('.maplinks.advanced-tools-title', { sitename => $LJ::SITENAMESHORT }); _code?></dt>
   <dd><ul>
    <li><a href='/admin/console'><?_ml .maplinks.console _ml?></a></li>
-   <li><a href='/admin/console/reference.bml'><?_ml .maplinks.console-reference _ml?></a></li>
+   <li><a href='/admin/console/reference'><?_ml .maplinks.console-reference _ml?></a></li>
   </ul></dd></dl>
 
 </div>
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/support/act.bml
--- a/htdocs/support/act.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/support/act.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -38,7 +38,7 @@ body<=
      LJ::Support::touch_request($spid)
        or return "<?h1 $ML{'.error'} h1?><?p $ML{'.touch.failed'} p?>";
 
-     return BML::redirect("$LJ::SITEROOT/support/see_request.bml?id=$spid")
+     return BML::redirect("$LJ::SITEROOT/support/see_request?id=$spid")
          if LJ::Support::can_close($sp, $remote);
 
      $ret .= ("<?h1 $ML{'.touched'} h1?><?p $ML{'.your.request'} " .
@@ -46,7 +46,7 @@ body<=
                                         : $ML{'.has.been.reopened'}) .
               $ML{'.please.comment'} . " p?>");
 
-     $ret .= '<br /><form method="post" action="append_request.bml">';
+     $ret .= '<br /><form method="post" action="append_request">';
      # hidden values
      $ret .= "<input type=\"hidden\" name=\"spid\" value=\"$spid\" />\n";
      $ret .= "<input type=\"hidden\" name=\"auth\" value=\"$auth\" />\n";
@@ -89,7 +89,7 @@ body<=
          remote => $remote,
          type => 'internal',
      });
-     return "<?h1 $ML{'.success'} h1?><?p " . BML::ml('.request.has.been.locked', {'requestlink'=>"href='/support/see_request.bml?id=$sp->{spid}'"}) . " p?>";
+     return "<?h1 $ML{'.success'} h1?><?p " . BML::ml('.request.has.been.locked', {'requestlink'=>"href='/support/see_request?id=$sp->{spid}'"}) . " p?>";
  }
 
  if ($action eq 'unlock') {
@@ -105,7 +105,7 @@ body<=
          remote => $remote,
          type => 'internal',
      });
-     return "<?h1 $ML{'.success'} h1?><?p ".BML::ml('.request.has.been.unlocked', {"requestlink"=>"href='/support/see_request.bml?id=$sp->{spid}'"})." p?>";
+     return "<?h1 $ML{'.success'} h1?><?p ".BML::ml('.request.has.been.unlocked', {"requestlink"=>"href='/support/see_request?id=$sp->{spid}'"})." p?>";
  }
 
  if ($action eq "close") {
@@ -144,15 +144,15 @@ body<=
          $sth->execute;
          my $next = $sth->fetchrow_array;
          if ($next) {
-             return BML::redirect("$LJ::SITEROOT/support/see_request.bml?id=$next");
+             return BML::redirect("$LJ::SITEROOT/support/see_request?id=$next");
          } else {
              return "<?h1 $ML{'.closed'} h1?>
 <ul>
-   <li>" . BML::ml('.go.back.to.request', {'back.req.url'=>"href='see_request.bml?id=$sp->{'spid'}'", 'spid'=>$sp->{'spid'}}) ."</li>
-   <li>" . BML::ml('.go.back.to.open.request', {"url"=>"href='help.bml'"}) . "</li>
-   <li>" . BML::ml('.go.back.to.category', {"url"=>"'help.bml?cat=$sp->{'_cat'}->{'catkey'}'"}) . "</li>
-   <li>" . BML::ml('.go.to.previous.next.request', {"prev.url"=>"href='see_request.bml?id=$sp->{'spid'}&amp;find=prev'", "next.url"=>"href='see_request.bml?id=$sp->{'spid'}&amp;find=next'"}) . "</li>
-   <li>" . BML::ml('.go.to.previous.next.req.cat', {"prev.url"=>"href='see_request.bml?id=$sp->{'spid'}&amp;find=cprev'", "next.url"=>"href='see_request.bml?id=$sp->{'spid'}&amp;find=cnext'"}) . "</li>
+   <li>" . BML::ml('.go.back.to.request', {'back.req.url'=>"href='see_request?id=$sp->{'spid'}'", 'spid'=>$sp->{'spid'}}) ."</li>
+   <li>" . BML::ml('.go.back.to.open.request', {"url"=>"href='help'"}) . "</li>
+   <li>" . BML::ml('.go.back.to.category', {"url"=>"'help?cat=$sp->{'_cat'}->{'catkey'}'"}) . "</li>
+   <li>" . BML::ml('.go.to.previous.next.request', {"prev.url"=>"href='see_request?id=$sp->{'spid'}&amp;find=prev'", "next.url"=>"href='see_request?id=$sp->{'spid'}&amp;find=next'"}) . "</li>
+   <li>" . BML::ml('.go.to.previous.next.req.cat', {"prev.url"=>"href='see_request?id=$sp->{'spid'}&amp;find=cprev'", "next.url"=>"href='see_request?id=$sp->{'spid'}&amp;find=cnext'"}) . "</li>
 </ul>";
          }
      } 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/support/append_request.bml
--- a/htdocs/support/append_request.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/support/append_request.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -36,7 +36,7 @@ body<=
         } else {
             $ret .= BML::ml
                 ('tos.mustread',
-                 { aopts => "target='_new' href='$LJ::SITEROOT/legal/tos.bml'" });
+                 { aopts => "target='_new' href='$LJ::SITEROOT/legal/tos'" });
         }
 
         return $ret;
@@ -57,14 +57,14 @@ body<=
     my $auth_arg = $FORM{'auth'} ? "&amp;auth=$FORM{'auth'}" : "";
     my $successlinks = BML::ml('.successlinks2',
         {   'number'    => $sp->{'spid'},
-            'aopts1'    => "href='$LJ::SITEROOT/support/see_request.bml?id=$sp->{'spid'}$auth_arg'",
-            'aopts2'    => "href='$LJ::SITEROOT/support/help.bml'",
-            'aopts3'    => "href='$LJ::SITEROOT/support/help.bml?cat=$scat->{'catkey'}'",
-            'aopts8'    => "href='$LJ::SITEROOT/support/help.bml?cat=$scat->{'catkey'}&amp;state=green'",
-            'aopts4'    => "href='$LJ::SITEROOT/support/see_request.bml?id=$sp->{'spid'}&amp;find=prev'",
-            'aopts5'    => "href='$LJ::SITEROOT/support/see_request.bml?id=$sp->{'spid'}&amp;find=next'",
-            'aopts6'    => "href='$LJ::SITEROOT/support/see_request.bml?id=$sp->{'spid'}&amp;find=cprev'",
-            'aopts7'    => "href='$LJ::SITEROOT/support/see_request.bml?id=$sp->{'spid'}&amp;find=cnext'",
+            'aopts1'    => "href='$LJ::SITEROOT/support/see_request?id=$sp->{'spid'}$auth_arg'",
+            'aopts2'    => "href='$LJ::SITEROOT/support/help'",
+            'aopts3'    => "href='$LJ::SITEROOT/support/help?cat=$scat->{'catkey'}'",
+            'aopts8'    => "href='$LJ::SITEROOT/support/help?cat=$scat->{'catkey'}&amp;state=green'",
+            'aopts4'    => "href='$LJ::SITEROOT/support/see_request?id=$sp->{'spid'}&amp;find=prev'",
+            'aopts5'    => "href='$LJ::SITEROOT/support/see_request?id=$sp->{'spid'}&amp;find=next'",
+            'aopts6'    => "href='$LJ::SITEROOT/support/see_request?id=$sp->{'spid'}&amp;find=cprev'",
+            'aopts7'    => "href='$LJ::SITEROOT/support/see_request?id=$sp->{'spid'}&amp;find=cnext'",
         });
 
     ### insert record
@@ -219,7 +219,7 @@ body<=
             'fromname' => $sp->{'reqname'},
             'headers' => { 'X-Bounced-By' => $remote->{'user'} },
             'subject' => "$sp->{'subject'} (support request #$sp->{'spid'})",
-            'body' => "$message\n\n$LJ::SITEROOT/support/see_request.bml?id=$sp->{'spid'}",
+            'body' => "$message\n\n$LJ::SITEROOT/support/see_request?id=$sp->{'spid'}",
         });
 
         # close request, nobody gets credited
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/support/changenotify.bml
--- a/htdocs/support/changenotify.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/support/changenotify.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -14,7 +14,7 @@ body<=
  my $mode = $FORM{'mode'} || "modify";
 
  unless ($remote) {
-     push @errors, BML::ml('.mustlogin', {login=>"href=\"/login.bml?ret=1\""});
+     push @errors, BML::ml('.mustlogin', {login=>"href=\"/login?ret=1\""});
  }
  if ($mode eq "save" && ! LJ::did_post) {
      push @errors, "<?requirepost?>";
@@ -28,7 +28,7 @@ body<=
  if ($mode eq "modify")
  {
      my $ret = "";
-     $ret .= "<form method='post' action='changenotify.bml'>\n";
+     $ret .= "<form method='post' action='changenotify'>\n";
      $ret .= "<input type='hidden' name='mode' value='save' />\n";
 
      $ret .= "<?h1 $ML{'.chagenotify.title'} h1?>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/support/faq.bml
--- a/htdocs/support/faq.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/support/faq.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -29,7 +29,7 @@ body<=
 
     # FAQ search
     $ret .= "<?p $ML{'.faq.search.text'} p?>";
-    $ret .= "<form method='GET' action='$LJ::SITEROOT/support/faqsearch.bml'>";
+    $ret .= "<form method='GET' action='$LJ::SITEROOT/support/faqsearch'>";
     $ret .= "<input type='text' name='q' size='30' />&nbsp;<input type='submit' value='$ML{'.faq.search.btn'}'>";
     $ret .= "</form>";
 
@@ -87,7 +87,7 @@ body<=
         next if $GET{'cat'} && $GET{'cat'} ne $faqcat;
         $ret .= "<?h2 ";
         $ret .= LJ::ehtml($faqcat{$faqcat}->{'faqcatname'});
-        $ret .= " (<a href='faqbrowse.bml?faqcat=$faqcat' name='$faqcat'>";
+        $ret .= " (<a href='faqbrowse?faqcat=$faqcat' name='$faqcat'>";
         $ret .= $ML{'.view.all'};
         $ret .= "</a>) h2?>\n";
         $ret .= "<ul class='faqlist'>\n";
@@ -98,7 +98,7 @@ body<=
             BML::note_mod_time($faqq{$faqid}->unixmodtime);
             $q =~ s/^\s+//; $q =~ s/\s+$//;
             $q =~ s!\n!<br />!g;
-            $ret .= "<li><a href='faqbrowse.bml?faqid=$faqid'>$q</a></li>\n";
+            $ret .= "<li><a href='faqbrowse?faqid=$faqid'>$q</a></li>\n";
         }
         $ret .= "</ul>\n";
     }
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/support/faqbrowse.bml
--- a/htdocs/support/faqbrowse.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/support/faqbrowse.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -34,7 +34,7 @@ body<=
     my $faqcatarg = $GET{'faqcat'};
     
     unless ($faqidarg || $faqcatarg) {
-        return BML::redirect("faq.bml");
+        return BML::redirect("faq");
     }
     
     # make title and body references to BML scratch area
@@ -178,7 +178,7 @@ body<=
         if ($faqcatarg) {
             $$body .= "<?h1";
             $$body .= " <a style='text-decoration: none;' " .
-                      "href='faqbrowse.bml?faqid=$faqid'>&#x00bb;</a>";
+                      "href='faqbrowse?faqid=$faqid'>&#x00bb;</a>";
             $$body .= " $question h1?>";
         }
         $$body .= "<div style='margin-left: 20px;'>";
@@ -192,7 +192,7 @@ body<=
 
                 $$body .= "<div id='rm' name='rm'>";
                 my $oc = $faqcatarg ? '' : "onclick='return showAnswer();'";
-                $$body .= "<b>(&nbsp;<a $oc href='faqbrowse.bml?faqid=$faqid$q&amp;view=full'>" .
+                $$body .= "<b>(&nbsp;<a $oc href='faqbrowse?faqid=$faqid$q&amp;view=full'>" .
                     "$ML{'.more'}</a>&nbsp;)</b>";
                 $$body .= "</div>";
             }
@@ -217,7 +217,7 @@ body<=
         if (LJ::check_priv($remote, "faqedit", "*") ||
             LJ::check_priv($remote, "faqedit", $backfaqcat))
         {
-            $$body .= "<p align=\"right\"><a href=\"/admin/faq/faqedit.bml?id=$faqid\">$ML{'.edit.faq'}</a></p>";
+            $$body .= "<p align=\"right\"><a href=\"/admin/faq/faqedit?id=$faqid\">$ML{'.edit.faq'}</a></p>";
         }
 
         # this is incredibly ugly. i'm sorry.
@@ -226,7 +226,7 @@ body<=
             push @itids, LJ::Lang::get_itemid($mld->{'dmid'}, "$faqid.$_")
                 foreach qw(1question 3summary 2answer);
             my $items = join(",", map { $mld->{'dmid'} . ":" . $_ } @itids);
-            $$body .= "<p align=\"right\"><a href=\"/translate/editpage.bml?lang=$curlang&amp;items=$items\">";
+            $$body .= "<p align=\"right\"><a href=\"/translate/editpage?lang=$curlang&amp;items=$items\">";
             $$body .= "$ML{'.translate.faq'}</a></p>";
         }
 
@@ -254,19 +254,19 @@ body<=
      $$body .= qq(
          <p style="float:right; text-align:right;"><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">
          <img alt="$ML{'.cc.imgalt'}" style="border-width: 0;" src="http://i.creativecommons.org/l/by-sa/3.0/us/88x31.png" />
-         </a><br /><a href="$LJ::SITEROOT/site/opensource.bml">$ML{'.cc.licensing'}</a></p>
+         </a><br /><a href="$LJ::SITEROOT/site/opensource">$ML{'.cc.licensing'}</a></p>
      );
 
      if ($categoryname) {
-         $$body .= BML::ml('.backfaqcat3', {'aopts' => "href='/support/faqbrowse.bml?faqcat=$backfaqcat'", 'categoryname' => $categoryname}) . "<br />"
+         $$body .= BML::ml('.backfaqcat3', {'aopts' => "href='/support/faqbrowse?faqcat=$backfaqcat'", 'categoryname' => $categoryname}) . "<br />"
             if $backfaqcat && $faqidarg;
      } else {
-         $$body .= BML::ml('.backfaqcat2', {'aopts' => "href='/support/faqbrowse.bml?faqcat=$backfaqcat'"}) . "<br />"
+         $$body .= BML::ml('.backfaqcat2', {'aopts' => "href='/support/faqbrowse?faqcat=$backfaqcat'"}) . "<br />"
             if $backfaqcat && $faqidarg;
      }
 
-     $$body .= BML::ml('.backfaq2', { 'aopts' => 'href="faq.bml"' }) . "<br />";
-     $$body .= BML::ml('.backsearch', { 'aopts' => 'href="/support/faqsearch.bml"' }) . "<br />";
+     $$body .= BML::ml('.backfaq2', { 'aopts' => 'href="faq"' }) . "<br />";
+     $$body .= BML::ml('.backsearch', { 'aopts' => 'href="/support/faqsearch"' }) . "<br />";
      $$body .= BML::ml('.backsupport2', { 'aopts' => 'href="/support/"' });
 
      # we're dynamic, set title as crumb title
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/support/faqpop.bml
--- a/htdocs/support/faqpop.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/support/faqpop.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -32,7 +32,7 @@ body<=
      my $q = $f->question_html;
      $q =~ s/^\s+//; $q =~ s/\s+$//;
      $q =~ s!\n!<br />!g;
-     $ret .= "<li><a href='faqbrowse.bml?faqid=" . $f->faqid
+     $ret .= "<li><a href='faqbrowse?faqid=" . $f->faqid
          . "'>$q</a> <i>($s->{statval})</i></li>\n";
  }
  $ret .= "</ul>\n";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/support/faqsearch.bml
--- a/htdocs/support/faqsearch.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/support/faqsearch.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -93,7 +93,7 @@
 	my $ueq = LJ::eurl($q);
         my $ul = $GET{'lang'} ne $curr ? "&amp;lang=".$GET{'lang'} : '';
 
-	$body .= "<li><a href='/support/faqbrowse.bml?faqid="
+	$body .= "<li><a href='/support/faqbrowse?faqid="
             . $f->faqid . "&amp;q=$ueq$ul'>$dq</a></li>";
     }
     $body .= "</ul>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/support/help.bml
--- a/htdocs/support/help.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/support/help.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -72,7 +72,7 @@ body<=
  my $append;
  if ($state eq "closed") {
      $ret .= "<?h1 $ML{'.state.closed.title'} h1?>";
-     $ret .= "<?p ". BML::ml(".state.closed.text", {"clickurl"=>"$LJ::SITEROOT/support/help.bml?cat=$filtercat"} ) ." p?>";
+     $ret .= "<?p ". BML::ml(".state.closed.text", {"clickurl"=>"$LJ::SITEROOT/support/help?cat=$filtercat"} ) ." p?>";
  } elsif ($state eq "youreplied") {
      return "<?h1 $ML{'.state.youreplied.rem.title'} h1?>  <?p $ML{'.state.youreplied.rem.text'} p?>"
         unless $remote;
@@ -80,7 +80,7 @@ body<=
      $ret .= "<?p $ML{'.state.youreplied.text'} p?>";
  } else {
      $ret .= "<?h1 $ML{'.state.else.title'} h1?>";
-     $ret .=  BML::ml('.state.else.text', {'statelink'=>"href=\"$LJ::SITEROOT/support/help.bml?state=closed&amp;cat=$filtercat\""}) ;
+     $ret .=  BML::ml('.state.else.text', {'statelink'=>"href=\"$LJ::SITEROOT/support/help?state=closed&amp;cat=$filtercat\""}) ;
      $append = 1;
  }
 
@@ -198,7 +198,7 @@ body<=
  }
 
  # filter line:
- $ret .= "<form method='get' action='help.bml'>$ML{'.showonlyhelp'}";
+ $ret .= "<form method='get' action='help'>$ML{'.showonlyhelp'}";
  $ret .= "<input type='hidden' name='sort' value='$sort' />";
  $ret .= "<select name='state'>";
  {
@@ -235,10 +235,10 @@ body<=
  # /filter line
 
  # mass closing table
- $ret .= "<form method='post' action='/support/actmulti.bml'>" . LJ::form_auth() if $can_close && $rct;
+ $ret .= "<form method='post' action='/support/actmulti'>" . LJ::form_auth() if $can_close && $rct;
 
  # start the rest of the table
- my $uri = "$LJ::SITEROOT/support/help.bml?cat=$filtercat&state=$state";
+ my $uri = "$LJ::SITEROOT/support/help?cat=$filtercat&state=$state";
  $ret .= "<p><table class='supporttable'><tr bgcolor='#d0d0d0'>\n";
  $ret .= "<td>&nbsp;<b>X</b></td>\n" if $can_close;
  my @headers = ( id => "ID#", summary => $ML{'.th.summary'}, area => $ML{'.th.problemarea'}, date => $ML{'.th.posted'} );
@@ -325,7 +325,7 @@ body<=
                  "<input type='hidden' name='c$sp->{spid}' id='c$sp->{spid}' value='$barbg' /></td>\n";
          $js = "onclick='return doClick($sp->{spid});'";
      }
-     $ret .= "<td><b><a href=\"$LJ::SITEROOT/support/see_request.bml?id=$sp->{'spid'}\" $js>$sp->{'spid'}</a></b></td>";
+     $ret .= "<td><b><a href=\"$LJ::SITEROOT/support/see_request?id=$sp->{'spid'}\" $js>$sp->{'spid'}</a></b></td>";
      $ret .= "<td><b>$summary</b>$des</td>\n";
      $ret .= "<td>$probarea</td>\n";
      $ret .= "<td nowrap='nowrap'><font size='-1'>$age</font></td>\n";
@@ -340,7 +340,7 @@ body<=
      my $time = time();
      $ret .= LJ::html_hidden('ids', join(':', map { $_->{spid} } @support_log),
                              'spcatid', $fcat->{spcatid},
-                             'ret', "/support/help.bml?state=$state&cat=$filtercat&time=$time");
+                             'ret', "/support/help?state=$state&cat=$filtercat&time=$time");
      $ret .= "<br />";
      $ret .= LJ::html_submit('action:move', 'Move Marked Requests');
      $ret .= " to ";
@@ -357,7 +357,7 @@ body<=
      $ret .= "</form>";
  }
  $ret .= "<?hr?>";
- $ret .= "<p>".BML::ml('.notifylink', {url=>'href="./changenotify.bml"'})."</p>";
+ $ret .= "<p>".BML::ml('.notifylink', {url=>'href="./changenotify"'})."</p>";
  $ret .= "<p>".BML::ml('.backlink', {backurl=>'href="./"'})."</p>";
 
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/support/history.bml
--- a/htdocs/support/history.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/support/history.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -81,7 +81,7 @@ body<=
 
                 # print out this request row
                 $ret .= '<tr>';
-                $ret .= "<td><a href=\"see_request.bml?id=$reqs{$id}->{spid}\">$reqs{$id}->{subject}</a></td>\n";
+                $ret .= "<td><a href=\"see_request?id=$reqs{$id}->{spid}\">$reqs{$id}->{subject}</a></td>\n";
                 $ret .= "<td align='center'>$reqs{$id}->{state}</td>\n";
                 $ret .= '<td align="center">';
                 if ($reqs{$id}->{state} eq 'closed' && $reqs{$id}->{winner}) {
@@ -102,7 +102,7 @@ body<=
     }
 
     $ret .= "<table><tr><th colspan='2'>Search for Requests</th></tr>";
-    $ret .= "<form method='get' action='history.bml'>";
+    $ret .= "<form method='get' action='history'>";
     $ret .= "<tr><td>By Email:</td><td><input type='text' name='email'></td></tr>";
     $ret .= "<tr><td>By Username:</td><td><input type='text' name='user'></td></tr>";
     $ret .= "<tr><td>By Userid:</td><td><input type='text' name='userid'></td></tr>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/support/see_request.bml
--- a/htdocs/support/see_request.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/support/see_request.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -63,7 +63,7 @@ head<=
         else
         {
             faqUrl.style.display = 'inline';
-            faqUrl.href = 'faqbrowse.bml?faqid=' + faqDropdown.value + '&view=full';
+            faqUrl.href = 'faqbrowse?faqid=' + faqDropdown.value + '&view=full';
         }
         return false;
     }
@@ -189,9 +189,9 @@ body<=
         my ($foundspid) = $dbr->selectrow_array("SELECT spid FROM support WHERE state='open' $spcatand $clause ".
                                                 "ORDER BY spid $sort LIMIT 1");
         if ($foundspid) {
-            return BML::redirect("see_request.bml?id=$foundspid");
+            return BML::redirect("see_request?id=$foundspid");
         } else {
-            my $goback = BML::ml('.goback.text', {request_link=>"href='see_request.bml?id=$spid'", spid=>$spid}) if $sp;
+            my $goback = BML::ml('.goback.text', {request_link=>"href='see_request?id=$spid'", spid=>$spid}) if $sp;
             my $what = $find eq 'next' || $find eq 'cnext' ? $ML{'.next'} : $ML{'.previous'};
             my $cat = $ML{'.incat'}  if $find eq 'cnext' || $find eq 'cprev';
             return "<?h1 $ML{'.error'} h1?>".BML::ml('.error.text2', {what=>$what, cat=>$cat})." $goback";
@@ -332,11 +332,11 @@ body<=
 
         if ($show_history{user} || $show_history{email}) {
             $ret .= $sp->{reqtype} eq 'user' && $show_history{user} ?
-                    "$ename <a href=\"history.bml?user=$u->{user}\">" . LJ::ehtml($u->{name}) . "</a>" :
+                    "$ename <a href=\"history?user=$u->{user}\">" . LJ::ehtml($u->{name}) . "</a>" :
                     "$ename";
 
             my $email_string = " ($visemail)" if $has_vs || $has_sh;
-            $email_string = " (<a href=\"history.bml?email=" . LJ::eurl($email) . "\">$email</a>)" if $show_history{email};
+            $email_string = " (<a href=\"history?email=" . LJ::eurl($email) . "\">$email</a>)" if $show_history{email};
             $ret .= $email_string;
         } else {
             # default view
@@ -385,7 +385,7 @@ body<=
                         $ret .= "$lay: none, ";
                         next;
                     }
-                    $ret .= "$lay: <a href='$LJ::SITEROOT/customize/advanced/layerbrowse.bml?id=$lid'>";
+                    $ret .= "$lay: <a href='$LJ::SITEROOT/customize/advanced/layerbrowse?id=$lid'>";
                     $ret .= (defined $pub->{$lid} ? 'public' : 'custom') . "</a>, ";
                 }
             } else {
@@ -407,7 +407,7 @@ body<=
         my $extraval = sub {
             return '' unless LJ::check_priv($remote, 'siteadmin', 'users') ||
                              LJ::check_priv($remote, 'siteadmin', '*');
-            return " (<a href='$LJ::SITEROOT/register.bml?foruser=$u->{user}'>$ML{'.resend.validation.email'}</a>)";
+            return " (<a href='$LJ::SITEROOT/register?foruser=$u->{user}'>$ML{'.resend.validation.email'}</a>)";
         };
 
         $ret .= "<br />" . $ML{'.email.validated'};
@@ -425,9 +425,9 @@ body<=
 
         if ($view_history || $view_userlog) {
             $ret .= "<br />$ML{'.view'}: ";
-            $ret .= "<a href='$LJ::SITEROOT/admin/statushistory.bml?user=$u->{user}'>$ML{'.statushistory'}</a> "
+            $ret .= "<a href='$LJ::SITEROOT/admin/statushistory?user=$u->{user}'>$ML{'.statushistory'}</a> "
                 if $view_history;
-            $ret .= "<a href='$LJ::SITEROOT/admin/userlog.bml?user=$u->{user}'>userlog</a> "
+            $ret .= "<a href='$LJ::SITEROOT/admin/userlog?user=$u->{user}'>userlog</a> "
                 if $view_userlog;
         }
 
@@ -436,9 +436,9 @@ body<=
 
     $ret .= "<tr><td align='right' nowrap='nowrap'><b>$ML{'.supportcategory'}:</b></td><td>";
     if (LJ::Support::can_read_cat($sp->{_cat}, $remote)) {
-        $ret .= "<a href='$LJ::SITEROOT/support/help.bml?cat=$sp->{_cat}->{'catkey'}'>$problemarea</a>";
-        $ret .= " [<a href='$LJ::SITEROOT/support/see_request.bml?id=$sp->{'spid'}&amp;find=cprev'>$ML{'.previous'}</a>|";
-        $ret .= "<a href='$LJ::SITEROOT/support/see_request.bml?id=$sp->{'spid'}&amp;find=cnext'>$ML{'.next'}</a>]";
+        $ret .= "<a href='$LJ::SITEROOT/support/help?cat=$sp->{_cat}->{'catkey'}'>$problemarea</a>";
+        $ret .= " [<a href='$LJ::SITEROOT/support/see_request?id=$sp->{'spid'}&amp;find=cprev'>$ML{'.previous'}</a>|";
+        $ret .= "<a href='$LJ::SITEROOT/support/see_request?id=$sp->{'spid'}&amp;find=cnext'>$ML{'.next'}</a>]";
     } else {
         $ret .= $problemarea;
     }
@@ -492,15 +492,15 @@ body<=
     $ret .= "<tr><td align='right'><b>$ML{'.status'}:</b></td><td>$state";
     if ($can_close || $can_reopen) {
         if ($sp->{'state'} eq "open" && $can_close) {
-            $ret .= ", <a href='act.bml?close;$sp->{'spid'};$sp->{'authcode'}'><b>$ML{'.close.without.credit'}</b></a>";
+            $ret .= ", <a href='act?close;$sp->{'spid'};$sp->{'authcode'}'><b>$ML{'.close.without.credit'}</b></a>";
         } elsif ($sp->{state} eq 'closed') {
             my $permastatus = LJ::Support::is_locked($sp);
             $ret .= $sp->{'state'} eq "closed" && !$permastatus ?
-                    ", <a href='act.bml?touch;$sp->{'spid'};$sp->{'authcode'}'><b>$ML{'.reopen.this.request'}</b></a>" : "";
+                    ", <a href='act?touch;$sp->{'spid'};$sp->{'authcode'}'><b>$ML{'.reopen.this.request'}</b></a>" : "";
             if (LJ::Support::can_lock($sp, $remote)) {
                 $ret .= $permastatus ?
-                    ", <a href='act.bml?unlock;$sp->{spid};$sp->{authcode}'><b>$ML{'.unlock.request'}</b></a>" :
-                    ", <a href='act.bml?lock;$sp->{spid};$sp->{authcode}'><b>$ML{'.lock.request'}</b></a>";
+                    ", <a href='act?unlock;$sp->{spid};$sp->{authcode}'><b>$ML{'.unlock.request'}</b></a>" :
+                    ", <a href='act?lock;$sp->{spid};$sp->{authcode}'><b>$ML{'.lock.request'}</b></a>";
             }
         }
     }
@@ -597,7 +597,7 @@ body<=
         elsif ($le->{'type'} eq "comment") { $what = $ML{".comment"}; }
         elsif ($le->{'type'} eq "screened") { $what = $ML{'.screened.response'}; }
 
-        my $link = "<a href='$LJ::SITEROOT/support/see_request.bml?id=$spid#e$le->{splid}'>#$le->{splid}</a>";
+        my $link = "<a href='$LJ::SITEROOT/support/see_request?id=$spid#e$le->{splid}'>#$le->{splid}</a>";
         $header .= "<span style='font-size: 0.9em;'><b>$what</b> ($link)</span><br />";
         if (LJ::is_enabled("support_response_tier") && $can_see_tier && $le->{type} eq "answer") {
             # show the answer's tier level, or if there is no tier level, show the tier level at the time of posting
@@ -608,7 +608,7 @@ body<=
         my $age = LJ::ago_text($le->{'age'});
         $header .= "<b>$ML{'.posted'}:</b> $timehelped ($age)";
         if ($can_close && $sp->{'state'} eq "open" && $le->{'type'} eq "answer") {
-            $header .= ", <a href='act.bml?close;$sp->{'spid'};$sp->{'authcode'};$le->{'splid'}'><b>$ML{'.credit.fix'}</b></a>";
+            $header .= ", <a href='act?close;$sp->{'spid'};$sp->{'authcode'};$le->{'splid'}'><b>$ML{'.credit.fix'}</b></a>";
         }
 
         my $bordercolor = "default";
@@ -628,7 +628,7 @@ body<=
             # whitespace between these two DIVs is necessary for proper
             # rendering in IE 5 for Mac OS < X
             $ret .= "<div style='text-align:center; padding: 5px;'>";
-            $ret .= "<b>$ML{'.faq.reference'}:</b><br /><a href='faqbrowse.bml?faqid=$le->{faqid}&view=full'>" . $faq->question_html . "</a></div></div>\n";
+            $ret .= "<b>$ML{'.faq.reference'}:</b><br /><a href='faqbrowse?faqid=$le->{faqid}&view=full'>" . $faq->question_html . "</a></div></div>\n";
         }
         $ret .= "<p align='left' style='margin-top: 0px; margin-bottom: 0px;'>$message</p>\n";
         $ret .= "</td></tr></table>\n";
@@ -645,7 +645,7 @@ body<=
     } elsif ($remote) {
         $ret .= "<p style='margin-bottom: 0px;'><b>$ML{'.post.comment'}:</b></p>\n";
     } else {
-        $ret .= BML::ml('.mast.login', {loginlink=>"href='$LJ::SITEROOT/login.bml?ret=1'"});
+        $ret .= BML::ml('.mast.login', {loginlink=>"href='$LJ::SITEROOT/login?ret=1'"});
         $ret .= "\n";
         return $ret;
     }
@@ -663,14 +663,14 @@ body<=
     {
         $ret .= BML::ml('.important.notes.text', {
                 sitenameshort=>$LJ::SITENAMESHORT,
-                supportlink=>"href='$LJ::SITEROOT/doc/guide/support.bml'",
+                supportlink=>"href='$LJ::SITEROOT/doc/guide/support'",
             });
         $ret .= "\n";
     }
 
     # append_request form
 
-    $ret .= "<br /><form method='post' action='append_request.bml' name='supportForm'>\n";
+    $ret .= "<br /><form method='post' action='append_request' name='supportForm'>\n";
 
     # hidden values
     $ret .= LJ::html_hidden('spid', $spid, 'auth', $auth) . "\n";
@@ -690,7 +690,7 @@ body<=
     {
         my $dbr = LJ::get_db_reader();
         # FAQ reference
-        $ret .= "<tr valign='middle'><td align='right'>$ML{'.reference'} <a href='faq.bml'>$ML{'.faq'}</a>:</td><td colspan='2'>\n";
+        $ret .= "<tr valign='middle'><td align='right'>$ML{'.reference'} <a href='faq'>$ML{'.faq'}</a>:</td><td colspan='2'>\n";
 
         my %faqcat;
         my %faqq;
@@ -742,7 +742,7 @@ body<=
         $ret .= LJ::html_select({ 'name' => 'faqid', 'onchange' => 'updateFaqLink()' }, @faqlist) . "\n";
         $ret .= qq(<script language="JavaScript"><!--
             if (document.getElementById)
-                document.write("<a href='faq.bml' id='faqlink'>View FAQ</a>");
+                document.write("<a href='faq' id='faqlink'>View FAQ</a>");
         //--></script>);
         $ret .= "</td></tr>\n";
     }
@@ -889,7 +889,7 @@ body<=
                                             undef, $stock_spcatid);
 
         if ($rows && @$rows) {
-            $ret .= "<tr valign='top'><td align='right'><a href='$LJ::SITEROOT/support/stock_answers.bml?spcatid=$stock_spcatid'>Stock answers</a>:</td><td colspan='2'>\n";
+            $ret .= "<tr valign='top'><td align='right'><a href='$LJ::SITEROOT/support/stock_answers?spcatid=$stock_spcatid'>Stock answers</a>:</td><td colspan='2'>\n";
             $ret .= "<script type='text/javascript'>\n";
             $ret .= "var Iarr = new Array();\n";
             my $i = 0;
@@ -946,8 +946,8 @@ _code?>
     my $spid = $FORM{'id'}+0;
     my $ret;
     
-    $ret .= BML::ml('.see.preview', {preview_link=>"href='$LJ::SITEROOT/support/see_request.bml?id=$spid&amp;find=prev'"});
-    $ret .= BML::ml('.see.next', {next_link=>"href='$LJ::SITEROOT/support/see_request.bml?id=$spid&amp;find=next'"});
+    $ret .= BML::ml('.see.preview', {preview_link=>"href='$LJ::SITEROOT/support/see_request?id=$spid&amp;find=prev'"});
+    $ret .= BML::ml('.see.next', {next_link=>"href='$LJ::SITEROOT/support/see_request?id=$spid&amp;find=next'"});
     
     return $ret; 
 }
@@ -956,7 +956,7 @@ _code?>
 <?_code
 {
     my $ret;
-    $ret .= BML::ml('.help.link', {helplink=>'href="help.bml"'});
+    $ret .= BML::ml('.help.link', {helplink=>'href="help"'});
     $ret .= BML::ml('.back.link', {backlink=>'href="./"'});
 
     return $ret;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/support/stock_answers.bml
--- a/htdocs/support/stock_answers.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/support/stock_answers.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -46,7 +46,7 @@ body<=
     my $ansid = ($GET{ansid} || 0) + 0;
 
     my $ret = "<?h1 $ML{'.stock.answers'} h1?>";
-    my $self = "$LJ::SITEROOT/support/stock_answers.bml";
+    my $self = "$LJ::SITEROOT/support/stock_answers";
 
     if ($POST{'action:delete'}) {
         my $dbh = LJ::get_db_writer();
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/syn/index.bml
--- a/htdocs/syn/index.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/syn/index.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -122,7 +122,7 @@ body<=
                                                       "WHERE s.synurl=? AND s.userid=u.userid",
                                                       undef, $syn_url);
                     if ($adu) {
-                        return BML::redirect("$LJ::SITEROOT/manage/circle/add.bml?user=$adu->{user}&action=subscribe");
+                        return BML::redirect("$LJ::SITEROOT/manage/circle/add?user=$adu->{user}&action=subscribe");
                     } else {
                         $res = $ua->get($syn_url);
                         $content = $res && $res->is_success ? $res->content : "";
@@ -166,7 +166,7 @@ body<=
 
         # at this point, we have a new account, or an old account, but we have an account, so
         # let's redirect them to the add page
-        return BML::redirect("$LJ::SITEROOT/manage/circle/add.bml?user=$su->{user}&action=subscribe");
+        return BML::redirect("$LJ::SITEROOT/manage/circle/add?user=$su->{user}&action=subscribe");
     }
 
     # get most popular feeds from memcache
@@ -202,7 +202,7 @@ body<=
     # intro paragraph
     my $title = BML::ml('.using.title', {'sitename' => $LJ::SITENAME});
     my $ret = "<?h1 $title h1?><?p $ML{'.using.text'} p?>";
-    $ret .= "<?p " . BML::ml('.top1000.text', {'aopts' => "href='$LJ::SITEROOT/syn/list.bml'"}) . " p?>";
+    $ret .= "<?p " . BML::ml('.top1000.text', {'aopts' => "href='$LJ::SITEROOT/syn/list'"}) . " p?>";
     $ret .= "<?p $ML{'.promo.text'} p?>";
 
     $ret .= "<form method='post' action='./'>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/talkread.bml
--- a/htdocs/talkread.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/talkread.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -521,13 +521,13 @@ body<=
             $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>";
             $ret .= "<td>$ML{'.replysuspended'}";
             if (LJ::Talk::can_delete($remote, $u, $up, $userpost)) {
-                $ret .= " <a href='$LJ::SITEROOT/delcomment.bml?${jargent}id=$dtid'>" . LJ::img("btn_del", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>";
+                $ret .= " <a href='$LJ::SITEROOT/delcomment?${jargent}id=$dtid'>" . LJ::img("btn_del", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>";
             }
             if ($post->{state} ne 'F' && LJ::Talk::can_freeze($remote, $u, $up, $userpost)) {
-                $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=freeze&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_freeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>";
+                $ret .= "<a href='$LJ::SITEROOT/talkscreen?mode=freeze&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_freeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>";
             }
             if ($post->{state} eq 'F' && LJ::Talk::can_unfreeze($remote, $u, $up, $userpost)) {
-                $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=unfreeze&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_unfreeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>";
+                $ret .= "<a href='$LJ::SITEROOT/talkscreen?mode=unfreeze&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_unfreeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>";
             }
             $ret .= "</td></tr></table>\n";
         } else {
@@ -592,27 +592,27 @@ body<=
                 }
 
                 if (LJ::Talk::can_delete($remote, $u, $up, $userpost)) {
-                    $ret .= "<a href='$LJ::SITEROOT/delcomment.bml?${jargent}id=$dtid'>" . LJ::img("btn_del", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>";
+                    $ret .= "<a href='$LJ::SITEROOT/delcomment?${jargent}id=$dtid'>" . LJ::img("btn_del", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>";
                 }
 
                 if ($post->{'state'} ne 'F' &&
                     LJ::Talk::can_freeze($remote, $u, $up, $userpost)) {
-                    $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=freeze&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_freeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>";
+                    $ret .= "<a href='$LJ::SITEROOT/talkscreen?mode=freeze&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_freeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>";
                 }
 
                 if ($post->{'state'} eq 'F' &&
                     LJ::Talk::can_unfreeze($remote, $u, $up, $userpost)) {
-                    $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=unfreeze&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_unfreeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>";
+                    $ret .= "<a href='$LJ::SITEROOT/talkscreen?mode=unfreeze&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_unfreeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>";
                 }
 
                 if ($post->{'state'} ne 'S' &&
                     LJ::Talk::can_screen($remote, $u, $up, $userpost)) {
-                    $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=screen&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_scr", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>";
+                    $ret .= "<a href='$LJ::SITEROOT/talkscreen?mode=screen&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_scr", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>";
                 }
 
                 if ($post->{'state'} eq 'S' &&
                     LJ::Talk::can_unscreen($remote, $u, $up, $userpost)) {
-                    $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=unscreen&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_unscr", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>";
+                    $ret .= "<a href='$LJ::SITEROOT/talkscreen?mode=unscreen&amp;${jargent}talkid=$dtid'>" . LJ::img("btn_unscr", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>";
                 }
 
                 if ($remote && $remote->can_use_esn) {
@@ -653,7 +653,7 @@ body<=
                         }
                     }
 
-                    my $track_url = "$LJ::SITEROOT/manage/subscriptions/comments.bml?journal=$u->{'user'}&amp;talkid=$dtid";
+                    my $track_url = "$LJ::SITEROOT/manage/subscriptions/comments?journal=$u->{'user'}&amp;talkid=$dtid";
                     $ret .= "<a href='$track_url'>" . LJ::img($track_img, '', {'align' => 'absmiddle'}) . "</a>";
                 }
 
@@ -695,7 +695,7 @@ body<=
                        if ($post->{state} eq 'S') {
                            if ( LJ::Talk::can_unscreen( $remote, LJ::load_userid( $item->{ownerid} ), $item, $u ) ) {
                                # show unscreen to reply link id comment screened
-                               $ret .= "(<a href='$LJ::SITEROOT/talkscreen.bml?mode=unscreen&amp;${jargent}talkid=$dtid'>$T{'unscreentoreply'}</a>) ";
+                               $ret .= "(<a href='$LJ::SITEROOT/talkscreen?mode=unscreen&amp;${jargent}talkid=$dtid'>$T{'unscreentoreply'}</a>) ";
                            } else {
                                $ret .= "($T{ 'screened' })";
                            }
@@ -770,7 +770,7 @@ body<=
         #
         my $posturl = LJ::Talk::talkargs($talkurl, "mode=reply", $stylemine, $formatlight);
 
-        $ret .= "<form style='display: inline' method='post' action='$LJ::SITEROOT/talkmulti.bml' name='multiform' id='multiform' >";
+        $ret .= "<form style='display: inline' method='post' action='$LJ::SITEROOT/talkmulti' name='multiform' id='multiform' >";
 
         # Quick Reply when posting a new top level comment
         # requires setup when logged in.
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/talkscreen.bml
--- a/htdocs/talkscreen.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/talkscreen.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -49,7 +49,7 @@ _info?><?_code
             " newalt: \"$alttext\", id: $dtalkid, \n" .
             " oldimage: \"$LJ::IMGPREFIX/$stockimg->{$mode}\",\n " .
             " newimage: '$LJ::IMGPREFIX/$stockimg->{$newmode}',\n " .
-            " newurl: '$LJ::SITEROOT/talkscreen.bml?mode=$newmode&journal=$journal&talkid=$dtalkid' \n" .
+            " newurl: '$LJ::SITEROOT/talkscreen?mode=$newmode&journal=$journal&talkid=$dtalkid' \n" .
             "};\n";
         BML::finish();
         return $res;
@@ -116,7 +116,7 @@ _info?><?_code
             $error->($ML{'error.invalidform'}) unless LJ::check_form_auth();
         } else {
             $body .= "<?h1 $ML{'.screen.sure.title'} h1?><?p $ML{'.screen.sure.body'} p?>";
-            $body .= "<p><form method='POST' action='talkscreen.bml'><center>\n";
+            $body .= "<p><form method='POST' action='talkscreen'><center>\n";
             $body .= LJ::form_auth();
             $body .= LJ::html_hidden(mode => 'screen', 'talkid' => $talkid,
                                     journal => $u->{user}, confirm => 'Y');
@@ -141,7 +141,7 @@ _info?><?_code
             $error->($ML{'error.invalidform'}) unless LJ::check_form_auth();
      } else {
          $body .= "<?h1 $ML{'.unscreen.sure.title'} h1?><?p $ML{'.unscreen.sure.body'} p?>";
-         $body .= "<p><form method='POST' action='talkscreen.bml'><center>\n";
+         $body .= "<p><form method='POST' action='talkscreen'><center>\n";
          $body .= LJ::form_auth();
          $body .= LJ::html_hidden(mode => 'unscreen', 'talkid' => $talkid,
                                  journal => $u->{user}, confirm => 'Y');
@@ -170,7 +170,7 @@ _info?><?_code
             $error->($ML{'error.invalidform'}) unless LJ::check_form_auth();
      } else {
          $body .= "<?h1 $ML{'.freeze.sure.title'} h1?><?p $ML{'.freeze.sure.body'} p?>";
-         $body .= "<p><form method='post' action='talkscreen.bml'><center>\n";
+         $body .= "<p><form method='post' action='talkscreen'><center>\n";
          $body .= LJ::form_auth();
          $body .= LJ::html_hidden(mode => 'freeze', 'talkid' => $talkid,
                                  journal => $u->{user}, confirm => 'Y');
@@ -198,7 +198,7 @@ _info?><?_code
             $error->($ML{'error.invalidform'}) unless LJ::check_form_auth();
      } else {
          $body .= "<?h1 $ML{'.unfreeze.sure.title'} h1?><?p $ML{'.unfreeze.sure.body'} p?>";
-         $body .= "<p><form method='post' action='talkscreen.bml'><center>\n";
+         $body .= "<p><form method='post' action='talkscreen'><center>\n";
          $body .= LJ::form_auth();
          $body .= LJ::html_hidden(mode => 'unfreeze', 'talkid' => $talkid,
                                  journal => $u->{user}, confirm => 'Y');
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/tools/emailmanage.bml
--- a/htdocs/tools/emailmanage.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/tools/emailmanage.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -72,7 +72,7 @@ body<=
     my $ret;
     
     # authas switcher form
-    $ret .= "<form method='get' action='emailmanage.bml'>\n";
+    $ret .= "<form method='get' action='emailmanage'>\n";
     $ret .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} }) . "\n";
     $ret .= "</form>\n\n";
 
@@ -85,7 +85,7 @@ body<=
 
     unless ($u->{'status'} eq "A") {
         $ret .= "<?h1 $ML{'.notvalidated.title'} h1?>\n";
-        $ret .= "<?p " . BML::ml('.notvalidated.text2', {'email' => $u->email_raw, 'aopts' => "href='$LJ::SITEROOT/register.bml'"}) . " p?>";
+        $ret .= "<?p " . BML::ml('.notvalidated.text2', {'email' => $u->email_raw, 'aopts' => "href='$LJ::SITEROOT/register'"}) . " p?>";
         return $ret;
     }
 
@@ -116,7 +116,7 @@ body<=
 
     if ($rows) {
         my $getextra = $authas ne $remote->{'user'} ? "?authas=$authas" : '';
-        $ret .= "<form method='post' action='emailmanage.bml$getextra'>";
+        $ret .= "<form method='post' action='emailmanage$getextra'>";
         $ret .= LJ::form_auth();
         $ret .= "<table border='1' cellpadding='2' style='margin-bottom: 3px;'>\n";
         $ret .= $rows;
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/tools/endpoints/ctxpopup.bml
--- a/htdocs/tools/endpoints/ctxpopup.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/tools/endpoints/ctxpopup.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -66,8 +66,8 @@
     # actions to generate auth tokens for
     my @actions = ();
 
-    $ret{url_addtrust} = "$LJ::SITEROOT/manage/circle/add.bml?user=" . $u->{user} . "&action=access";
-    $ret{url_addwatch} = "$LJ::SITEROOT/manage/circle/add.bml?user=" . $u->{user} . "&action=subscribe";
+    $ret{url_addtrust} = "$LJ::SITEROOT/manage/circle/add?user=" . $u->{user} . "&action=access";
+    $ret{url_addwatch} = "$LJ::SITEROOT/manage/circle/add?user=" . $u->{user} . "&action=subscribe";
 
     my $up = $u->userpic;
     if ($up) {
@@ -100,8 +100,8 @@
     $ret{is_logged_in}  = $remote ? 1 : 0;
 
     if ($u->is_comm) {
-        $ret{url_joincomm}   = "$LJ::SITEROOT/community/join.bml?comm=" . $u->{user};
-        $ret{url_leavecomm}  = "$LJ::SITEROOT/community/leave.bml?comm=" . $u->{user};
+        $ret{url_joincomm}   = "$LJ::SITEROOT/community/join?comm=" . $u->{user};
+        $ret{url_leavecomm}  = "$LJ::SITEROOT/community/leave?comm=" . $u->{user};
         $ret{is_member} = $remote->member_of( $u ) if $remote;
         $ret{is_closed_membership} = $u->is_closed_membership;
 
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/tools/memadd.bml
--- a/htdocs/tools/memadd.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/tools/memadd.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -110,7 +110,7 @@
         $body = "The entry that this memory references has been deleted.<br/>";
 
         if ($memoryu->{user} eq $authas && defined $memory) {
-            $body .= "<br /><form action='memadd.bml$authextra' method='POST'>";
+            $body .= "<br /><form action='memadd$authextra' method='POST'>";
             $body .= LJ::form_auth();
             $body .= LJ::html_hidden(journal => $GET{journal}) if $GET{journal};
             $body .= LJ::html_hidden(itemid => $GET{itemid});
@@ -204,7 +204,7 @@
         # already then wants to add it to community c, when u clicks the "add memory"
         # link on p, u gets the "edit entry" page and they need to be able to switch
         # to c.
-        $body .= "<form method='get' action='memadd.bml'>\n";
+        $body .= "<form method='get' action='memadd'>\n";
         $body .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} }) . "\n";
         $body .= LJ::html_hidden(journal => $GET{journal}) if $GET{journal};
         $body .= LJ::html_hidden(itemid => $GET{itemid});
@@ -224,7 +224,7 @@
         # we still need to pass the dbitemid and not the itemid to ourself.
         $getextra .= "&amp;journal=$journal" unless $oldstyle;
 
-        $body .= "<form method='post' action='memadd.bml$getextra'>";
+        $body .= "<form method='post' action='memadd$getextra'>";
         $body .= LJ::form_auth();
         $body .= LJ::html_hidden(mode => "save");
 
@@ -353,7 +353,7 @@
         my $entry = LJ::Entry->new($ju, jitemid => $itemid);
         $body .= "<ul>";
         $body .= "<li><a href='" . $entry->url . "'>$ML{'.body.added.next.entry'}</a></li>";
-        $body .= "<li><a href='$LJ::SITEROOT/tools/memories.bml?user=" . $memoryu->user . "'>"
+        $body .= "<li><a href='$LJ::SITEROOT/tools/memories?user=" . $memoryu->user . "'>"
                . "$ML{'.body.added.next.view'}</a></li>";
         $body .= "<li><a href='" . $remote->journal_base . "/read'>$ML{'.body.added.next.friends'}</a></li>";
         $body .= "<li>" . BML::ml(".body.added.next.journal", { 'user' => $ju->ljuser_display }) . "</li>";
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/tools/memories.bml
--- a/htdocs/tools/memories.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/tools/memories.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -35,7 +35,7 @@
  my $authasarge;
  unless (LJ::did_post()) {
      if ($authasu) {
-         $body .= "<form method='get' action='memories.bml'>\n";
+         $body .= "<form method='get' action='memories'>\n";
          $body .= LJ::make_authas_select($remote, { 'authas' => $authasu->{user} }) . "\n";
          $body .= LJ::html_hidden(keyword => $GET{keyword}) if $GET{keyword};
          $body .= "</form>\n\n";
@@ -65,7 +65,7 @@
      # If there's a 'user', that user doesn't exist.
      # Otherwise, complain about the absence of 'user' / suggest logging in.
      $title = $ML{'Error'};
-     $body = $user eq "" ? BML::ml('.login', { 'aopts' => 'href="/login.bml?ret=1"' })
+     $body = $user eq "" ? BML::ml('.login', { 'aopts' => 'href="/login?ret=1"' })
                          : $ML{'error.username_notfound'};
      return;
  }
@@ -78,7 +78,7 @@
 
  if ( $u->is_redirect ) {
     LJ::load_user_props($u, "renamedto");
-    return BML::redirect("/tools/memories.bml?user=$u->{'renamedto'}$authasarg");
+    return BML::redirect("/tools/memories?user=$u->{'renamedto'}$authasarg");
  }
 
  $u->preload_props("opt_blockrobots", "adult_content") if $u->is_visible;
@@ -132,7 +132,7 @@
      LJ::Memories::delete_by_id($authasu, \@to_delete);
      $title = $ML{'.delete.deleted.title'};
      $body = "<?h1 $ML{'.delete.deleted.head'} h1?><?p ";
-     $body .= BML::ml('.delete.deleted.text', { aopts => "href='./memories.bml?user=$authasu->{user}'" }) . " p?>";
+     $body .= BML::ml('.delete.deleted.text', { aopts => "href='./memories?user=$authasu->{user}'" }) . " p?>";
      return;
  }
 
@@ -183,7 +183,7 @@
          $body .= BML::ml(".body.keyword", { 'keyword' => $ekw, 'user' => $user });
      }
 
-     $body .= "<form method='get' action='memories.bml'>";
+     $body .= "<form method='get' action='memories'>";
      $body .= LJ::html_hidden(keyword => $GET{keyword}) if $GET{keyword};
      $body .= LJ::html_hidden(user => $GET{user}) if $GET{user};
      $body .= LJ::html_hidden(authas => $GET{user}) if $GET{authas};
@@ -194,7 +194,7 @@
      }
      $body .= "</select> <input type='submit' value='$ML{'.form.switch'}' />";
      $body .= "</form>\n";
-     $body .= "<a href=\"/tools/memories.bml?user=$user$authasarge\">&lt;&lt; $ML{'.back'}</a>";
+     $body .= "<a href=\"/tools/memories?user=$user$authasarge\">&lt;&lt; $ML{'.back'}</a>";
 
      my $key_id;
      foreach (keys %$kwmap) {
@@ -205,7 +205,7 @@
      return $dberr->() unless defined $memoryhash;
      my @memories = $sortfunc{$sort}->( values %$memoryhash );
 
-     $body .= "<form method='post' action='./memories.bml?user=$user$authasarge'>\n" . LJ::form_auth()
+     $body .= "<form method='post' action='./memories?user=$user$authasarge'>\n" . LJ::form_auth()
          if $is_owner && $GET{multidelete};
      $body .= "<ul>\n";
      foreach my $mem (@memories) {
@@ -218,10 +218,10 @@
              my $itemid = int($mem->{'ditemid'} / 256);
              my $anum = $mem->{'ditemid'} % 256;
              $entrylink = LJ::item_link($user, $itemid, $anum);
-             $editlink = "/tools/memadd.bml?journal=$user&amp;itemid=$mem->{ditemid}$authasarge";
+             $editlink = "/tools/memadd?journal=$user&amp;itemid=$mem->{ditemid}$authasarge";
          } else {
-             $entrylink = "/talkread.bml?itemid=$mem->{ditemid}";
-             $editlink = "/tools/memadd.bml?itemid=$mem->{ditemid}$authasarge";
+             $entrylink = "/talkread?itemid=$mem->{ditemid}";
+             $editlink = "/tools/memadd?itemid=$mem->{ditemid}$authasarge";
          }
 
          my $edit = "";
@@ -257,7 +257,7 @@
     foreach keys %{$rows || {}};
  @sortedrows = sort { $a->{'keyword'} cmp $b->{'keyword'} } @sortedrows;
 
- $body .= "<form method='get' action='memories.bml'>";
+ $body .= "<form method='get' action='memories'>";
  $body .= "<input type='hidden' name='user' value=\"$user\" />";
  $body .= "$ML{'.form.filter'} <select name=\"filter\">";
  foreach my $filt ("all", "own", "other") {
@@ -278,7 +278,7 @@
          LJ::text_out(\$keyword);
          if ($keyword eq "*") { $keyword = $ML{'.uncategorized'}; }
          else { $keyword = LJ::ehtml($keyword); }
-         $body .= "<li><b><a href=\"/tools/memories.bml?user=$user&amp;keyword=$ue_keyword&amp;filter=$filter\">$keyword</a></b>: $noun\n</li>";
+         $body .= "<li><b><a href=\"/tools/memories?user=$user&amp;keyword=$ue_keyword&amp;filter=$filter\">$keyword</a></b>: $noun\n</li>";
      }
      $body .= "</ul>";
  }
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/tools/opml.bml
--- a/htdocs/tools/opml.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/tools/opml.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -7,7 +7,7 @@
     # if we don't have a current user but somebody is logged in, redirect
     # them to their own OPML page
     if ( $remote && $GET{user} eq "" ) {
-        return BML::redirect( "$LJ::SITEROOT/tools/opml.bml?user=$remote->{user}" );
+        return BML::redirect( "$LJ::SITEROOT/tools/opml?user=$remote->{user}" );
     }
 
     return "No 'user' argument" unless $GET{user};
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/tools/recent_comments.bml
--- a/htdocs/tools/recent_comments.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/tools/recent_comments.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -37,7 +37,7 @@ body<=
     my $count = $GET{show} || ($max > 25 ? 25 : $max);
 
     # authas switcher form
-    $ret .= "<form method='get' action='/tools/recent_comments.bml'>\n";
+    $ret .= "<form method='get' action='/tools/recent_comments'>\n";
     $ret .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} }) . "\n";
     $ret .= "</form>\n\n";
 
@@ -165,25 +165,25 @@ body<=
 
         unless ($r->{state} eq "D")
         {
-            $ret .= "<a href='/delcomment.bml?${jargent}id=$talkid'>";
+            $ret .= "<a href='/delcomment?${jargent}id=$talkid'>";
             $ret .= LJ::img("btn_del", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>";
             if ($r->{'state'} ne 'F') {
-                $ret .= "<a href='/talkscreen.bml?mode=freeze&amp;${jargent}talkid=$talkid'>";
+                $ret .= "<a href='/talkscreen?mode=freeze&amp;${jargent}talkid=$talkid'>";
                 $ret .= LJ::img("btn_freeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>";
             }
 
             if ($r->{'state'} eq 'F') {
-                $ret .= "<a href='/talkscreen.bml?mode=unfreeze&amp;${jargent}talkid=$talkid'>";
+                $ret .= "<a href='/talkscreen?mode=unfreeze&amp;${jargent}talkid=$talkid'>";
                 $ret .= LJ::img("btn_unfreeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>";
             }
 
             if ($r->{'state'} ne 'S') {
-                $ret .= "<a href='/talkscreen.bml?mode=screen&amp;${jargent}talkid=$talkid'>";
+                $ret .= "<a href='/talkscreen?mode=screen&amp;${jargent}talkid=$talkid'>";
                 $ret .= LJ::img("btn_scr", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>";
             }
 
             if ($r->{'state'} eq 'S') {
-                 $ret .= "<a href='/talkscreen.bml?mode=unscreen&amp;${jargent}talkid=$talkid'>";
+                 $ret .= "<a href='/talkscreen?mode=unscreen&amp;${jargent}talkid=$talkid'>";
                  $ret .= LJ::img("btn_unscr", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>";
              }
          }
@@ -268,7 +268,7 @@ body<=
                 $subject = $log_text->{"$r->{journalid} $r->{nodeid}"}[0] || "$lrow->{ditemid}.html";
                 LJ::CleanHTML::clean_subject(\$subject);
                 $subject = "$subject <a href='$logurl'>(link)</a>";
-                $delete = "&nbsp;<a href='$LJ::SITEROOT/delcomment.bml?journal=$ju->{'user'}&amp;id=$talkid'>$ML{ '.delete.link' }</a>";
+                $delete = "&nbsp;<a href='$LJ::SITEROOT/delcomment?journal=$ju->{'user'}&amp;id=$talkid'>$ML{ '.delete.link' }</a>";
             } else {
                 $subject = $ML{ '.post.deleted' };
             }
diff -r f6ceaad6862b -r 8bdc3476e3c5 htdocs/tools/recent_email.bml
--- a/htdocs/tools/recent_email.bml	Sat Aug 01 13:06:20 2009 +0000
+++ b/htdocs/tools/recent_email.bml	Sat Aug 01 14:31:59 2009 +0000
@@ -42,7 +42,7 @@ body<=
         return "Sorry, you are not able to view outgoing email."
             unless $u->get_cap("viewmailqueue");
 
-        return LJ::error_list("You must <a href=\"$LJ::SITEROOT/register.bml\">validate your email address</a> in order to view your outgoing mail.")
+        return LJ::error_list("You must <a href=\"$LJ::SITEROOT/register\">validate your email address</a> in 

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org