Index: /controller/wpsg_AdminController.class.php
===================================================================
--- /controller/wpsg_AdminController.class.php	(revision 6631)
+++ /controller/wpsg_AdminController.class.php	(revision 6633)
@@ -53,11 +53,24 @@
 
 			}
+			else if (wpsg_isSizedString($_REQUEST['action'], 'resetMessages'))
+            {
+
+                $this->update_option('wpsg_msgHidden', array());
+
+                $this->addBackendMessage(__('Systemmeldungen wurden zurÃŒckgesetzt.', 'wpsg'));
+                $this->redirect(WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&action=ueber&subaction=systemcheck');
+
+            }
 			else if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'clearMessage')
 			{
 
-				$this->shop->hidePersistentBackendError($_REQUEST['wpsg_message']);
-
-				$this->shop->clearMessages();
-				$this->shop->redirect(rawurldecode($_REQUEST['wpsg_redirect']));
+                $arMsgHidden = $this->get_option('wpsg_msgHidden');
+                if (!wpsg_isSizedArray($arMsgHidden)) $arMsgHidden = array();
+
+                $arMsgHidden[] = $_REQUEST['msg_key'];
+
+                $this->update_option('wpsg_msgHidden', $arMsgHidden);
+
+                die("1");
 
 			}
@@ -688,6 +701,4 @@
 				}
 
