diff --git a/Makefile b/Makefile
index bf3e333d3ed51f99600463f16a5bd4cb356d5d22..16832ebb0e56515a352014bf2940e2cb5ebfdbac 100644
--- a/Makefile
+++ b/Makefile
@@ -1,17 +1,17 @@
 BASE=ordernumber
 PLUGINTYPE=vmshopper
-VERSION=1.5
+VERSION=1.6
 
 PLUGINFILES=$(BASE).php $(BASE).xml index.html
 # TRANSDIR=../../../administrator/language/
 # TRANSLATIONS=$(call wildcard,$(TRANSDIR)/*/*.plg_$(PLUGINTYPE)_$(BASE).sys.ini)
-TRANSLATIONS=$(call wildcard,*.plg_$(PLUGINTYPE)_$(BASE).sys.ini)
+TRANSLATIONS=$(call wildcard,language/*/*.plg_$(PLUGINTYPE)_$(BASE).sys.ini) language/index.html $(call wildcard,language/**/index.html)
 ZIPFILE=plg_$(PLUGINTYPE)_$(BASE)_v$(VERSION).zip
 
 zip: $(PLUGINFILES) $(TRANSLATIONS)
 	@echo "Packing all files into distribution file $(ZIPFILE):"
 	@zip -r $(ZIPFILE) $(PLUGINFILES) 
-	@zip -r --junk-paths $(ZIPFILE) $(TRANSLATIONS)
+	@zip -r $(ZIPFILE) $(TRANSLATIONS)
 
 clean:
 	rm -f $(ZIPFILE)
diff --git a/images/plg_vmshopper_ordernumber_Logo.larger.png b/images/plg_vmshopper_ordernumber_Logo.larger.png
new file mode 100644
index 0000000000000000000000000000000000000000..d9e15d0cf41ff033274a7c1e4a22fe747afd4bd8
Binary files /dev/null and b/images/plg_vmshopper_ordernumber_Logo.larger.png differ
diff --git a/images/plg_vmshopper_ordernumber_Logo.png b/images/plg_vmshopper_ordernumber_Logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..df429e69f02c252f414442d36448b4243215e413
Binary files /dev/null and b/images/plg_vmshopper_ordernumber_Logo.png differ
diff --git a/de-DE.plg_vmshopper_ordernumber.sys.ini b/language/de-DE/de-DE.plg_vmshopper_ordernumber.sys.ini
similarity index 79%
rename from de-DE.plg_vmshopper_ordernumber.sys.ini
rename to language/de-DE/de-DE.plg_vmshopper_ordernumber.sys.ini
index 91a4e55bc8c6e2937c4ec12587fc20935849f956..7ef7f7a88c446273a043b290e4b2a13889e1f0c1 100644
--- a/de-DE.plg_vmshopper_ordernumber.sys.ini
+++ b/language/de-DE/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 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/>
+VMSHOPPER_ORDERNUMBER = "VM2 - Plugin zur Anpassung von Auftrags-, Rechnungs- und Kundennummern"
+VMSHOPPER_ORDERNUMBER_DESC = "Dieses Plugin erlaubt es Ihnen, das Format von Auftrags-, Rechnungs- und Kundennummern in VirtueMart 2 anzupassen.<br/><br/>
       <div style='font-weight: normal'>
       <p style='font-weight: normal'>
-		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>
+		Das Format der Auftrags-, Rechnungs- und Kundennummern 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>
@@ -69,3 +69,13 @@ PLG_ORDERNUMBER_INVOICENR_COUNTER = "Zähler"
 PLG_ORDERNUMBER_INVOICENR_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_INVOICENR_PADDING = "Mindestziffern für den Zähler"
 PLG_ORDERNUMBER_INVOICENR_PADDING_DESC = "Wählen Sie hier die Mindestzahl von Ziffern, die der Zähler anzeigt. Ist der Wert des Zählers kleiner, werden entsprechend viele führende Nullen vorangestellt."
