Index: LedgerSMB/Form.pm
===================================================================
--- LedgerSMB/Form.pm	(revision 5786)
+++ LedgerSMB/Form.pm	(working copy)
@@ -3572,22 +3572,17 @@
             }
 
             if ( $param =~ /<\?lsmb (yy|mm|dd)/i ) {
-                my $test_param = $1;
 		# SC: XXX Does this even work anymore?
                 my $p = $param;
-                $p =~ s/(<|>|%)//g;
-                my $spc = $p;
-                $spc =~ s/\w//g;
-                $spc = substr( $spc, 0, 1 );
+                $p =~ s/lsmb//;
+                $p =~ s/[^YyMmDd]//g;
                 my %d = ( yy => 1, mm => 2, dd => 3 );
-                my @p = ();
+                my $str = $p;
 
                 my @a = $self->split_date( $myconfig->{dateformat},
                     $self->{transdate} );
-                for my $k( sort keys %d ) { push @p, $a[ $d{$k} ] 
-                                 if ( $param =~ /$k/i ) }
-                $str = join $spc, @p;
-                $var =~ s/<\?lsmb $test_param \?>/$str/i;
+                for my $k( keys %d ) { $str =~ s/$k/$a[ $d{$k} ]/i}
+                $var =~ s/\Q$param\E/$str/i;
             }
 
             if ( $param =~ /<\?lsmb curr/i ) {
@@ -3607,7 +3602,7 @@
 
     $self->{dbh}->commit if !defined $nocommit;
 
-    $var;
+    return $var;
 }
 
 =item $form->db_prepare_vars(var1, var2, ..., varI<n>)
@@ -3656,6 +3651,7 @@
         $mm = substr( "0$mm", -2 );
         $dd = substr( "0$dd", -2 );
     }
+    $dateformat = 'yyyy-mm-dd' if $date =~ /\d{4}\D\d{2}\D\d{2}/;
 
     if ( $dateformat =~ /^yy/ ) {
 
Index: LedgerSMB/Setting.pm
===================================================================
--- LedgerSMB/Setting.pm	(revision 5786)
+++ LedgerSMB/Setting.pm	(working copy)
@@ -138,20 +138,17 @@
             }
 
             if ( $param =~ /<\?lsmb (yy|mm|dd)/i ) {
-
+		# SC: XXX Does this even work anymore?
                 my $p = $param;
-                $p =~ s/(<|>|%)//g;
-                my $spc = $p;
-                $spc =~ s/\w//g;
-                $spc = substr( $spc, 0, 1 );
+                $p =~ s/lsmb//;
+                $p =~ s/[^YyMmDd]//g;
                 my %d = ( yy => 1, mm => 2, dd => 3 );
-                my @p = ();
+                my $str = $p;
 
                 my @a = $self->split_date( $myconfig->{dateformat},
                     $self->{transdate} );
-                for ( sort keys %d ) { push @p, $a[ $d{$_} ] if ( $p =~ /$_/ ) }
-                $str = join $spc, @p;
-                $var =~ s/$param/$str/;
+                for my $k( keys %d ) { $str =~ s/$k/$a[ $d{$k} ]/i}
+                $var =~ s/\Q$param\E/$str/i;
             }
 
             if ( $param =~ /<\?lsmb curr/i ) {