-				$this->shop->removePersistentBackendError('wpsg_update_3.5_1');
-
 				$this->shop->addBackendMessage(__('Migration der MwSt. SÃ€tze erfolgreich durchgefÃŒhrt.', 'wpsg'));
 				$this->shop->redirect(WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&action=hilfe');
@@ -783,5 +794,4 @@
 			{
 
-				$this->shop->removePersistentBackendError("wpsg_update_3.5_1");
 				$this->shop->addBackendError(__('Es gibt keine alten MwSt. SÃ€tze zu migrieren.', 'wpsg'));
 
@@ -802,6 +812,4 @@
 			if (isset($_REQUEST['submit']))
 			{
-
-				$this->shop->removePersistentBackendError('wpsg_update_3.5_2');
 
 				$this->shop->addBackendMessage(__('Einstellungen der Versandzonen wurden erfolgreich gespeichert.', 'wpsg'));
@@ -1130,6 +1138,4 @@
 
 			}
-
-			$this->shop->removePersistentBackendError('wpsg_update_3.5_3');
 
 			$this->shop->view['vz'] = $this->db->fetchAssocField("SELECT `id`, `name` FROM `".WPSG_TBL_VZ."` ORDER BY `name` ASC", "id", "name");
Index: /controller/wpsg_ShopController.class.php
===================================================================
--- /controller/wpsg_ShopController.class.php	(revision 6631)
+++ /controller/wpsg_ShopController.class.php	(revision 6633)
@@ -54,4 +54,7 @@
 		/** Wird von der the_title auf true gesetzt wenn man auf einer Produktseite ist */
 		var $titleDisplayed = false;
+
+        /** Informationen die im SystemCheck gesammelt werden */
+        public $arSystemCheck = null;
 
 		const CHECK_NOTICE = 1;
@@ -1107,4 +1110,169 @@
 		} // public function getCurrentURL()
 
+        /**
+         * Ermittelt einmalig die Daten fÃŒr den Systemcheck
+         * Wird immer im Backend ausgefÃŒhrt
+         *
+         * @return array|null
+         */
+        public function systemcheck() {
+
+            if (is_null($this->arSystemCheck)) {
+
+                $page_admin_url = WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&subaction=seiten';
+
+                $arData = Array();
+
+                // Warenkorbseite
+                $page_id = $this->get_option('wpsg_page_basket');
+
+                if (!wpsg_isSizedInt($page_id) || !get_post_status($page_id)) $arData[] = array(
+                    'general_page_basket',
+                    self::CHECK_ERROR,
+                    wpsg_translate(__('Die Warenkorbseite ist nicht korrekt definiert. Der Shop wird nicht korrekt funktionieren. Sie kÃ¶nnen dies in der <a href="#1#">Seitenkonfiguration</a> Ã€ndern.', 'wpsg'), $page_admin_url)
+                );
+
+                // Produktdetailseite
+                $page_id = $this->get_option('wpsg_page_product');
+
+                if (!wpsg_isSizedInt($page_id) || !get_post_status($page_id)) $arData[] = array(
+                    'general_page_productdetail',
+                    self::CHECK_ERROR,
+                    wpsg_translate(__('Die Produktdetailseite ist nicht korrekt definiert. Dies kann bei bestimmten Konfigurationen zu Problemen fÃŒhren. Sie kÃ¶nnen dies in der <a href="#1#">Seitenkonfiguration</a> Ã€ndern.', 'wpsg'), $page_admin_url)
+                );
+
+                // Versandkosten
+                $page_id = $this->get_option('wpsg_page_versand');
+
+                if (!wpsg_isSizedInt($page_id) || !get_post_status($page_id)) $arData[] = array(
+                    'general_page_shippingt',
+                    self::CHECK_NOTICE,
+                    wpsg_translate(__('Es ist keine Seite fÃŒr die detaillierten Versandkosten definiert, dies kÃ¶nnte zu rechtlichen Problemen fÃŒhren. Sie kÃ¶nnen dies in der <a href="#1#">Seitenkonfiguration</a> Ã€ndern.', 'wpsg'), $page_admin_url)
+                );
+
+                // AGB
+                $page_id = $this->get_option('wpsg_page_agb');
+
+                if (!wpsg_isSizedInt($page_id) || !get_post_status($page_id)) $arData[] = array(
+                    'wpsg_page_agb',
+                    self::CHECK_NOTICE,
+                    wpsg_translate(__('Es ist keine Seite fÃŒr die AGB definiert, dies kÃ¶nnte zu rechtlichen Problemen fÃŒhren. Sie kÃ¶nnen dies in der <a href="#1#">Seitenkonfiguration</a> Ã€ndern.', 'wpsg'), $page_admin_url)
+                );
+
+                // Datenschutz
+                $page_id = $this->get_option('wpsg_page_datenschutz');
+
+                if (!wpsg_isSizedInt($page_id) || !get_post_status($page_id)) $arData[] = array(
+                    'wpsg_page_agb',
+                    self::CHECK_NOTICE,
+                    wpsg_translate(__('Es ist keine Seite fÃŒr die Datenschutzbedingungen definiert, dies kÃ¶nnte zu rechtlichen Problemen fÃŒhren. Sie kÃ¶nnen dies in der <a href="#1#">Seitenkonfiguration</a> Ã€ndern.', 'wpsg'), $page_admin_url)
+                );
+
+                // Wiederruf
+                $page_id = $this->get_option('wpsg_page_widerrufsbelehrung');
+
+                if (!wpsg_isSizedInt($page_id) || !get_post_status($page_id)) $arData[] = array(
+                    'wpsg_page_cancellationterms',
+                    self::CHECK_NOTICE,
+                    wpsg_translate(__('Es ist keine Seite fÃŒr die Widerrufsbelehrung definiert, dies kÃ¶nnte zu rechtlichen Problemen fÃŒhren. Sie kÃ¶nnen dies in der <a href="#1#">Seitenkonfiguration</a> Ã€ndern.', 'wpsg'), $page_admin_url)
+                );
+
+                // Wiederruf
+                $page_id = $this->get_option('wpsg_page_impressum');
+
+                if (!wpsg_isSizedInt($page_id) || !get_post_status($page_id)) $arData[] = array(
+                    'wpsg_page_imprint',
+                    self::CHECK_NOTICE,
+                    wpsg_translate(__('Es ist keine Seite fÃŒr das Impressum definiert, dies kÃ¶nnte zu rechtlichen Problemen fÃŒhren. Sie kÃ¶nnen dies in der <a href="#1#">Seitenkonfiguration</a> Ã€ndern.', 'wpsg'), $page_admin_url)
+                );
+
+                if (!class_exists('SoapClient'))
+                {
+
+                    $arData[] = array(
+                        'wpsg_noSoap',
+                        self::CHECK_NOTICE,
+                        __('Ihrem Server fehlt die PHP-Bibliothek fÃŒr die SOAP-UnterstÃŒtzung. Informationen finden Sie in unseren <a target="_blank" href="http://wpshopgermany.maennchen1.de/faqs/wie-pruefe-ich-ob-soap-und-curl-auf-meinem-server-aktiviert-sind/">FAQ</a>.', 'wpsg')
+                    );
+
+                }
+
+                if (!$this->hasMod('wpsg_mod_ordercondition'))
+                {
+
+                    $arData[] = array(
+                        'wpsg_noModOrdercondition',
+                        self::CHECK_NOTICE,
+                        wpsg_translate(
+                            __('Ab der wpShopGermany Version 3.4 kann das kostenlose Modul "<a href="#1#">Bestellbedingungen</a>" verwendet werden. Sie kÃ¶nnen es <a href="#2#">hier</a> konfigurieren. ÃberprÃŒfen Sie auch die anderen Ãnderungen, die wir <a href="#3#">in unserem Artikel</a> nÃ€her erlÃ€utern.', 'wpsg'),
+                            'http://wpshopgermany.maennchen1.de/?p=13232',
+                            WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&action=module&modul=wpsg_mod_ordercondition',
+                            'http://wpshopgermany.maennchen1.de/?p=13952'
+                        )
+                    );
+
+                }
+
+                // Alte UserViews checken
+                if (file_exists(WPSG_PATH_USERVIEW_OLD))
+                {
+
+                    $arData[] = array(
+                        'wpsg_oldUserViews',
+                        self::CHECK_NOTICE,
+                        wpsg_translate(
+                            __('Es existieren noch alte angepasste Templates unter #1#. Kopieren Sie diese bitte nach #2#. ZukÃŒnftig werden die Templateanpassungen nicht mehr im Pluginverzeichnis gesucht. Weitere Informationen erhalten Sie auch <a href="#3#">hier</a> oder auch in unserem kostenlosen <a href="#4#">Forum</a>.', 'wpsg'),
+                            WPSG_PATH_USERVIEW_OLD,
+                            WPSG_PATH_USERVIEW,
+                            'http://wpshopgermany.maennchen1.de/?p=5130',
+                            'http://forum.maennchen1.de'
+                        )
+                    );
+
+                }
+
+                if (!is_object($this->getDefaultCountry()))
+                {
+
+                    $arData[] = array(
+                        'wpsg_nodefaultcountry',
+                        self::CHECK_ERROR,
+                        wpsg_translate(
+                            __('Es wurde kein Standardland definiert, der Shop kann so nicht korrekt betrieben werden. Bitte ÃŒberprÃŒfen Sie die <a href="#1#">LÃ€nderkonfiguration</a>.', 'wpsg'),
+                            WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&subaction=laender'
+                        )
+                    );
+
+                }
+
+                $this->callMods('systemcheck', array(&$arData));
+
+                $arData = array_reverse(wpsg_array_csort($arData, 1));
+
+                $countError = 0;
+                foreach ($arData as $d) if ($d[1] === self::CHECK_ERROR) $countError++;
+
+                $this->arSystemCheck = $arData;
+
+                if (1 && $countError > 0)
+                {
+
+                    $this->addBackendError(
+                        'nohspc_'.wpsg_translate(
+                            __('Die SystemprÃŒfung hat #1# Fehler festgestellt, klicken Sie <a href="#2#">hier</a> fÃŒr Details.', 'wpsg'),
+                            $countError,
+                            WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&action=ueber&subaction=systemcheck'
+                        ),
+                        'wpsg_systemcheck'
+                    );
+
+                }
+
+            }
+
+            return $this->arSystemCheck;
+
+        } // public function systemcheck()
+
 		/**
 		 * Gibt die Ausgabe fÃŒr ein Produkt zurÃŒck
@@ -2620,5 +2788,11 @@
 		{
 
-			if (is_admin()) $this->addShipPay();
+			if (is_admin())
+            {
+
+                $this->addShipPay();
+                $this->systemcheck();
+
+            }
 
             load_plugin_textdomain('wpsg', false, WPSG_FOLDERNAME.'/lang/');
@@ -3165,27 +3339,4 @@
 			if (isset($_REQUEST['noheader']) && $_REQUEST['noheader'] == '1') return;
 
-			/*
-			if (is_array($this->arLizenz) && isset($this->arLizenz['l']))
-			{
-
-				// Hinweis auf nicht registrierte Domains
-				if ((!isset($_REQUEST['subaction']) || $_REQUEST['subaction'] != 'domains') && (isset($_REQUEST['do']) && $_REQUEST['do'] != 'register'))
-				{
-
-					$arURLs = $this->get_option('wpsg_registredURLs');
-
-					$url = preg_replace('/(.*)\/\//', '', $this->get_option('siteurl'));
-
-					if (!in_array($url, (array)$arURLs))
-					{
-
-						$this->addBackendMessage('nohspc_'.wpsg_translate(__('<b>wpShopGermany:</b> Bitte registrieren Sie diese Domain. Sie kÃ¶nnen dies ganz einfach im <a href="#1#">Lizenzmanager</a> durchfÃŒhren.', 'wpsg'), WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&action=registrierung'));
-
-					}
-
-				}
-
-			}
-			*/
 			if (
 				$this->get_option("wpsg_version_installed", true) != false &&
@@ -3212,29 +3363,4 @@
 			}
 
-			if (!class_exists('SoapClient') && $this->get_option('wpsg_message_soaphint') != '1')
-			{
-
-				$this->addPersistentBackendError(wpsg_translate(
-					__('Ihrem Server fehlt die PHP-Bibliothek fÃŒr die SOAP-UnterstÃŒtzung. Eine Registrierung Ihrer Domain ist somit nicht mÃ¶glich! <br />Weitere Informationen finden Sie in unseren <a target="_blank" href="http://wpshopgermany.maennchen1.de/faqs/wie-pruefe-ich-ob-soap-und-curl-auf-meinem-server-aktiviert-sind/">FAQ</a>. Klicken Sie <a href="#1#">hier</a>, um die Meldung auszublenden.', 'wpsg'),
-					WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&noheader=1&action=clearMessage&wpsg_message=wpsg_message_soaphint&wpsg_redirect='.rawurlencode($_SERVER['REQUEST_URI'])
-				),
-            	'wpsg_message_nosoap');
-
-			}
-
-			if (@$_REQUEST['subaction'] != 'seiten' && ($this->get_option('wpsg_page_basket') === false || $this->get_option('wpsg_page_basket') <= 0 || !get_page($this->get_option('wpsg_page_basket'))))
-			{
-
-				// Keine Warenkorbseite definiert
-				$this->addPersistentBackendError(
-					wpsg_translate(
-						__('Bitte ÃŒberprÃŒfen Sie die <a href="#1#">Seitenkonfiguration</a>. Die Warenkorbseite muss korrekt angegeben sein, sonst funktioniert der Shop nicht.', 'wpsg'),
-						WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&subaction=seiten'
-					),
-					'wpsg_messsage_basketpage'
-				);
-
-			}
-
 			// Schreibrechte auf der Sprachdatei
 			if (file_exists(WPSG_PATH_TRANSLATION) && !is_writable(WPSG_PATH_TRANSLATION)) { $this->addBackendError('nohspc_'.__('<b>wpShopGermany:</b> Sprachdatei kann nicht geschrieben werden! PrÃŒfen Sie die Schreibrechte auf folgender Datei:<br /><b>'.WPSG_PATH_TRANSLATION.'</b>', 'wpsg')); }
@@ -3243,30 +3369,4 @@
 			if (wpsg_isSizedString($this->get_option('wpsg_kundenmail_attachfile')) && !file_exists(wpsg_getUploadDir('wpsg_mailconf').$this->get_option('wpsg_kundenmail_attachfile')))
 				$this->addBackendError('nohspc_'.wpsg_translate(__('Es ist ein Anhang der Kundenmail definiert, die Datei wurde aber nicht gefunden. <a href="#1#">Zur E-Mail Konfiguration</a>', 'wpsg'), WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&subaction=emailconf'));
-
-			// Alte UserViews checken
-			if (file_exists(WPSG_PATH_USERVIEW_OLD))
-			{
-
-				$this->addPersistentBackendError(wpsg_translate(
-					__('Es existieren noch alte angepasste Templates unter #1#. Kopieren Sie diese bitte nach #2#. ZukÃŒnftig werden die Templateanpassungen nicht mehr im Pluginverzeichnis gesucht. Weitere Informationen erhalten Sie auch <a href="#3#">hier</a> oder auch in unserem kostenlosen <a href="#4#">Forum</a>.', 'wpsg'),
-					WPSG_PATH_USERVIEW_OLD,
-					WPSG_PATH_USERVIEW,
-					'http://wpshopgermany.maennchen1.de/?p=5130',
-					'http://forum.maennchen1.de'
-           		), 'wpsg_message_olduserview');
-
-			}
-
-			if (!$this->hasMod('wpsg_mod_ordercondition'))
-			{
-
-				$this->addPersistentBackendError(wpsg_translate(
-            		__('Ab der wpShopGermany Version 3.4 kann das kostenlose Modul "<a href="#1#">Bestellbedingungen</a>" verwendet werden. Sie kÃ¶nnen es <a href="#2#">hier</a> konfigurieren. ÃberprÃŒfen Sie auch die anderen Ãnderungen, die wir <a href="#3#">in unserem Artikel</a> nÃ€her erlÃ€utern.', 'wpsg'),
-					'http://wpshopgermany.maennchen1.de/?p=13232',
-					WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&action=module&modul=wpsg_mod_ordercondition',
-					'http://wpshopgermany.maennchen1.de/?p=13952'
-				), 'wpsg_message_ordercondition_34');
-
-			}
 
 			$this->callMods('checkGeneralBackendError');
@@ -4092,4 +4192,2 @@
 
 	} // class ShopController extends SystemController
-
-?>
Index: /controller/wpsg_SystemController.class.php
===================================================================
--- /controller/wpsg_SystemController.class.php	(revision 6631)
+++ /controller/wpsg_SystemController.class.php	(revision 6633)
@@ -189,9 +189,20 @@
 		public function addBackendMessage($message)
 		{
-			
-			if (!wpsg_isSizedArray($_SESSION['wpsg']['backendMessage'])) $_SESSION['wpsg']['backendMessage'] = array();
-			
-			$_SESSION['wpsg']['backendMessage'][] = $message;
-			
+
+            $message_key = md5($message);
+
+            // Wenn schon drin, dann nichts machen
+            if (@array_key_exists($message_key, (array)$_SESSION['wpsg']['backendError'])) return;
+
+            $message = '
+                <div id="message" class="notice notice-success">
+                    <p>'.$message.'</p>
+                </div>
+            ';
+
+            if (!wpsg_isSizedArray($_SESSION['wpsg']['backendMessage'])) $_SESSION['wpsg']['backendMessage'] = array();
+
+			$_SESSION['wpsg']['backendMessage'][$message_key] = $message;
+
 		} // public function addBackendMessage($message)
 		
@@ -207,79 +218,41 @@
 			
 			// Wenn schon drin, dann nichts machen
-			if (@array_key_exists($message_key, (array)$_SESSION['wpsg']['backendError'])) return;
-			
+            if (@array_key_exists($message_key, (array)$_SESSION['wpsg']['backendError'])) return;
+
+            if (!substr($message, 0, 7) === 'nohspc_') $message = wpsg_hspc($message);
+            else $message = substr($message, 7);
+
+            $arMsgHidden = $this->get_option('wpsg_msgHidden');
+            if (!wpsg_isSizedArray($arMsgHidden)) $arMsgHidden = array();
+
 			if (wpsg_isSizedString($hideLinkKey) && $addBlendOut === true)
 			{
 				
 				// Wurde die Meldung bereits ausgeblendet ?
-				if ($this->get_option($hideLinkKey) === '1')
-				{
-					
-					return false;
-					
-				}
-				
-				$message .= '<p style="float:right;">'.wpsg_translate(
-					__('<a href="#1#">Klicken Sie hier, um die Meldung auszublenden.</a>', 'wpsg'),
-						WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&noheader=1&action=clearMessage&wpsg_message='.$hideLinkKey.'&wpsg_redirect='.rawurlencode($_SERVER['REQUEST_URI'])
-				).'</p><div class="wpsg_clearer"></div><br />';
-				
-			}
+				if (in_array($hideLinkKey, $arMsgHidden)) return false;
+
+                $data_dismiss_url = WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&action=clearMessage&msg_key='.$hideLinkKey.'&noheader=1';
+
+				$message = '
+                    <div id="message" class="error notice is-dismissible wpsg-is-dismissible" data-dismiss-url="'.$data_dismiss_url.'">
+                        <p>'.$message.'</p>                        
+                    </div>
+                ';
+
+			}
+			else
+            {
+
+                $message = '
+                    <div id="message" class="error notice">
+                        <p>'.$message.'</p>
+                    </div>
+                ';
+
+            }
 							
 			$_SESSION['wpsg']['backendError'][$message_key] = $message;
 							
 		} // public function addBackendError($message, $hideLinkKey = false)