+
+PLG_ORDERNUMBER_CUSTOMERNR = "<b>Kundennummern</b>"
+PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE = "Kundennummern anpassen"
+PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE_DESC = "Hier ankreuzen, wenn Sie Ihre Kundennummern anpassen möchten und nicht die Standardeinstellung benutzen möchten."
+PLG_ORDERNUMBER_CUSTOMERNR_FMT = "Format der Kundennummern"
+PLG_ORDERNUMBER_CUSTOMERNR_FMT_DESC = "Hier können Sie Ihr eigenes Format für Kundennummern angeben."
+PLG_ORDERNUMBER_CUSTOMERNR_COUNTER = "Zähler"
+PLG_ORDERNUMBER_CUSTOMERNR_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_CUSTOMERNR_PADDING = "Mindestziffern für den Zähler"
+PLG_ORDERNUMBER_CUSTOMERNR_PADDING_DESC = "Wählen Sie hier die Mindestzahl von Ziffern, die der Zähler anzeigt. Ist der Wert des Zählers kleiner, werden entsprechend viele führende Nullen vorangestellt."
diff --git a/language/de-DE/index.html b/language/de-DE/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..2efb97f319a35f6bd80f1751134ed71ec11888eb
--- /dev/null
+++ b/language/de-DE/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><title></title>
diff --git a/en-GB.plg_vmshopper_ordernumber.sys.ini b/language/en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini
similarity index 78%
rename from en-GB.plg_vmshopper_ordernumber.sys.ini
rename to language/en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini
index 3c291026f937649dd646ce7ac715e9ce9abcdbc4..dc80c777f294baaf36d45d15363855e7e1aa7dc3 100644
--- a/en-GB.plg_vmshopper_ordernumber.sys.ini
+++ b/language/en-GB/en-GB.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 - Custom Order and Invoice Number plugin"
-VMSHOPPER_ORDERNUMBER_DESC = "This plugin is used to create custom order and invoice numbers for Virtuemart 2<br/><br/>
+VMSHOPPER_ORDERNUMBER = "VM2 - Custom Order, Invoice and Customer Number plugin"
+VMSHOPPER_ORDERNUMBER_DESC = "This plugin is used to create custom order, invoice and customer numbers for Virtuemart 2<br/><br/>
       <div style='font-weight: normal'>
       <p style='font-weight: normal'>
-		The format of the order and invoice numbers is a free-form text string, where <tt>#</tt> indicates the running counter and <tt>[variable]</tt> is understood as a variable and replaced by its current value. Currently, the following variables are available (case-insensitive):<table border=1>
+		The format of the numbers is a free-form text string, where <tt>#</tt> indicates the running counter and <tt>[variable]</tt> is understood as a variable and replaced by its current value. Currently, the following variables are available (case-insensitive):<table border=1>
 		<tr><td>year</td><td>Current year (4 digits)</td></tr>
 		<tr><td>year2</td><td>Current year (2 digits)</td></tr>
 		<tr><td>month</td><td>Current month (2 digits); leading zeros if necessary</td></tr>
@@ -69,3 +69,14 @@ PLG_ORDERNUMBER_INVOICENR_COUNTER = "Counter"
 PLG_ORDERNUMBER_INVOICENR_COUNTER_DESC = "Choose whether you want one global counter or per-format value counters. E.g. with a format of '[year]-#' and the latter option checked, the invoice count will be within the year only."
 PLG_ORDERNUMBER_INVOICENR_PADDING = "Minimum digits for the counter"
 PLG_ORDERNUMBER_INVOICENR_PADDING_DESC = "Select the minimum number of digits that the counter shall display. The value of the counter will be left-padded with 0 to have this minimum number of digits. If the counter is already larger than this number, no padding will occur"
