diff --git a/ajax/invoices/create.php b/ajax/invoices/create.php
index a6efab9d76509dae88e3a72dc9d15120ca075cca..5a889dc3e9dfcf8b11bbcc57ec59a8ed49e2e314 100644
--- a/ajax/invoices/create.php
+++ b/ajax/invoices/create.php
@@ -12,11 +12,11 @@
 QUI::$Ajax->registerFunction(
     'package_quiqqer_invoice_ajax_invoices_create',
     function () {
-        $Invoices = QUI\ERP\Accounting\Invoice\Handler::getInstance();
-        $Invoice  = $Invoices->create();
+        $Factory = QUI\ERP\Accounting\Invoice\Factory::getInstance();
+        $Invoice = $Factory->createInvoice();
 
         return $Invoice->getId();
     },
-    array(),
+    false,
     'Permission::checkAdminUser'
 );
diff --git a/bin/backend/controls/panels/TemporaryInvoice.UserData.js b/bin/backend/controls/panels/TemporaryInvoice.UserData.js
index 0f07354195c32f5b7337a4d6c404c86b86ad6ac8..45e9787ce84ad4888b2a53a81696f528c5e82de6 100644
--- a/bin/backend/controls/panels/TemporaryInvoice.UserData.js
+++ b/bin/backend/controls/panels/TemporaryInvoice.UserData.js
@@ -157,6 +157,10 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice.Use
             }
 
             return this.$getUser().then(function (User) {
+                if (!User) {
+                    return [];
+                }
+
                 return User.getAddressList();
 
             }).then(function (addresses) {
diff --git a/database.xml b/database.xml
index 40e2ae3df64db1a6bf7a40ab7a75bcfb8df39215..119fe26c5790328d5738fa76ebcdce18eecea378 100644
--- a/database.xml
+++ b/database.xml
@@ -58,7 +58,7 @@
             <field type="INT NOT NULL">customer_id</field>
             <field type="INT NOT NULL">address_id</field>
             <field type="INT NULL">order_id</field>
-            <field type="VARCHAR(250) NOT NULL">hash</field>
+            <field type="VARCHAR(40) NOT NULL">hash</field>
 
             <field type="VARCHAR(200) NOT NULL">payment_method</field>
             <field type="TEXT NULL">payment_data</field> <!-- muss verschlüsselt sein -->
diff --git a/src/QUI/ERP/Accounting/Invoice/Factory.php b/src/QUI/ERP/Accounting/Invoice/Factory.php
index 818043d71f5ab75caca63181df12338d2d251823..ae384fb2852745406d1b45b390fe844c11b7eeca 100644
--- a/src/QUI/ERP/Accounting/Invoice/Factory.php
+++ b/src/QUI/ERP/Accounting/Invoice/Factory.php
@@ -11,45 +11,32 @@
  *
  * @package QUI\ERP\Accounting\Invoice
  */
-class Factory
+class Factory extends QUI\Utils\Singleton
 {
     /**
-     * @var null
-     */
-    protected static $Instance = null;
-
-    /**
-     * @return null|Factory
-     */
-    public static function getInstance()
-    {
-        if (self::$Instance === null) {
-            self::$Instance = new self();
-        }
-
-        return self::$Instance;
-    }
-
-    /**
-     * Create a non posted invoice
+     * Creates a new temporary invoice
      *
+     * @param QUI\Interfaces\Users\User|null $User
      * @return TemporaryInvoice
      */
-    public function createInvoice()
+    public function createInvoice($User = null)
     {
-        $Handler  = Handler::getInstance();
-        $Database = QUI::getDataBase();
-        $Hash     = Uuid::uuid1();
+        if ($User === null) {
+            $User = QUI::getUserBySession();
+        }
+
+        QUI\Permissions\Permission::checkPermission('quiqqer.invoice.create', $User);
 
-        $Database->insert(
-            $Handler->temporaryInvoiceTable(),
+        QUI::getDataBase()->insert(
+            Handler::getInstance()->temporaryInvoiceTable(),
             array(
-                'hash' => $Hash->toString()
+                'c_user' => $User->getId(),
+                'hash'   => Uuid::uuid1()->toString()
             )
         );
 
-        $newId = $Database->getPDO()->lastInsertId();
+        $newId = QUI::getDataBase()->getPDO()->lastInsertId();
 
-        return $Handler->getTemporaryInvoice($newId);
+        return Handler::getInstance()->getTemporaryInvoice($newId);
     }
 }
diff --git a/src/QUI/ERP/Accounting/Invoice/Handler.php b/src/QUI/ERP/Accounting/Invoice/Handler.php
index 29571ee043e391c882b8c17606aa05bf91590683..13e8a6fe6ca534e86fae1d9ab01a22b0c5031a3f 100644
--- a/src/QUI/ERP/Accounting/Invoice/Handler.php
+++ b/src/QUI/ERP/Accounting/Invoice/Handler.php
@@ -52,32 +52,6 @@ public function temporaryInvoiceTable()
         return QUI::getDBTableName(self::TABLE_TEMPORARY_INVOICE);
     }
 
-    /**
-     * Creates a new temporary invoice
-     *
-     * @param QUI\Interfaces\Users\User|null $User
-     * @return TemporaryInvoice
-     */
-    public function create($User = null)
-    {
-        if ($User === null) {
-            $User = QUI::getUserBySession();
-        }
-
-        QUI\Permissions\Permission::checkPermission('quiqqer.invoice.create', $User);
-
-        QUI::getDataBase()->insert(
-            $this->temporaryInvoiceTable(),
-            array(
-                'c_user' => $User->getId()
-            )
-        );
-
-        $newId = QUI::getDataBase()->getPDO()->lastInsertId();
-
-        return $this->getTemporaryInvoice($newId);
-    }
-
     /**
      * Delete a temporary invoice
      *
diff --git a/src/QUI/ERP/Accounting/Invoice/TemporaryInvoice.php b/src/QUI/ERP/Accounting/Invoice/TemporaryInvoice.php
index 160cb99cbbc813b38cd9c894135a6e65416606fa..b9ff1c21e12a9ccd6b391e77364714907c08c532 100644
--- a/src/QUI/ERP/Accounting/Invoice/TemporaryInvoice.php
+++ b/src/QUI/ERP/Accounting/Invoice/TemporaryInvoice.php
@@ -123,7 +123,6 @@ public function save($User = null)
                 'sum'               => '',
                 'vat_data'          => '',
                 'processing_status' => ''
-
             ),
             array(
                 'id' => $this->getCleanId()
@@ -159,7 +158,8 @@ public function delete($User = null)
     public function copy($User = null)
     {
         $Handler = Handler::getInstance();
-        $New     = $Handler->create($User);
+        $Factory = Factory::getInstance();
+        $New     = $Factory->createInvoice($User);
 
         $currentData = QUI::getDataBase()->fetch(array(
             'from'  => $Handler->temporaryInvoiceTable(),