-		
-		/**
-		 * Ersetzt die alte addOneViewError
-		 * Zeigt Meldungen persistent im Backend an, bis sie gelesen wurden oder durch den Shop entfernt wurden
-		 * 
-		 * @param unknown $message
-		 * @param unknown $message_key
-		 */
-		public function addPersistentBackendError($message, $message_key)
-		{
-			 
-			$arPersistentBackendError = $this->get_option('wpsg_persistentBackendError');
-			if (!is_array($arPersistentBackendError)) $arPersistentBackendError = array();
-			
-			if (!array_key_exists($message_key, $arPersistentBackendError)) 
-				$arPersistentBackendError[$message_key] = array(
-					'message' => $message,
-					'hide' => false
-				);
-			
-			$this->update_option('wpsg_persistentBackendError', $arPersistentBackendError);
-			
-		} // public function addPersistentBackendError($message, $message_key)
-		
-		/**
-		 * Entfernt eine Meldung, wenn Sie nicht lÃ€nger angezeigt werden soll
-		 * 
-		 * @param unknown $message_key
-		 */
-		public function removePersistentBackendError($message_key)
-		{
-			
-			$arPersistentBackendError = $this->get_option('wpsg_persistentBackendError');
-			if (!is_array($arPersistentBackendError)) $arPersistentBackendError = array();
-			
-			if (array_key_exists($message_key, $arPersistentBackendError)) unset($arPersistentBackendError[$message_key]);
-			
-			$this->update_option('wpsg_persistentBackendError', $arPersistentBackendError);
-			
-		} // public function removePersistentBackendError($message_key)
-		
-		public function hidePersistentBackendError($message_key)
-		{
-			
-			$arPersistentBackendError = $this->get_option('wpsg_persistentBackendError');
-			if (!is_array($arPersistentBackendError)) $arPersistentBackendError = array();
-			
-			if (array_key_exists($message_key, $arPersistentBackendError)) $arPersistentBackendError[$message_key]['hide'] = true;
-			
-			$this->update_option('wpsg_persistentBackendError', $arPersistentBackendError);
-			
-		} // public function hidePersistentBackendError($message_key)
 
 		/**
@@ -439,24 +412,7 @@
 			$strOut  = '';
 			 
-			if (wpsg_isSizedArray($_SESSION['wpsg']['backendMessage']))
-			{
-			
-				$strOut  .= '<div id="message" class="updated">';
-				
-				foreach ($_SESSION['wpsg']['backendMessage'] as $m) 
-				{
-					
-					if (preg_match('/^nohspc_/', $m))
-					{
-						$strOut .= '<p>'.preg_replace('/^nohspc_/', '', $m).'</p>';
-					}
-					else
-					{					
-						$strOut .= '<p>'.wpsg_hspc($m).'</p>';
-					}
-					
-				}
-	
-				$strOut .= '</div>';
+			if (wpsg_isSizedArray($_SESSION['wpsg']['backendMessage'])) {
+
+				foreach ($_SESSION['wpsg']['backendMessage'] as $m) { $strOut .= $m; }
 
 				unset($_SESSION['wpsg']['backendMessage']);
@@ -464,29 +420,14 @@
 			}
 			
-			if (wpsg_isSizedArray($_SESSION['wpsg']['backendError']))
-			{
-
-				$strOut  .= '<div id="message" class="error">'; // below-h2 nicht setzen sonst schiebt sich diese Meldung ÃŒber das Banner
-				
-				foreach ($_SESSION['wpsg']['backendError'] as $m) 
-				{
-					
-					if (preg_match('/^nohspc_/',$m))
-					{
-						$strOut .= '<p>'.preg_replace('/^nohspc_/', '', $m).'</p>';
-					}
-					else
-					{
-						$strOut .= '<p>'.wpsg_hspc($m).'</p>';
-					}
-					
-				}
-	
-				$strOut .= '</div>'; 
-				
-			}
-			
+			if (wpsg_isSizedArray($_SESSION['wpsg']['backendError'])) {
+
+				foreach ($_SESSION['wpsg']['backendError'] as $m) { $strOut .= $m; }
+
+                unset($_SESSION['wpsg']['backendError']);
+
+			}
+
 			if (wpsg_isSizedString($strOut)) $strOut = '<div class="wrap">'.$strOut.'</div>';
- 
+
 			return $strOut;
 			
Index: /model/wpsg_product.class.php
===================================================================
--- /model/wpsg_product.class.php	(revision 6631)
+++ /model/wpsg_product.class.php	(revision 6633)
@@ -214,10 +214,10 @@
 		 * Siehe auch wpsg_ShopController->getProduktLink (Macht das gleiche, aber beachtet den Basket von welcher URL es hinzugefÃŒgt wurde da URL nicht eindeutig)
 		 */