+
+PLG_ORDERNUMBER_CUSTOMERNR = "<b>Customer numbers</b>"
+PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE = "Customize customer numbers"
+PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE_DESC = "Check here if you want customized customer number formats rather than the default."
+PLG_ORDERNUMBER_CUSTOMERNR_FMT = "Format of the customer numbers"
+PLG_ORDERNUMBER_CUSTOMERNR_FMT_DESC = "Here you can customize the customer number"
+PLG_ORDERNUMBER_CUSTOMERNR_COUNTER = "Counter"
+PLG_ORDERNUMBER_CUSTOMERNR_COUNTER_DESC = "Choose whether you want one global counter or per-format value counters. E.g. with a format of '[year]-#' and the latter option checked, the customer count will be within the year only."
+PLG_ORDERNUMBER_CUSTOMERNR_PADDING = "Minimum digits for the counter"
+PLG_ORDERNUMBER_CUSTOMERNR_PADDING_DESC = "Select the minimum number of digits that the counter shall display. The value of the counter will be left-padded with 0 to have this minimum number of digits. If the counter is already larger than this number, no padding will occur"
+
diff --git a/language/en-GB/index.html b/language/en-GB/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..2efb97f319a35f6bd80f1751134ed71ec11888eb
--- /dev/null
+++ b/language/en-GB/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><title></title>
diff --git a/language/index.html b/language/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..2efb97f319a35f6bd80f1751134ed71ec11888eb
--- /dev/null
+++ b/language/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><title></title>
diff --git a/ordernumber.php b/ordernumber.php
index 7a36fb6f27065edec623fcdeccd02f08bf736135..975959aad926f0a4e5401b362761e253c7ff710f 100644
--- a/ordernumber.php
+++ b/ordernumber.php
@@ -14,10 +14,12 @@ if (!class_exists('vmShopperPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmshopper
    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;
+    private $details;
+    private $nrtype;
 
-    function __construct($orderDetails) {
-        $this->orderDetails = $orderDetails;
+    function __construct($nrtype, $details) {
+        $this->details = $details;
+        $this->nrtype = $nrtype;
     }
 
     /* Return a random "string" of the given length taken from the given alphabet */
@@ -57,19 +59,19 @@ class ReplacementCallback {
                     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);
+            case "vendorid": return ($this->details->virtuemart_vendor_id);
+            case "userid": return ($this->details->virtuemart_user_id);
+            case "ipaddress": return ($this->details->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);
+            case "ordernumber": return ($this->details->order_number);
+            case "orderid": return ($this->details->virtuemart_order_id);
+            case "lastname": return ($this->details->last_name);
+            case "firstname": return ($this->details->first_name);
+            case "company": return ($this->details->company);
+            case "city": return ($this->details->city);
+            case "zip": return ($this->details->zip);
+            case "orderstatus": return ($this->details->order_status);
         }
         // No variable type matched, so don't replace, return the original string
         return $match[0];
@@ -104,8 +106,8 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
     function plgVmOnUpdateOrderBEShopper($_orderID) {}
 
     /* Replace the format variables, match[1] is the variable name, match[2] and match[3] are only used for random fields */
-
-    function replace_fields ($fmt, $orderDetails) {
+    /* Type 0 means order number, type 1 means invoice number, type 2 means customer number */
+    function replace_fields ($fmt, $nrtype, $details) {
         // Match variables for the form random[type][count] and everything else.
         // This makes it possible to handle "random" just like any other type!
         $patterns = array (
@@ -114,23 +116,23 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
         );
 //         // 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 self::replacementCallback ($match, $details); 
 //         };
 //         return preg_replace_callback ($patterns, 
-//             function ($match) use ($orderDetails) { 
-//                 return self::replacementCallback ($match, $orderDetails); 
+//             function ($match) use ($details) { 
+//                 return self::replacementCallback ($match, $details); 
 //             }, $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);
+        $callback = new ReplacementCallback ($nrtype, $details);
         return preg_replace_callback ($patterns, array($callback, 'replace'), $fmt);
     }
 
-    /* Type 0 means order number, type 1 means invoice number */
-    function format_number ($fmt, $orderDetails, $nrtype = 0, $global = 1, $padding = 1) {
+    /* Type 0 means order number, type 1 means invoice number, type 2 means customer number */
+    function format_number ($fmt, $details, $nrtype = 0, $global = 1, $padding = 1) {
         // First, replace all variables:
-        $nr = $this->replace_fields ($fmt, $orderDetails);
+        $nr = $this->replace_fields ($fmt, $nrtype, $details);
 
         // Look up the current counter
         $db = JFactory::getDBO();
@@ -169,7 +171,7 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
         }
         // Is order password customization enabled?
         if ($this->params->get('customize_order_password')) {
-          $fmt = $this->params->get ('order_password_format', "#");
+          $fmt = $this->params->get ('order_password_format', "[randomHex8]");
           $passwd = $this->replace_fields ($fmt, $orderDetails);
           $orderDetails->order_pass = $passwd;
         }
@@ -190,7 +192,24 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
                 $padding = $this->params->get ('invoice_number_padding', 1);
                 $invoicenr = $this->format_number ($fmt, (object)$orderDetails, $nrtype, $global, $padding);
                 $data['invoice_number'] = $invoicenr;
+                return $data;
             }
         }
     }
+
+    // Customizing the customer numbers requires VM >= 2.0.15b, earlier versions 
+    // left out the & and thus didn't allow changing the user data
+    function plgVmOnUserStore(&$data) {
+        // Is order number customization enabled?
+        if ($this->params->get('customize_customer_number') && isset($data['customer_number_bycore']) && $data['customer_number_bycore']==1) {
+            $nrtype=2; /*customer-nr*/
+            $fmt = $this->params->get ('customer_number_format', "#");
+            $global = $this->params->get ('customer_number_global', 1);
+            $padding = $this->params->get ('customer_number_padding', 1);
+            $customernr = $this->format_number ($fmt, (object)$data, $nrtype, $global, $padding);
+            $data['customer_number'] = $customernr;
+            return $data;
+        }
+    }
+
 }
