Index: /controller/wpsg_BasketController.class.php
===================================================================
--- /controller/wpsg_BasketController.class.php	(revision 8349)
+++ /controller/wpsg_BasketController.class.php	(revision 8350)
@@ -17,5 +17,5 @@
 
 			if (wpsg_get_the_id() === $this->shop->getPagePID(wpsg_ShopController::PAGE_BASKET) && (is_singular() && in_the_loop() && is_main_query())) {
-				
+
 				parent::dispatch();
 				
@@ -221,6 +221,20 @@
 		private function checkout2Action(&$content) {
 
-			$this->shop->basket->initFromSession();
-
+
+			$this->setBasketData();
+			
+			$this->shop->checkCustomerPresetCountry();
+			
+			// Basket aus Session zusammenbauen
+			$this->shop->basket->initFromSession(true);
+			$this->shop->basket->save(false);
+			
+			// Basket muss aufgebaut sein
+			$this->shop->checkShippingAvailable();
+			$this->shop->checkPaymentAvailable();            
+			$this->shop->checkCustomerPreset();
+
+			\wpsg\wpsg_calculation::getSessionCalculation()->update();
+			
 			// Wenn keine Produkte drin sind, dann mit Fehlermeldung zum Warenkorb leiten
 			$temp = $this->shop->basket->getProductIDs();
@@ -239,8 +253,5 @@
 			
 			$this->shop->view['basket'] = $this->shop->basket->toArray();
-			 
-			$this->shop->checkShippingAvailable();
-			$this->shop->checkPaymentAvailable();
-			
+						
 			if (sizeof($this->shop->arShipping) > 0 && (!in_array($_SESSION['wpsg']['checkout']['shipping'], array_keys($this->shop->arShipping)) || !in_array($_SESSION['wpsg']['checkout']['payment'], array_keys($this->shop->arPayment)))) {
 				
Index: /controller/wpsg_ShopController.class.php
===================================================================
--- /controller/wpsg_ShopController.class.php	(revision 8349)
+++ /controller/wpsg_ShopController.class.php	(revision 8350)
@@ -113,4 +113,6 @@
 		/** Seitenkonstanten */
 		const PAGE_BASKET = 1;
+
+		private bool $is_prepared = false;
 
 		/**
@@ -3484,4 +3486,31 @@
 
 		/**
+		 * Bereitet die Warenkorbdaten vor
+		 * @return void
+		 */
+		public function prepareBasket(): void {
+			
+			if ($this->is_prepared !== true) {
+				
+				$this->checkCustomerPresetCountry();
+				
+				// Basket aus Session zusammenbauen
+				$this->basket->initFromSession(true);
+				$this->basket->save(false);
+				
+				// Basket muss aufgebaut sein
+				$this->checkShippingAvailable();
+				$this->checkPaymentAvailable();
+				$this->checkCustomerPreset();
+				
+				\wpsg\wpsg_calculation::getSessionCalculation()->update();
+				
+				$this->is_prepared = true;
+				
+			}
+			
+		}
+
+		/**
 		 * Im Prinzip wie wp_loaded nur das get_permalink schon funktioniert
 		 */
@@ -3512,4 +3541,5 @@
 					if ($this->hasModulFunction($_REQUEST['wpsg_mod'], $_REQUEST['wpsg_action'].'Redirect')) {
 
+						$this->prepareBasket();
 						$this->callMod($_REQUEST['wpsg_mod'], $_REQUEST['wpsg_action'].'Redirect'); return;
 
Index: /mods/wpsg_mod_prepayment.class.php
===================================================================
--- /mods/wpsg_mod_prepayment.class.php	(revision 8349)
+++ /mods/wpsg_mod_prepayment.class.php	(revision 8350)
@@ -339,5 +339,5 @@
 				$oCountryB = wpsg_country::getInstance($this->shop->get_option('wpsg_shopdata_country'));
 				$oCountryC = wpsg_country::getInstance($kundendaten['land']); 
-				$besrId = '';
+                $besrId = '';
 				if (!empty($this->shop->get_option('wpsg_shopdata_bank_besr'))) $besrId = $this->shop->get_option('wpsg_shopdata_bank_besr'); // should be empty if bank = "Postfinance", see also tooltip
 
@@ -384,5 +384,5 @@
 					$qrBill->setAdditionalInformation(
 						QrBill\DataGroup\Element\AdditionalInformation::create(
-							$subject
+							$subject ?? ''
 						)
 					);