-		public function getProductURL()
+		public function getProductURL($language_key = false)
 		{
 
 			$url = false;
 
-			$this->shop->callMods('getProduktlink', array($this->id, &$url));
+			$this->shop->callMods('getProduktlink', array($this->id, &$url, $language_key));
 
 			if ($url === false)
Index: /mods/wpsg_mod_basic.class.php
===================================================================
--- /mods/wpsg_mod_basic.class.php	(revision 6631)
+++ /mods/wpsg_mod_basic.class.php	(revision 6633)
@@ -370,5 +370,5 @@
 		
 		/** Gibt die URL fÃŒr ein Produkt zurÃŒck */
-		public function getProduktlink($produkt_id, &$url) { }
+		public function getProduktlink($produkt_id, &$url, $language_code = false) { }
 		
 		/** Wird vom Backend aufgerufen wenn die Einstellungen bearbeitet werden */
Index: /mods/wpsg_mod_paypal.class.php
===================================================================
--- /mods/wpsg_mod_paypal.class.php	(revision 6631)
+++ /mods/wpsg_mod_paypal.class.php	(revision 6633)
@@ -167,5 +167,5 @@
 							WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&action=module&modul=wpsg_mod_paypal'
 						)
-					));
+					), 'wpsg_mod_paypal_apicheck', true);
 					
 				}
