diff --git a/Makefile b/Makefile
index b78bc963557de6d32c7b1e05d39be4173dca8bd6..39da238db9a3363e728b401f8fa2996193c76b2c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 BASE=ordernumber
 PLUGINTYPE=vmshopper
-VERSION=1.2
+VERSION=1.3
 
 PLUGINFILES=$(BASE).php $(BASE).xml index.html
 # TRANSDIR=../../../administrator/language/
diff --git a/de-DE.plg_vmshopper_ordernumber.sys.ini b/de-DE.plg_vmshopper_ordernumber.sys.ini
index ff13fdf62d81cdcda0bfaa3ce190669693315b81..e457b8bf38ffeae04484531c7c0d103e45097f8a 100644
--- a/de-DE.plg_vmshopper_ordernumber.sys.ini
+++ b/de-DE.plg_vmshopper_ordernumber.sys.ini
@@ -2,11 +2,11 @@
 ; Copyright (C)  2012 Reinhold Kainhofer. All rights reserved.
 ; License http://www.gnu.org/licenses/gpl.html GNU/GPL
 ; Note : All ini files need to be saved as UTF-8 - No BOM
-VMSHOPPER_ORDERNUMBER = "VM2 - Plugin zur Einstellung zu Bestellungs- und Rechnungsnummern"
-VMSHOPPER_ORDERNUMBER_DESC = "Dieses Plugin erlaubt es Ihnen, das Format von Bestellungs- und Rechnungsnummern in VirtueMart 2 anzupassen.<br/><br/>
+VMSHOPPER_ORDERNUMBER = "VM2 - Plugin zur Anpassung von Auftrags- und Rechnungsnummern"
+VMSHOPPER_ORDERNUMBER_DESC = "Dieses Plugin erlaubt es Ihnen, das Format von Auftrags- und Rechnungsnummern in VirtueMart 2 anzupassen.<br/><br/>
       <div style='font-weight: normal'>
       <p style='font-weight: normal'>
-		Das Format der Bestellungs- und Rechnungsnummern ist ein einfacher Text, wobei <tt>#</tt> die laufende Nummer anzeigt und <tt>[variable]</tt> als Variable interpretiert und durch deren Wert ersetzt wird. Aktuell sind folgende Variablen möglich (Groß-/Kleinschreibung ist egal):<table border=1>
+		Das Format der Auftrags- und Rechnungsnummern ist ein einfacher Text, wobei <tt>#</tt> die laufende Nummer anzeigt und <tt>[variable]</tt> als Variable interpretiert und durch deren Wert ersetzt wird. Aktuell sind folgende Variablen möglich (Groß-/Kleinschreibung ist egal):<table border=1>
 		<tr><td>year</td><td>Aktuelles Jahr (4 Ziffern)</td></tr>
 		<tr><td>year2</td><td>Aktuelles Jahr (2 Ziffern)</td></tr>
 		<tr><td>month</td><td>Aktuelles Monat (2 Ziffern); mit führenden Nullen wenn nötig</td></tr>
@@ -26,8 +26,8 @@ VMSHOPPER_ORDERNUMBER_DESC = "Dieses Plugin erlaubt es Ihnen, das Format von Bes
 		<tr><td>userID</td><td>(Interne) VirtueMart Benutzer ID</td></tr>
 		<tr><td>IPaddress</td><td>IP-Addresse des Käufers</td></tr>
 		<tr><th colspan=2><em>Nur für Rechnungsnummern:</em></td></tr>
-		<tr><td>orderNumber</td><td>Bestellungsnummer, für die die Rechnung erstellt wird</td></tr>
-		<tr><td>orderID</td><td>(Interne) Bestellungs-ID, für die die Rechnung erstellt wird</td></tr>
+		<tr><td>orderNumber</td><td>Auftragsnummer, für die die Rechnung erstellt wird</td></tr>
+		<tr><td>orderID</td><td>(Interne) Auftrags-ID, für die die Rechnung erstellt wird</td></tr>
 		<tr><td>Lastname</td><td>Nachname des Käufers (Rechnungsadresse)</td></tr>
 		<tr><td>Firstname</td><td>Vorname des Käufers (Rechnungsadresse)</td></tr>
 		<tr><td>Company</td><td>Unternehmen des Käufers (Rechnungsadresse)</td></tr>
