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 
yvi: Kaylee half-smiling, looking very pretty (Default)

[personal profile] yvi 2009-08-01 03:14 pm (UTC)(link)
( Diff: 166 files changed. )

Scary :)