Index: /mods/wpsg_mod_produktartikel.class.php
===================================================================
--- /mods/wpsg_mod_produktartikel.class.php	(revision 6631)
+++ /mods/wpsg_mod_produktartikel.class.php	(revision 6633)
@@ -318,4 +318,7 @@
 
 			$this->shop->update_option('wpsg_mod_produktartikel_showui', $_REQUEST['wpsg_mod_produktartikel_showui']);
+            $this->shop->update_option('wpsg_mod_produktartikel_ean', $_REQUEST['wpsg_mod_produktartikel_ean']);
+            $this->shop->update_option('wpsg_mod_produktartikel_gtin', $_REQUEST['wpsg_mod_produktartikel_gtin']);
+            $this->shop->update_option('wpsg_mod_produktartikel_comment', $_REQUEST['wpsg_mod_produktartikel_comment']);
 
 			$this->shop->update_option('wpsg_mod_produktartikel_postthumbnail', $_REQUEST['wpsg_mod_produktartikel_postthumbnail']);
@@ -654,5 +657,7 @@
 		{
 
-			$this->getPostIdFromProductId($product_id, $_REQUEST['wpsg_mod_produktartikel']['path'], $_REQUEST['wpsg_mod_produktartikel']['kommentare'], $_REQUEST['wpsg_produktartikel_menuorder'], true, $_REQUEST['disabled']);
+		    if (isset($_REQUEST['wpsg_mod_produktartikel'])) $comment = $_REQUEST['wpsg_mod_produktartikel']['kommentare']; else $comment = false;
+
+			$this->getPostIdFromProductId($product_id, $_REQUEST['wpsg_mod_produktartikel']['path'], $comment, $_REQUEST['wpsg_produktartikel_menuorder'], true, $_REQUEST['disabled']);
 
 		} // public function produkt_save($produkt_id)