@@ -44,19 +44,19 @@ PLG_ORDERNUMBER_NO = "Nein"
 PLG_ORDERNUMBER_COUNTER_GLOBAL="Global"
 PLG_ORDERNUMBER_COUNTER_PERFORMAT = "Eigener Zähler pro Formatwert"
 
-PLG_ORDERNUMBER_ORDERNR = "<b>Bestellungsnummern</b>"
-PLG_ORDERNUMBER_ORDERNR_CUSTOMIZE = "Bestellungsnummern anpassen"
-PLG_ORDERNUMBER_ORDERNR_CUSTOMIZE_DESC = "Hier ankreuzen, wenn Sie Ihre Bestellungsnummern anpassen möchten und nicht die Standardeinstellung benutzen möchten."
-PLG_ORDERNUMBER_ORDERNR_FMT="Format der Bestellungsnummern"
-PLG_ORDERNUMBER_ORDERNR_FMT_DESC="Hier können Sie Ihr eigenes Format für Bestellungsnummern angeben."
+PLG_ORDERNUMBER_ORDERNR = "<b>Auftragsgsnummern</b>"
+PLG_ORDERNUMBER_ORDERNR_CUSTOMIZE = "Auftragsnummern anpassen"
+PLG_ORDERNUMBER_ORDERNR_CUSTOMIZE_DESC = "Hier ankreuzen, wenn Sie Ihre Auftragsnummern anpassen möchten und nicht die Standardeinstellung benutzen möchten."
+PLG_ORDERNUMBER_ORDERNR_FMT="Format der Auftragsnummern"
+PLG_ORDERNUMBER_ORDERNR_FMT_DESC="Hier können Sie Ihr eigenes Format für Auftragsnummern angeben."
 PLG_ORDERNUMBER_ORDERNR_COUNTER = "Zähler"
 PLG_ORDERNUMBER_ORDERNR_COUNTER_DESC = "Wählen Sie aus, ob der Zähler global oder pro Formatwert laufen soll. Z.B. beginnt bei einem Format '[year]-#' und einem Zähler pro Formatwert der Zähler jedes Jahr bei 1."
 
-PLG_ORDERNUMBER_PASSWD = "<b>Bestellungspasswort</b>"
-PLG_ORDERNUMBER_PASSWD_CUSTOMIZE = "Bestellungspasswort anpassen"
-PLG_ORDERNUMBER_PASSWD_CUSTOMIZE_DESC = "Hier ankreuzen, wenn Sie Ihre Bestellungspasswörter anpassen möchten und nicht die Standardeinstellung benutzen möchten."
-PLG_ORDERNUMBER_PASSWD_FMT = "Format of the order password"
-PLG_ORDERNUMBER_PASSWD_FMT_DESC = "Hier können Sie Ihr eigenes Format für Bestellungspasswörter angeben (# wird nicht ersetzt)."
+PLG_ORDERNUMBER_PASSWD = "<b>Auftragspasswort</b>"
+PLG_ORDERNUMBER_PASSWD_CUSTOMIZE = "Auftragspasswort anpassen"
+PLG_ORDERNUMBER_PASSWD_CUSTOMIZE_DESC = "Hier ankreuzen, wenn Sie Ihre Auftragspasswörter anpassen möchten und nicht die Standardeinstellung benutzen möchten."
+PLG_ORDERNUMBER_PASSWD_FMT = "Format der Auftragspasswörter"
+PLG_ORDERNUMBER_PASSWD_FMT_DESC = "Hier können Sie Ihr eigenes Format für Auftragspasswörter angeben (# wird nicht ersetzt)."
 
 PLG_ORDERNUMBER_INVOICENR = "<b>Rechnungsnummern</b>"
 PLG_ORDERNUMBER_INVOICENR_CUSTOMIZE = "Rechnungsnummern anpassen"