diff --git a/ordernumber.xml b/ordernumber.xml
index 519ec37ccde5feb3cce59ae2269ded000b18e9cf..bec61daf9f3a2f1b771361b87cf783513308d7be 100644
--- a/ordernumber.xml
+++ b/ordernumber.xml
@@ -1,25 +1,23 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<install version="1.5" type="plugin" group="vmshopper" method="upgrade">
+<install version="1.6" type="plugin" group="vmshopper" method="upgrade">
     <name>VMSHOPPER_ORDERNUMBER</name>
-    <creationDate>2012-11-13</creationDate>
+    <creationDate>2013-01-09</creationDate>
     <author>Reinhold Kainhofer</author>
     <authorEmail>reinhold@kainhofer.com</authorEmail>
     <authorUrl>http://www.kainhofer.com/</authorUrl>
-    <copyright>Copyright (C) 2012 Reinhold Kainhofer. All rights reserved.</copyright>
+    <copyright>Copyright (C) 2012-2013 Reinhold Kainhofer. All rights reserved.</copyright>
     <license>http://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3</license>
-    <version>1.5.0</version>
-    <releaseDate>2012-12-16</releaseDate>
+    <version>1.6.0</version>
+    <releaseDate>2013-01-09</releaseDate>
     <releaseType>Minor update</releaseType>
-    <downloadUrl>http://www.kainhofer.com/virtuemart-2-extensions/</downloadUrl>
+    <downloadUrl>http://www.kainhofer.com/virtuemart-2-extensions/vm2-ordernumber-plugin.html</downloadUrl>
 
     <description>VMSHOPPER_ORDERNUMBER_DESC</description>
 
-    <languages>
-        <language tag="en-GB">en-GB.plg_vmshopper_ordernumber.sys.ini</language>
-        <language tag="de-DE">de-DE.plg_vmshopper_ordernumber.sys.ini</language>
-    </languages>
     <files>
         <filename plugin="ordernumber">ordernumber.php</filename>
+	<filename>index.html</filename>
+        <folder>language</folder>
     </files>
     <config>
         <fields name="params">
@@ -55,6 +53,18 @@
                     <option value="1">PLG_ORDERNUMBER_COUNTER_GLOBAL</option>
                     <option value="0">PLG_ORDERNUMBER_COUNTER_PERFORMAT</option>
                 </field>
+
+                <field name="customer_options" type="spacer" label="PLG_ORDERNUMBER_CUSTOMERNR" />
+                <field name="customize_customer_number" type="radio" default="0" label="PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE" description="PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE_DESC">
+                    <option value="1">PLG_ORDERNUMBER_YES</option>
+                    <option value="0">PLG_ORDERNUMBER_NO</option>
+                </field>
+                <field name="customer_number_format" type="text" default="#" label="PLG_ORDERNUMBER_CUSTOMERNR_FMT" description="PLG_ORDERNUMBER_CUSTOMERNR_FMT_DESC"/>
+                <field name="customer_number_padding" type="integer" default="5" label="PLG_ORDERNUMBER_CUSTOMERNR_PADDING" description="PLG_ORDERNUMBER_CUSTOMERNR_PADDING_DESC"  first="1" last="10" step="1" />
+                <field name="customer_number_global" type="radio" default="1" label="PLG_ORDERNUMBER_CUSTOMERNR_COUNTER" description="PLG_ORDERNUMBER_CUSTOMERNR_COUNTER_DESC">
+                    <option value="1">PLG_ORDERNUMBER_COUNTER_GLOBAL</option>
+                    <option value="0">PLG_ORDERNUMBER_COUNTER_PERFORMAT</option>
+                </field>
             </fieldset>
         </fields>
     </config>
diff --git a/releases/plg_vmshopper_ordernumber_v1.6.zip b/releases/plg_vmshopper_ordernumber_v1.6.zip
new file mode 100644
index 0000000000000000000000000000000000000000..7dce92a88a8f4c09fd7838ca76a572f1cbd6a365
Binary files /dev/null and b/releases/plg_vmshopper_ordernumber_v1.6.zip differ