@@ -696,32 +701,31 @@
 		} // public function create_wpsg_post_types()
 
-		public function getProduktlink($product_id, &$url)
-		{
-
-			$produkt_id = $this->shop->getProduktId($product_id);
-
-			$post_id = $this->db->fetchOne("
-				SELECT
-					`id`
-				FROM
-					`".$this->shop->prefix."posts`
-				WHERE
-					`wpsg_produkt_id` = '".wpsg_q($produkt_id)."' AND
-					`post_type` = '".wpsg_q($this->shop->get_option('wpsg_mod_produktartikel_pathkey'))."'
-			");
-
-			// Wenn kein Post gefunden abbrechen, sonst gibt es die URL der Startseite und die alternative URL Bildung ÃŒber den Warenkorb funktioniert nicht.
-			if ($post_id <= 0) return;
-
-			$url = get_permalink($post_id);
-
-			if (function_exists('qtrans_convertURL'))
-			{
-
-				$url = qtrans_convertURL($url);
-
-			}
-
-			return -1;
+		public function getProduktlink($product_id, &$url, $language_code = false) {
+
+            $product_id = $this->shop->getProduktId($product_id);
+            $post_id = $this->hasPostId($product_id);
+
+            if (wpsg_isSizedInt($post_id)) {
+
+                if (function_exists('qtrans_convertURL')) {
+
+                    $url = get_permalink($post_id);
+                    $url = qtrans_convertURL($url);
+
+                } else {
+
+                    if (function_exists('icl_object_id') && $language_code !== false) {
+
+                        $post_id = apply_filters('wpml_object_id', $post_id, $this->shop->get_option('wpsg_mod_produktartikel_pathkey'), true, $language_code);
+
+                    }
+
+                    $url = get_permalink($post_id);
+
+                }
+
+                return -1;
+
+            }
 
 		} // public function getProduktlink($produkt_id)
Index: /views/admin/hilfe.phtml
===================================================================
--- /views/admin/hilfe.phtml	(revision 6631)
+++ /views/admin/hilfe.phtml	(revision 6633)
@@ -28,11 +28,4 @@
 	<a href="https://wpshopgermany.uservoice.com/">https://wpshopgermany.uservoice.com/</a>
 	<?php echo wpsg_drawForm_AdminboxEnd(); ?>
-	
-	<?php echo wpsg_drawForm_AdminboxStart(__('Migration der alten MehrwertsteuersÃ€tze', 'wpsg')); ?>
-	<p><?php echo wpsg_translate(
-		__('Ab Version 3.5 wurden die MehrwertsteuersÃ€tze den LÃ€ndern zugeordnet. Die alten MehrwertsteuersÃ€tze kÃ¶nnen <a href="#1#">hier</a> umgewandelt werden.', 'wpsg'),
-		WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&action=migratemwst'
-	); ?>
-	<?php echo wpsg_drawForm_AdminboxEnd(); ?>
-			
+
 </div>
Index: /views/admin/ueber.phtml
===================================================================
--- /views/admin/ueber.phtml	(revision 6631)
+++ /views/admin/ueber.phtml	(revision 6633)
@@ -81,4 +81,64 @@
 	</div>
 
+	<div class="form-horizontal">
+		<?php wpsg_drawForm_TextStart(); ?>
+		<?php echo WPSG_PATH_USERVIEW; ?>
+
+		<?php echo wpsg_drawForm_TextEnd(__('Template Pfad', 'wpsg')); ?>
+
+		<?php wpsg_drawForm_TextStart(); ?>
+		<?php echo WPSG_PATH_TRANSLATION; ?>
+
+		<?php echo wpsg_drawForm_TextEnd(__('Sprachdatei', 'wpsg')); ?>
+	</div>
+
+	<div class="form-horizontal">
+		<?php
+
+		function iterateDir($sPath)
+		{
+			$aRes = array();
+			$pathuv = str_replace('\\', '/', WPSG_PATH_USERVIEW);
+			foreach(new DirectoryIterator($sPath) as $oItem)
+			{
+				if($oItem->isDir())
+				{
+					//(!$oItem->isDot() ? $aRes[$oItem->getFilename()] = iterateDir($oItem->getPathname()):0);
+					if (!$oItem->isDot()) {
+						$aResx = iterateDir($oItem->getPathname());
+						$aRes = array_merge($aRes, $aResx);
+					}
+					continue;
+				}
+				//$aRes[] = $oItem->getFilename();
+				$aRes[] = str_replace($pathuv, '', str_replace('\\', '/', $oItem->getPathname()));
+			}
+			return $aRes;
+		}
+
+		echo wpsg_drawForm_TextStart();
+
+		if (file_exists(WPSG_PATH_USERVIEW) && is_dir(WPSG_PATH_USERVIEW))
+		{
+
+			$arDir = iterateDir(WPSG_PATH_USERVIEW);
+
+			$sd = ''; foreach ($arDir as $k => $d) $sd .= $d.'<br />';
+
+			echo $sd;
+
+		}
+		else
+		{
+
+			echo WPSG_PATH_USERVIEW;
+
+		}
+
+		echo wpsg_drawForm_TextEnd(__('User-Views', 'wpsg'));
+
+		?>
+
+
 <?php echo wpsg_drawForm_AdminboxEnd(); ?>
 <?php } ?>
@@ -135,17 +195,7 @@
 <?php echo wpsg_drawForm_AdminboxStart(__('Systemcheck', 'wpsg')); ?>
 
-	<div class="form-horizontal">
-	<?php wpsg_drawForm_TextStart(); ?>
-	<?php echo WPSG_PATH_USERVIEW; ?>
-
-	<?php echo wpsg_drawForm_TextEnd(__('Template Pfad', 'wpsg')); ?>
-
-	<?php wpsg_drawForm_TextStart(); ?>
-	<?php echo WPSG_PATH_TRANSLATION; ?>
-
-	<?php echo wpsg_drawForm_TextEnd(__('Sprachdatei', 'wpsg')); ?>
-	</div>
-
-	<?php $arData = array(); $this->callMods('systemcheck', array(&$arData)); ?>
+	<a class="button" href="<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&action=resetMessages&noheader=1"><?php echo __('Ausgeblendete Meldungen zurÃŒcksetzen', 'wpsg'); ?></a>
+
+	<?php $arData = $this->systemcheck(); ?>
 	<?php if (wpsg_isSizedArray($arData)) { ?>
 		<div class="wpsg_admin_ueber_check_wrap">
@@ -156,54 +206,8 @@
 			<?php } ?>
 		</div>
+	<?php } else { ?>
+
 	<?php } ?>
 