diff --git a/ordernumber.php b/ordernumber.php
index 82516c69a4e9ab2e5cd2669c4e5f584f80b58b6d..c34aacc048e3d3d94e18554f6e9b87ab31dcbd9e 100644
--- a/ordernumber.php
+++ b/ordernumber.php
@@ -10,6 +10,63 @@
 defined('_JEXEC') or     die( 'Direct Access to ' . basename( __FILE__ ) . ' is not allowed.' ) ;
 if (!class_exists('vmShopperPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmshopperplugin.php');
 
+/* For php 5.2 we cannot use lambda functions or any other way to pass local variables to the callback.
+   The only way to pass a local variable to a callback for preg_replace_callback is to 
+   create a class instance... */
+class ReplacementCallback {
+    private $orderDetails;
+
+    function __construct($orderDetails) {
+        $this->orderDetails = $orderDetails;
+    }
+
+    function replace ($match) {
+        $varname = strtolower($match[1]);
+        switch ($varname) {
+            case "year":  return date ("Y");
+            case "year2": return date ("y");
+            case "month": return date("m");
+            case "day": return date("d");
+            case "hour": return date("H");
+            case "hour12": return date("h");
+            case "ampm": return date("a");
+            case "minute": return date("i");
+            case "second": return date("s");
+            case "random":
+                /* the regexp matches (random)(Type)(Len) as match 1 to 3, Len is optional */
+                $len = ($match[3]?$match[3]:1);
+                // Fallback: If no Type is given, use Digit
+                $alphabet = "0123456789";
+                // Select the correct alphabet depending on Type
+                switch (strtolower($match[2])) {
+                    case "digit": $alphabet = "0123456789"; break;
+                    case "hex": $alphabet = "0123456789abcdef"; break;
+                    case "letter": $alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; break;
+                    case "uletter": $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; break;
+                    case "lletter": $alphabet = "abcdefghijklmnopqrstuvwxyz"; break;
+                    case "alphanum": $alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; break;
+                }
+                return self::randomString ($alphabet, $len);
+            case "vendorid": return ($this->orderDetails->virtuemart_vendor_id);
+            case "userid": return ($this->orderDetails->virtuemart_user_id);
+            case "ipaddress": return ($this->orderDetails->ip_address);
+
+            // Only for Invoice:
+            case "ordernumber": return ($this->orderDetails->order_number);
+            case "orderid": return ($this->orderDetails->virtuemart_order_id);
+            case "lastname": return ($this->orderDetails->last_name);
+            case "firstname": return ($this->orderDetails->first_name);
+            case "company": return ($this->orderDetails->company);
+            case "city": return ($this->orderDetails->city);
+            case "zip": return ($this->orderDetails->zip);
+            case "orderstatus": return ($this->orderDetails->order_status);
+        }
+        // No variable type matched, so don't replace, return the original string
+        return $match[0];
+    }
+}
+
+
 class plgVmShopperOrdernumber extends vmShopperPlugin {
 
     function __construct(& $subject, $config) {
@@ -47,50 +104,6 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
     }
 
     /* Replace the format variables, match[1] is the variable name, match[2] and match[3] are only used for random fields */
-    static function replacementCallback ($match, $orderDetails) {
-            $varname = strtolower($match[1]);
-            switch ($varname) {
-                case "year":  return date ("Y");
-                case "year2": return date ("y");
-                case "month": return date("m");
-                case "day": return date("d");
-                case "hour": return date("H");
-                case "hour12": return date("h");
-                case "ampm": return date("a");
-                case "minute": return date("i");
-                case "second": return date("s");
-                case "random":
-                    /* the regexp matches (random)(Type)(Len) as match 1 to 3, Len is optional */
-                    $len = ($match[3]?$match[3]:1);
-                    // Fallback: If no Type is given, use Digit
-                    $alphabet = "0123456789";
-                    // Select the correct alphabet depending on Type
-                    switch (strtolower($match[2])) {
-                        case "digit": $alphabet = "0123456789"; break;
-                        case "hex": $alphabet = "0123456789abcdef"; break;
-                        case "letter": $alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; break;
-                        case "uletter": $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; break;
-                        case "lletter": $alphabet = "abcdefghijklmnopqrstuvwxyz"; break;
-                        case "alphanum": $alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; break;
-                    }
-                    return self::randomString ($alphabet, $len);
-                case "vendorid": return ($orderDetails->virtuemart_vendor_id);
-                case "userid": return ($orderDetails->virtuemart_user_id);
-                case "ipaddress": return ($orderDetails->ip_address);
-
-                // Only for Invoice:
-                case "ordernumber": return ($orderDetails->order_number);
-                case "orderid": return ($orderDetails->virtuemart_order_id);
-                case "lastname": return ($orderDetails->last_name);
-                case "firstname": return ($orderDetails->first_name);
-                case "company": return ($orderDetails->company);
-                case "city": return ($orderDetails->city);
-                case "zip": return ($orderDetails->zip);
-                case "orderstatus": return ($orderDetails->order_status);
-            }
-            // No variable type matched, so don't replace, return the original string
-            return $match[0];
-        }
 
     function replace_fields ($fmt, $orderDetails) {
         // Match variables for the form random[type][count] and everything else.
@@ -99,12 +112,19 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
             '/\[(random)(.*?)([0-9]*?)\]/', // For randomTypeN, spit the three parts
             '/\[([^\]]+)\]/'   // Everything else matches whole variable name
         );
-        $callback = function ($match) use ($orderDetails) {
-            return self::replacementCallback ($match, $orderDetails); 
-        };
-
-        return preg_replace_callback ($patterns, $callback, $fmt);
-//         return preg_replace_callback ($patterns, function ($match) use ($orderDetails) { return self::replacementCallback ($match, $orderDetails); }, $fmt);
+//         // TODO: in  php 5.3 and 5.4 we can easier pass $orderDetails to the callback
+//         function my_callback ($match) {
+//             return self::replacementCallback ($match, $orderDetails); 
+//         };
+//         return preg_replace_callback ($patterns, 
+//             function ($match) use ($orderDetails) { 
+//                 return self::replacementCallback ($match, $orderDetails); 
+//             }, $fmt);
+
+        /* php 5.2 does not allow lambda functions and there is no other way to
+           pass a local variable to the callback than a class instance! */
+        $callback = new ReplacementCallback ($orderDetails);
+        return preg_replace_callback ($patterns, array($callback, 'replace'), $fmt);
     }
 
     /* Type 0 means order number, type 1 means invoice number */
@@ -154,8 +174,6 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
     }
 
     function plgVmOnUserInvoice($orderDetails,&$data) {
-        // print("<pre>plgVmOnUserInvoice, orderDetails=");print_r($orderDetails);print("</pre>");
-        // print("<pre>plgVmOnUserInvoice, data=");print_r($data);print("</pre>");
         // Is order number customization enabled?
         if ($this->params->get('customize_invoice_number')) {
             // check the default configuration
@@ -168,7 +186,6 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
                 $fmt = $this->params->get ('invoice_number_format', "#");
                 $global = $this->params->get ('invoice_number_global', 1);
                 $invoicenr = $this->format_number ($fmt, (object)$orderDetails, $nrtype, $global);
-                // print("<pre>    invoice nr format: $fmt, resulting in $invoicenr</pre>");
                 $data['invoice_number'] = $invoicenr;
             }
         }