-	<div class="form-horizontal">
-	<?php
-
-	function iterateDir($sPath)
-	{
-		$aRes = array();
-		$pathuv = str_replace('\\', '/', WPSG_PATH_USERVIEW);
-		foreach(new DirectoryIterator($sPath) as $oItem)
-		{
-			if($oItem->isDir())
-	 		{
-				//(!$oItem->isDot() ? $aRes[$oItem->getFilename()] = iterateDir($oItem->getPathname()):0);
-	 			if (!$oItem->isDot()) {
-	 				$aResx = iterateDir($oItem->getPathname());
-	 				$aRes = array_merge($aRes, $aResx);
-	 			}
-				continue;
-			}
-			//$aRes[] = $oItem->getFilename();
-			$aRes[] = str_replace($pathuv, '', str_replace('\\', '/', $oItem->getPathname()));
-		}
-		return $aRes;
-	}
-
-	echo wpsg_drawForm_TextStart();
-	
-	if (file_exists(WPSG_PATH_USERVIEW) && is_dir(WPSG_PATH_USERVIEW))
-	{
-		
-		$arDir = iterateDir(WPSG_PATH_USERVIEW);
-
-		$sd = ''; foreach ($arDir as $k => $d) $sd .= $d.'<br />';
-
-		echo $sd;
-
-	} 
-	else 
-	{
-	
-		echo WPSG_PATH_USERVIEW;
-				
-	}
-	
-	echo wpsg_drawForm_TextEnd(__('User-Views', 'wpsg'));
-	
-	?>
-	</div>
-
 <?php echo wpsg_drawForm_AdminboxEnd(); ?>
 <?php } ?>
Index: /views/js/admin.js
===================================================================
--- /views/js/admin.js	(revision 6631)
+++ /views/js/admin.js	(revision 6633)
@@ -150,7 +150,13 @@
 	var po; 
 