diff --git a/ordernumber.xml b/ordernumber.xml
index 683d48de9fbefec563997904306518ca312d69ed..c2abd488afbb88a8ff88478b59722fda23944296 100644
--- a/ordernumber.xml
+++ b/ordernumber.xml
@@ -7,7 +7,7 @@
     <authorUrl>http://www.kainhofer.com/</authorUrl>
     <copyright>Copyright (C) 2012 Reinhold Kainhofer. All rights reserved.</copyright>
     <license>http://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3</license>
-    <version>1.1.0</version>
+    <version>1.3.0</version>
     <releaseDate>2012-11-13</releaseDate>
     <releaseType>Major update</releaseType>
     <downloadUrl>http://www.kainhofer.com/virtuemart-2-extensions/</downloadUrl>
@@ -47,7 +47,7 @@
                     <option value="1">PLG_ORDERNUMBER_YES</option>
                     <option value="0">PLG_ORDERNUMBER_NO</option>
                 </field>
-		<field name="invoice_number_format" type="text" default="[year]/#" label="PLG_ORDERNUMBER_INVOICENR_FMT" description="PLG_ORDERNUMBER_INVOICENR_FMT_DESC"/>
+		<field name="invoice_number_format" type="text" default="[year]-#" label="PLG_ORDERNUMBER_INVOICENR_FMT" description="PLG_ORDERNUMBER_INVOICENR_FMT_DESC"/>
                 <field name="invoice_number_global" type="radio" default="0" label="PLG_ORDERNUMBER_INVOICENR_COUNTER" description="PLG_ORDERNUMBER_INVOICENR_COUNTER_DESC">
                     <option value="1">PLG_ORDERNUMBER_COUNTER_GLOBAL</option>
                     <option value="0">PLG_ORDERNUMBER_COUNTER_PERFORMAT</option>
diff --git a/releases/plg_vmshopper_ordernumber_v1.3.zip b/releases/plg_vmshopper_ordernumber_v1.3.zip
new file mode 100644
index 0000000000000000000000000000000000000000..6b1e35b916d01a4933767507b984cc5591d3f2f6
Binary files /dev/null and b/releases/plg_vmshopper_ordernumber_v1.3.zip differ