-	function wpsg_ajaxBind()
-	{
-		
+	function wpsg_ajaxBind() {
+
+		jQuery('.wpsg-is-dismissible').on('click', '.notice-dismiss', function(event, el) {
+
+			var dismiss_url = jQuery(this).parent('.notice.is-dismissible').attr('data-dismiss-url');
+			if (dismiss_url) { jQuery.get(dismiss_url); }
+
+		});
+
 		// Hilfe Tooltips
 		jQuery('*[data-wpsg-tip]').on('click', function() { 
Index: /views/mods/mod_produktartikel/produkt_addedit_content.phtml
===================================================================
--- /views/mods/mod_produktartikel/produkt_addedit_content.phtml	(revision 6631)
+++ /views/mods/mod_produktartikel/produkt_addedit_content.phtml	(revision 6633)
@@ -26,6 +26,9 @@
 	
 	<?php echo wpsg_drawForm_Input('wpsg_produktartikel_menuorder', __('Position', 'wpsg'), wpsg_getStr($this->view['data']['menu_order'])); ?>
+
+	<?php if ($this->get_option('wpsg_mod_produktartikel_comment') <= 0) { ?>
 	<?php echo wpsg_drawForm_Checkbox('wpsg_mod_produktartikel[kommentare]', __('Kommentare', 'wpsg'), wpsg_isSizedString($this->view['data']['comment_status'], 'open')); ?>
-	
+	<?php } ?>
+
 	<br />
 	<a href="<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&action=module&modul=wpsg_mod_produktartikel"><span class="wpsg-glyphicon glyphicon glyphicon-wrench"></span><?php echo __('Zur Konfiguration der Produktartikel', 'wpsg'); ?></a>
Index: /views/mods/mod_produktartikel/settings_edit.phtml
===================================================================
--- /views/mods/mod_produktartikel/settings_edit.phtml	(revision 6631)
+++ /views/mods/mod_produktartikel/settings_edit.phtml	(revision 6633)
@@ -18,4 +18,10 @@
 <?php echo wpsg_drawForm_Checkbox('wpsg_mod_produktartikel_ean', __('Darstellung der EAN', 'wpsg'), $this->get_option('wpsg_mod_produktartikel_ean'), array('help' => 'wpsg_mod_produktartikel_ean')); ?>
 <?php echo wpsg_drawForm_Checkbox('wpsg_mod_produktartikel_gtin', __('Darstellung der GTIN', 'wpsg'), $this->get_option('wpsg_mod_produktartikel_gtin'), array('help' => 'wpsg_mod_produktartikel_gtin')); ?>
+
+<?php echo wpsg_drawForm_Select('wpsg_mod_produktartikel_comment', __('Kommentarfunktion', 'wpsg'), array(
+	'0' => __('Produktspezifisch', 'wpsg'),
+	'1' => __('Global aktiviert', 'wpsg'),
+	'2' => __('Global deaktiviert', 'wpsg')
+), $this->get_option('wpsg_mod_produktartikel_comment')); ?>
 
 <?php if (!is_array($this->view['arTemplates']) || sizeof($this->view['arTemplates']) <= 0) { ?>
Index: /views/produkt/addedit.phtml
===================================================================
--- /views/produkt/addedit.phtml	(revision 6631)
+++ /views/produkt/addedit.phtml	(revision 6633)
@@ -33,5 +33,9 @@
 			
 				<?php if (wpsg_isSizedInt($this->view['data']['id'])) { ?>
-				<span class="list-group-head list-group-item"><?php echo wpsg_translate(__('Produkt ID:#1# <span style="float:right;"><a href="#2#" title="Produkt im Frontend ansehen" target="_blank"><span class="glyphicon glyphicon-new-window"></span></a></span>', 'wpsg'), $this->view['data']['id'], $this->view['oProduct']->getProductURL()); ?></span>
+				<span class="list-group-head list-group-item"><?php echo wpsg_translate(
+					__('Produkt ID:#1# <span style="float:right;"><a href="#2#" title="Produkt im Frontend ansehen" target="_blank"><span class="glyphicon glyphicon-new-window"></span></a></span>', 'wpsg'),
+					$this->view['data']['id'],
+					$this->view['oProduct']->getProductURL(((isset($_REQUEST['wpsg_lang']))?$_REQUEST['wpsg_lang']:false))
+				); ?></span>
 				<?php } else { ?>
 				<span class="list-group-head list-group-item"><?php echo __('Neues Produkt', 'wpsg'); ?></span>
Index: /views/produkt/select.phtml
===================================================================
--- /views/produkt/select.phtml	(revision 6631)
+++ /views/produkt/select.phtml	(revision 6633)
@@ -140,8 +140,29 @@
 			<?php } ?>
 			
-		</script> 
+		</script>
+
+		<style>
+
+			<?php if ($_REQUEST['wpsg_mode'] != 'wpsg_mod_relatedproducts') { ?>
+
+				* { font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif; }
+			    #wpsg-bs { min-width:100px; }
+				body { padding:0px 15px 0px 15px ; }
+				label { mragin-bottom:5px; }
+				select { width:100%; margin-bottom:15px; }
+				input[type="button"] { float:right; margin-top:30px; }
+
+			<?php } else { ?>
+
+				body { margin:0px; padding:0px; min-width:0%; }
+				input[type="button"] { float:right; margin-right:15px; margin-top:15px; }
+
+			<?php } ?>
+
+		</style>
+
 	</head>
 	
-	<body id="wpsg-bs" style="margin:0px; padding:0px; min-width:0%;">
+	<body id="wpsg-bs">
   	
 		<div class="container-fluid">
@@ -162,5 +183,5 @@
 					
 					<?php if ($_REQUEST['wpsg_mode'] != 'wpsg_mod_relatedproducts') { ?>				
-					<input class="btn btn-primary" style="float:right; margin-right:15px; margin-top:15px;" type="button" value="<?php echo __('EinfÃŒgen', 'wpsg'); ?>" onclick="return insertProdukt();" />
+					<input class="btn btn-primary" type="button" value="<?php echo __('EinfÃŒgen', 'wpsg'); ?>" onclick="return insertProdukt();" />
 					<?php } ?>
 					
@@ -171,5 +192,5 @@
 					<?php echo wpsg_drawForm_Select('produktgroup_order', __('Sortierung', 'wpsg'), $this->view['arProductgroupsOrder'], false); ?>
 					<?php echo wpsg_drawForm_Select('produktgroup_direction', __('Richtung', 'wpsg'), $this->view['arProductgroupsDirection'], false); ?> 
-					<input class="btn btn-primary" style="float:right; margin-right:15px; margin-top:15px;" type="button" value="<?php echo __('EinfÃŒgen', 'wpsg'); ?>" onclick="return insertProductgroup();" />
+					<input class="btn btn-primary" type="button" value="<?php echo __('EinfÃŒgen', 'wpsg'); ?>" onclick="return insertProductgroup();" />
 					<?php } ?>
 											
