From: Roland Häder <roland@mxchange.org>
Date: Wed, 28 Oct 2009 02:59:33 +0000 (+0000)
Subject: Rewrite of adding menu entries, should prevent double menus now and forever...
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=8268379f7f0f38f5cd605714ecd5cbfacff0e282;p=mailer.git

Rewrite of adding menu entries, should prevent double menus now and forever...
---

diff --git a/DOCS/TODOs.txt b/DOCS/TODOs.txt
index 2ed25fa905..139bc1b7e2 100644
--- a/DOCS/TODOs.txt
+++ b/DOCS/TODOs.txt
@@ -3,9 +3,9 @@
 ./beg.php:191:			// @TODO Opps, what is missing here???
 ./birthday_confirm.php:93:		// @TODO Try to rewrite the following unset()
 ./inc/cache/config-local.php:122:// @TODO Rewrite the following three constants, somehow...
-./inc/classes/cachesystem.class.php:426:	// @TODO Add support for more types which break in last else-block
-./inc/config-functions.php:156:	// @TODO Make this all better... :-/
-./inc/config-functions.php:331:		// @TODO Find a way for updating configuration here
+./inc/classes/cachesystem.class.php:473:	// @TODO Add support for more types which break in last else-block
+./inc/config-functions.php:157:	// @TODO Make this all better... :-/
+./inc/config-functions.php:332:		// @TODO Find a way for updating configuration here
 ./inc/extensions/ext-html_mail.php:140:		// @TODO Move these arrays into config
 ./inc/extensions/ext-newsletter.php:215:		// @TODO Move these into configuration
 ./inc/extensions/ext-rallye.php:329:		// @TODO Move this code into rallye_functions.php
@@ -16,22 +16,22 @@
 ./inc/extensions-functions.php:370:// @TODO Change from ext_id to ext_name (not just even the variable! ;-) )
 ./inc/extensions-functions.php:481:		// @TODO Extension is loaded, what next?
 ./inc/footer.php:47:	// @TODO Rewrite these all into filters
-./inc/functions.php:1326:	// @TODO Remove this if() block if all is working fine
-./inc/functions.php:214:	// @TODO Remove this sanity-check if all is fine
-./inc/functions.php:217:	// @TODO Try to rewrite all $DATA to $content
-./inc/functions.php:2323:// @TODO Try to move this to inc/libs/theme_functions.php
-./inc/functions.php:2362:	// @TODO The status should never be empty
-./inc/functions.php:2494:// @TODO Please describe this function
-./inc/functions.php:2512:	searchDirsRecursive($next_dir, $last_changed); // @TODO small change to API to $last_changed = searchDirsRecursive($next_dir, $time);
-./inc/functions.php:256:				// @TODO Find all templates which are using these direct variables and rewrite them.
-./inc/functions.php:257:				// @TODO After this step is done, this else-block is history
-./inc/functions.php:2597:		// @TODO Add a little more infos here
-./inc/functions.php:2608:	// @TODO This cannot be rewritten to app_die(), try to find a solution for this.
-./inc/functions.php:2690:			// @TODO Rewrite this old lost code to a template
-./inc/functions.php:2809:			// @TODO Are these convertions still required?
-./inc/functions.php:2827:// @TODO Rewrite this function to use readFromFile() and writeToFile()
-./inc/functions.php:568:		// @TODO Extension 'msg' does not exist
-./inc/functions.php:645:// @TODO Rewrite this to an extension 'smtp'
+./inc/functions.php:1334:	// @TODO Remove this if() block if all is working fine
+./inc/functions.php:221:	// @TODO Remove this sanity-check if all is fine
+./inc/functions.php:224:	// @TODO Try to rewrite all $DATA to $content
+./inc/functions.php:2331:// @TODO Try to move this to inc/libs/theme_functions.php
+./inc/functions.php:2370:	// @TODO The status should never be empty
+./inc/functions.php:2502:// @TODO Please describe this function
+./inc/functions.php:2520:	searchDirsRecursive($next_dir, $last_changed); // @TODO small change to API to $last_changed = searchDirsRecursive($next_dir, $time);
+./inc/functions.php:2605:		// @TODO Add a little more infos here
+./inc/functions.php:2616:	// @TODO This cannot be rewritten to app_die(), try to find a solution for this.
+./inc/functions.php:263:				// @TODO Find all templates which are using these direct variables and rewrite them.
+./inc/functions.php:264:				// @TODO After this step is done, this else-block is history
+./inc/functions.php:2698:			// @TODO Rewrite this old lost code to a template
+./inc/functions.php:2817:			// @TODO Are these convertions still required?
+./inc/functions.php:2835:// @TODO Rewrite this function to use readFromFile() and writeToFile()
+./inc/functions.php:576:		// @TODO Extension 'msg' does not exist
+./inc/functions.php:653:// @TODO Rewrite this to an extension 'smtp'
 ./inc/install-functions.php:62:	// @TODO DEACTIVATED: changeDataInFile(getConfig('CACHE_PATH') . 'config-local.php', 'OUTPUT-MODE', "setConfigEntry('OUTPUT_MODE', '", "');", postRequestElement('omode'), 0);
 ./inc/language/de.php:1139:// @TODO Rewrite these two constants
 ./inc/language/de.php:1155:// @TODO Rewrite these five constants
@@ -50,7 +50,6 @@
 ./inc/libs/rallye_functions.php:699:	$EXPIRE = 3; // @TODO The hard-coded value...
 ./inc/libs/rallye_functions.php:763:		// @TODO Rewrite this to our API function
 ./inc/libs/refback_functions.php:60:		// @TODO Try to rewrite the following unset()
-./inc/libs/register_functions.php:153:		// @TODO Rewrite these constants
 ./inc/libs/surfbar_functions.php:1501:		// @TODO This can be somehow rewritten
 ./inc/libs/surfbar_functions.php:954:	// @TODO Invalid salt should be refused
 ./inc/libs/task_functions.php:244:		// @TODO These can be rewritten to filter
@@ -200,8 +199,9 @@
 ./inc/doubler_send.php:2:// @DEPRECATED
 ./inc/extensions.php:2:// @DEPRECATED
 ./inc/fatal_errors.php:2:// @DEPRECATED
-./inc/functions.php:241:		// @DEPRECATED Try to rewrite the if() condition
-./inc/functions.php:255:				// @DEPRECATED
+./inc/functions.php:248:		// @DEPRECATED Try to rewrite the if() condition
+./inc/functions.php:262:				// @DEPRECATED
+./inc/hooks.php:2:// @DEPRECATED
 ./inc/loader/load_cache-modreg.php:2:// @DEPRECATED
 ./inc/load_extensions.php:2:// @DEPRECATED
 ./inc/mails/birthday_mails.php:2:// @DEPRECATED
diff --git a/inc/extensions-functions.php b/inc/extensions-functions.php
index 19d364c06b..d1db294f1d 100644
--- a/inc/extensions-functions.php
+++ b/inc/extensions-functions.php
@@ -1576,5 +1576,91 @@ function isExtensionFunctionFileReadable ($ext_name) {
 	return ($GLOBALS['cache_array']['extension']['ext_func'][$ext_name] == 'Y');
 }
 
+// Adds an admin menu to the SQL queue of the menu entry is not found
+function addAdminMenuSql ($action, $what, $title, $descr, $sort) {
+	// Now check if this menu is there
+	if (!isMenuActionValid('admin', $action, $what)) {
+		// Not found, so construct it
+		$sql = sprintf("INSERT INTO {?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr',`sort`) VALUES('%s','%s','%s','%s',%s)",
+			$action,
+			$what,
+			$title,
+			$descr,
+			bigintval($sort)
+		);
+
+		// Add it to the queue
+		addExtensionSql($sql);
+	} else {
+		// Double menus should be located and fixed!
+		logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double admin menu action=%s, what=%s detected.", $action, $what));
+	}
+}
+
+// Adds a guest menu to the SQL queue if the menu entry is not found
+function addGuestMenuSql ($action, $what, $title, $visible, $locked, $sort) {
+	// Now check if this menu is there
+	if (!isMenuActionValid('guest', $action, $what)) {
+		// Not found, so construct it
+		$sql = sprintf("INSERT INTO {?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES('%s','%s','%s','%s','%s',%s)",
+			$action,
+			$what,
+			$title,
+			$visible,
+			$locked,
+			bigintval($sort)
+		);
+
+		// Add it to the queue
+		addExtensionSql($sql);
+	} else {
+		// Double menus should be located and fixed!
+		logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double guest menu action=%s, what=%s detected.", $action, $what));
+	}
+}
+
+// Adds a member menu to the SQL queue if the menu entry is not found
+function addMemberMenuSql ($action, $what, $title, $visible, $locked, $sort) {
+	// Now check if this menu is there
+	if (!isMenuActionValid('member', $action, $what)) {
+		// Not found, so construct it
+		$sql = sprintf("INSERT INTO {?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES('%s','%s','%s','%s','%s',%s)",
+			$action,
+			$what,
+			$title,
+			$visible,
+			$locked,
+			bigintval($sort)
+		);
+
+		// Add it to the queue
+		addExtensionSql($sql);
+	} else {
+		// Double menus should be located and fixed!
+		logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double member menu action=%s, what=%s detected.", $action, $what));
+	}
+}
+
+// Adds a sponsor menu to the SQL queue if the menu entry is not found
+function addSponsorMenuSql ($action, $what, $title, $active, $sort) {
+	// Now check if this menu is there, if no ext-sponsor is installed all is not yet added
+	if ((!isExtensionInstalled('sponsor')) || (!isMenuActionValid('sponsor', $action, $what))) {
+		// Not found, so construct it
+		$sql = sprintf("INSERT INTO {?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES('%s','%s','%s','%s',%s)",
+			$action,
+			$what,
+			$title,
+			$active,
+			bigintval($sort)
+		);
+
+		// Add it to the queue
+		addExtensionSql($sql);
+	} else {
+		// Double menus should be located and fixed!
+		logDebugMessage(__FUNCTION__, __LINE__, sprintf("Double sponsor menu action=%s, what=%s detected.", $action, $what));
+	}
+}
+
 // [EOF]
 ?>
diff --git a/inc/extensions/ext-active.php b/inc/extensions/ext-active.php
index 6904f0aaf1..e144a5698d 100644
--- a/inc/extensions/ext-active.php
+++ b/inc/extensions/ext-active.php
@@ -50,7 +50,7 @@ setExtensionVersionHistory(array('0.0', '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.0
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','active','Heute Online', 10, 'N','Y')");
+		addGuestMenuSql('main','active','Heute Online','N','Y',10);
 		break;
 
 	case 'remove': // Do stuff when removing extension
@@ -96,7 +96,7 @@ switch (getExtensionMode()) {
 
 			case '0.0.5': // SQL queries for v0.0.5
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD active_limit BIGINT(20) UNSIGNED NOT NULL DEFAULT 10");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_active','Aktiv-Liste','Einstellungen an der Aktiv-Liste (<strong>Heute Online</strong> im Gastbereich) vornehmen.', 8)");
+				addAdminMenuSql('setup','config_active','Aktiv-Liste','Einstellungen an der Aktiv-Liste (<strong>Heute Online</strong> im Gastbereich) vornehmen.', 8);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Aktiven-Liste im Gastbereich ist nun einschr&auml;nkbar.");
diff --git a/inc/extensions/ext-admins.php b/inc/extensions/ext-admins.php
index 4ddb55bdc5..7bf9ef6028 100644
--- a/inc/extensions/ext-admins.php
+++ b/inc/extensions/ext-admins.php
@@ -53,9 +53,9 @@ setExtensionAlwaysActive('Y');
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('admins', NULL, 'Admin-Management','Administratoren anlegen, l&ouml;schen oder Passwort/E-Mail Adresse &auml;ndern.','1')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('admins','admins_add','Admin hinzuf&uuml;gen','Neuen Admin-Account anlegen','0')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('admins','admins_edit','Admin-Account &auml;ndern','Bestehende Admin-Accounts bearbeiten: E-Mail-Adresse, Passwort und/oder Login-Name &auml;ndern.','1')");
+		addAdminMenuSql('admins', NULL, 'Admin-Management','Administratoren anlegen, l&ouml;schen oder Passwort/E-Mail Adresse &auml;ndern.',1);
+		addAdminMenuSql('admins','admins_add','Admin hinzuf&uuml;gen','Neuen Admin-Account anlegen',0);
+		addAdminMenuSql('admins','admins_edit','Admin-Account &auml;ndern','Bestehende Admin-Accounts bearbeiten: E-Mail-Adresse, Passwort und/oder Login-Name &auml;ndern.',1);
 		break;
 
 	case 'remove': // Do stuff when removing extension
@@ -82,7 +82,7 @@ switch (getExtensionMode()) {
 	case 'update': // Update an extension
 		switch (getCurrentExtensionVersion()) {
 			case '0.2.0': // SQL queries for v0.2
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('admins','admins_contact','Admin kontaktieren','Kontaktiert einen Admin per Mail oder Nachricht (nur wenn messaging-Erweiterung installiert ist).','2')");
+				addAdminMenuSql('admins','admins_contact','Admin kontaktieren','Kontaktiert einen Admin per Mail oder Nachricht (nur wenn messaging-Erweiterung installiert ist).',2);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("F&uuml;gt den Men&uuml;punkt &quot;Admin kontaktieren&quot; hinzu.");
@@ -90,7 +90,7 @@ switch (getExtensionMode()) {
 
 			case '0.3.0': // SQL queries for v0.3
 				// Add admin menu
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('admins','config_admins','ACL einstellen','Richten Sie Zugriffskontrollzeilen f&uuml;r jeden Admin individuell ein, um ihm nur bestimmte Bereiche des Admin-Bereiches zug&auml;nglich zu machen oder zu sperren.','4')");
+				addAdminMenuSql('admins','config_admins','ACL einstellen','Richten Sie Zugriffskontrollzeilen f&uuml;r jeden Admin individuell ein, um ihm nur bestimmte Bereiche des Admin-Bereiches zug&auml;nglich zu machen oder zu sperren.',4);
 
 				// Which is the default setting when you create a new admin login?
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD admins_default_acl ENUM('deny','allow') NOT NULL DEFAULT 'deny'");
diff --git a/inc/extensions/ext-autopurge.php b/inc/extensions/ext-autopurge.php
index e690984aa2..50fbd19c09 100644
--- a/inc/extensions/ext-autopurge.php
+++ b/inc/extensions/ext-autopurge.php
@@ -88,8 +88,8 @@ switch (getExtensionMode()) {
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD ap_inactive_since BIGINT(20) UNSIGNED NOT NULL DEFAULT '2592000'");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD ap_inactive_time BIGINT(20) UNSIGNED NOT NULL DEFAULT '25200'");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `ap_unconfirmed_time` BIGINT(20) UNSIGNED NOT NULL DEFAULT '432000'");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_autopurge','Auto-L&ouml;schung','Automatisch inaktive oder nicht best&auml;tigte Accounts l&ouml;schen.','12')");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','list_autopurge','Inaktive finden','Lassen Sie sich vor dem t&auml;glichen Reset anzeigen, welche Mitglieder als inaktiv erkannt werden und welche gel&ouml;scht werden.','10')");
+				addAdminMenuSql('setup','config_autopurge','Auto-L&ouml;schung','Automatisch inaktive oder nicht best&auml;tigte Accounts l&ouml;schen.',12);
+				addAdminMenuSql('user','list_autopurge','Inaktive finden','Lassen Sie sich vor dem t&auml;glichen Reset anzeigen, welche Mitglieder als inaktiv erkannt werden und welche gel&ouml;scht werden.',10);
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `ap_notified` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
 
 				// Update notes (these will be set as task text!)
diff --git a/inc/extensions/ext-bank.php b/inc/extensions/ext-bank.php
index a1f29851d3..bf16f243b7 100644
--- a/inc/extensions/ext-bank.php
+++ b/inc/extensions/ext-bank.php
@@ -126,30 +126,30 @@ UNIQUE (account_id, tan)
 ) TYPE={?_TABLE_TYPE?}");
 
 		// Admin menu queries
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank', NULL, 'Bank-Accounts','Verwalten Sie hier alle Bank-Accounts Ihrer Mitglieder, sowie Angebotspakete und &Uuml;berweisungen.', 6)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','add_bank_package','Angebotspaket hinzuf&uuml;gen','Neues Angebotspaket erstellen.', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','list_bank_package','Angebotspakete auflisten','Listet alle erstellten Angebotspakete auf.', 2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','edit_bank_package','Angebotspaket &auml;ndern','Nach Auswahl eines Angebotspaketes k&ouml;nnen Sie dieses hier ver&auml;ndern. Bitte beachten Sie, dass Ihre Mitglieder keine Mail dabei erhalten!', 3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','lock_bank_package','Angebotspaket ent-/sperren','Nehmen Sie Angebotspakete zur tempor&auml;ren &Uuml;berarbeitung zuvor heraus, dann k&ouml;nnen Sie in Ruhe dr&uuml;ber nachdenken und Berechnungen anstellen. Freigabe ist hier auch m&ouml;glich.', 4)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','del_bank_package','Angebotspaket l&ouml;schen','Nach Auswahl eines Angebotspaketes k&ouml;nnen Sie mit abschliessender Best&auml;tigung Angebotspakete ganz l&ouml;schen. Bitte beachten Sie, dass dies nur m&ouml;glich ist, wenn auch alle Accounts dieses nicht mehr nutzen!', 5)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','add_bank_account','Konto anlegen','Legen Sie hier Konten f&uuml;r die Mitglieder an (falls Ihre Mitglieder nicht zurecht kommen).', 6)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','list_bank_account','Konten auflisten','Auflistung aller Konto oder eines ausw&auml;hlbaren Mitglieds.', 7)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','edit_bank_account','Konto &auml;ndern','&Auml;ndern Sie hier bestehende Konten, z.B. den Dispositionskredit usw. PINs und TANs sind hier nicht &auml;nderbar! Best&auml;tigungsmails sind optional versendbar.', 8)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','lock_bank_account','Konto ent-/sperren','Sperren Sie hier Konten bei Bedarf. Auch das Freischalten ist hier m&ouml;glich. Eine Benachrichtigung per Mail wird dann an das Mitglied ausgesendet.', 9)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','del_bank_account','Konto l&ouml;schen','L&ouml;schen von Konten mit Best&auml;tigungsmail. Wenn Sie ein Mitglieder-Account l&ouml;schen, so m&uuml;ssen Sie derzeit seine angelegten Konten auch l&ouml;schen!', 10)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','send_bank_tanlist','TAN-Liste aussenden','Listet zuerst Anfragen von Mitgliedern auf, die eine neue (i)TAN-Liste ben&ouml;tigen, anschliessend kann die Liste dann ausgesendet werden.', 11)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','lock_bank_tanlist','TAN-Liste ent-/sperren','Bestehende TAN-Listen k&ouml;nnen auf Kundenwunsch hin gesperrt und wieder entsperrt werden. Dies passiert auch, wenn der Kunde x-mal (siehe Angebotspakete) eine verkehrte TAN eingegeben hat. Einzelne TANs sind nicht ent-/sperrbar.', 12)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('bank','list_bank_trans','&Uuml;berweisungen auflisten','Nach Auswahl eines Mitgliedes und einem Konto (ben&ouml;tgt JavaScript!) k&ouml;nnen Sie seitenweise die &Uuml;berweisungen durchschauen.', 13)");
+		addAdminMenuSql('bank', NULL, 'Bank-Accounts','Verwalten Sie hier alle Bank-Accounts Ihrer Mitglieder, sowie Angebotspakete und &Uuml;berweisungen.', 6);
+		addAdminMenuSql('bank','add_bank_package','Angebotspaket hinzuf&uuml;gen','Neues Angebotspaket erstellen.', 1);
+		addAdminMenuSql('bank','list_bank_package','Angebotspakete auflisten','Listet alle erstellten Angebotspakete auf.', 2);
+		addAdminMenuSql('bank','edit_bank_package','Angebotspaket &auml;ndern','Nach Auswahl eines Angebotspaketes k&ouml;nnen Sie dieses hier ver&auml;ndern. Bitte beachten Sie, dass Ihre Mitglieder keine Mail dabei erhalten!', 3);
+		addAdminMenuSql('bank','lock_bank_package','Angebotspaket ent-/sperren','Nehmen Sie Angebotspakete zur tempor&auml;ren &Uuml;berarbeitung zuvor heraus, dann k&ouml;nnen Sie in Ruhe dr&uuml;ber nachdenken und Berechnungen anstellen. Freigabe ist hier auch m&ouml;glich.', 4);
+		addAdminMenuSql('bank','del_bank_package','Angebotspaket l&ouml;schen','Nach Auswahl eines Angebotspaketes k&ouml;nnen Sie mit abschliessender Best&auml;tigung Angebotspakete ganz l&ouml;schen. Bitte beachten Sie, dass dies nur m&ouml;glich ist, wenn auch alle Accounts dieses nicht mehr nutzen!', 5);
+		addAdminMenuSql('bank','add_bank_account','Konto anlegen','Legen Sie hier Konten f&uuml;r die Mitglieder an (falls Ihre Mitglieder nicht zurecht kommen).', 6);
+		addAdminMenuSql('bank','list_bank_account','Konten auflisten','Auflistung aller Konto oder eines ausw&auml;hlbaren Mitglieds.', 7);
+		addAdminMenuSql('bank','edit_bank_account','Konto &auml;ndern','&Auml;ndern Sie hier bestehende Konten, z.B. den Dispositionskredit usw. PINs und TANs sind hier nicht &auml;nderbar! Best&auml;tigungsmails sind optional versendbar.', 8);
+		addAdminMenuSql('bank','lock_bank_account','Konto ent-/sperren','Sperren Sie hier Konten bei Bedarf. Auch das Freischalten ist hier m&ouml;glich. Eine Benachrichtigung per Mail wird dann an das Mitglied ausgesendet.', 9);
+		addAdminMenuSql('bank','del_bank_account','Konto l&ouml;schen','L&ouml;schen von Konten mit Best&auml;tigungsmail. Wenn Sie ein Mitglieder-Account l&ouml;schen, so m&uuml;ssen Sie derzeit seine angelegten Konten auch l&ouml;schen!', 10);
+		addAdminMenuSql('bank','send_bank_tanlist','TAN-Liste aussenden','Listet zuerst Anfragen von Mitgliedern auf, die eine neue (i)TAN-Liste ben&ouml;tigen, anschliessend kann die Liste dann ausgesendet werden.', 11);
+		addAdminMenuSql('bank','lock_bank_tanlist','TAN-Liste ent-/sperren','Bestehende TAN-Listen k&ouml;nnen auf Kundenwunsch hin gesperrt und wieder entsperrt werden. Dies passiert auch, wenn der Kunde x-mal (siehe Angebotspakete) eine verkehrte TAN eingegeben hat. Einzelne TANs sind nicht ent-/sperrbar.', 12);
+		addAdminMenuSql('bank','list_bank_trans','&Uuml;berweisungen auflisten','Nach Auswahl eines Mitgliedes und einem Konto (ben&ouml;tgt JavaScript!) k&ouml;nnen Sie seitenweise die &Uuml;berweisungen durchschauen.', 13);
 
 		// Member menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('bank', NULL, 'Bank-Account','N','Y', 3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('bank','bank_infos','Angebotspakete','N','Y', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('bank','bank_create','Konto anlegen','N','Y', 2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('bank','bank_deposit','Auf Konto einzahlen','N','Y', 3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('bank','bank_withdraw','Vom Konto abheben','N','Y', 4)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('bank','bank_output','Kontoauszug','N','Y', 5)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('bank','bank_change','Paket wechseln','N','Y', 6)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('bank','bank_remove','Konto K&uuml;ndigen','N','Y', 7)");
+		addMemberMenuSql('bank', NULL, 'Bank-Account','N','Y', 3);
+		addMemberMenuSql('bank','bank_infos','Angebotspakete','N','Y', 1);
+		addMemberMenuSql('bank','bank_create','Konto anlegen','N','Y', 2);
+		addMemberMenuSql('bank','bank_deposit','Auf Konto einzahlen','N','Y', 3);
+		addMemberMenuSql('bank','bank_withdraw','Vom Konto abheben','N','Y', 4);
+		addMemberMenuSql('bank','bank_output','Kontoauszug','N','Y', 5);
+		addMemberMenuSql('bank','bank_change','Paket wechseln','N','Y', 6);
+		addMemberMenuSql('bank','bank_remove','Konto K&uuml;ndigen','N','Y', 7);
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-beg.php b/inc/extensions/ext-beg.php
index 2110d5bdc8..e6f17737b9 100644
--- a/inc/extensions/ext-beg.php
+++ b/inc/extensions/ext-beg.php
@@ -50,9 +50,9 @@ setExtensionVersionHistory(array('0.0', '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.0
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_beg','Bettel-Link','IP-Sperre, {?POINTS?}-Verg&uuml;tung usw. k&ouml;nnen Sie hier einstellen.', 10)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','beg','{?POINTS?} erbetteln!',4,'Y','Y')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','beg','Ihr Bettel-Link',6,'Y','Y')");
+		addAdminMenuSql('setup','config_beg','Bettel-Link','IP-Sperre, {?POINTS?}-Verg&uuml;tung usw. k&ouml;nnen Sie hier einstellen.', 10);
+		addGuestMenuSql('main','beg','{?POINTS?} erbetteln!','N','Y',4);
+		addMemberMenuSql('main','beg','Ihr Bettel-Link','N','Y',6);
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD beg_timeout BIGINT(20) UNSIGNED NOT NULL DEFAULT '600'");
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD beg_userid_timeout BIGINT(20) UNSIGNED NOT NULL DEFAULT 1800");
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD beg_points FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00100");
@@ -150,17 +150,17 @@ PRIMARY KEY (id)
 
 			case '0.1.2':
 				// SQL queries for v0.1.2
-				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD beg_mode ENUM('DIRECT','REF') NOT NULL DEFAULT 'REF'");
-				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD beg_ranks TINYINT(3) UNSIGNED NOT NULL DEFAULT 10");
-				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD beg_active ENUM('Y','N') NOT NULL DEFAULT 'N'");
-				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD beg_rallye ENUM('Y','N') NOT NULL DEFAULT 'N'");
-				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD beg_points FLOAT(21,5) UNSIGNED NOT NULL DEFAULT 0.00000");
+				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `beg_mode` ENUM('DIRECT','REF') NOT NULL DEFAULT 'REF'");
+				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `beg_ranks` TINYINT(3) UNSIGNED NOT NULL DEFAULT 10");
+				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `beg_active` ENUM('Y','N') NOT NULL DEFAULT 'N'");
+				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `beg_rallye` ENUM('Y','N') NOT NULL DEFAULT 'N'");
+				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `beg_points` FLOAT(21,5) UNSIGNED NOT NULL DEFAULT 0.00000");
 
 				$VIS = 'N'; $LOCKED = 'Y';
 				if (isExtensionActive('beg')) { $VIS = 'Y'; $LOCKED = 'N'; }
 
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','beg2','Bettel-Rallye','".$VIS."','".$LOCKED."','7')");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','list_beg','Bettel-Rallye','Listet alle Teilnehmer der monatlichen Bettel-Rallye auf.','12')");
+				addMemberMenuSql('main','beg2','Bettel-Rallye',$VIS,$LOCKED,7);
+				addAdminMenuSql('user','list_beg','Bettel-Rallye','Listet alle Teilnehmer der monatlichen Bettel-Rallye auf.','12');
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Optionale Bettel-Rallye m&ouml;glich. Und die erbettelten {?POINTS?} k&ouml;nnen entweder nur dem bettelndem Mitglied direkt oder auch seinem Werber gutgeschrieben werden k&ouml;nnen.");
diff --git a/inc/extensions/ext-birthday.php b/inc/extensions/ext-birthday.php
index bb576451e7..5cdb6ff915 100644
--- a/inc/extensions/ext-birthday.php
+++ b/inc/extensions/ext-birthday.php
@@ -88,7 +88,7 @@ chk_value VARCHAR(255) NOT NULL DEFAULT '',
 KEY (userid),
 PRIMARY KEY (id)
 ) Type={?_TABLE_TYPE?}");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_birthday','Geburtstagsmails','Stellen Sie hier ein, ob die Mitglieder {?POINTS?} (nicht automatisch) gutgeschrieben kommen sollen oder nicht.', 9)");
+				addAdminMenuSql('setup','config_birthday','Geburtstagsmails','Stellen Sie hier ein, ob die Mitglieder {?POINTS?} (nicht automatisch) gutgeschrieben kommen sollen oder nicht.', 9);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Es kann nun eine Gutschrift an die Geburtstagmail angeh&auml;ngt werden. Diese wird erst beim Klick auf einen Best&auml;tigungslink gutgeschrieben.");
diff --git a/inc/extensions/ext-bonus.php b/inc/extensions/ext-bonus.php
index 776e3534e1..a74f7e0f86 100644
--- a/inc/extensions/ext-bonus.php
+++ b/inc/extensions/ext-bonus.php
@@ -50,8 +50,8 @@ setExtensionVersionHistory(array('0.0', '0.1.6', '0.2.0', '0.2.1', '0.2.2', '0.2
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('email','send_bonus','Bonusmail senden',5,'Versenden Sie hier Bonus-Mails an alle Mitglieder oder nur an alle aus einer Kategorie. Es spielt keine Rolle, wie viele Mails bereits versendet worden, Sie k&ouml;nnen hier immer senden.')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`,`counter`) VALUES ('main','bonus','Bonuspunkte',7,'Y','Y', 0)");
+		addAdminMenuSql('email','send_bonus','Bonusmail senden',5,'Versenden Sie hier Bonus-Mails an alle Mitglieder oder nur an alle aus einer Kategorie. Es spielt keine Rolle, wie viele Mails bereits versendet worden, Sie k&ouml;nnen hier immer senden.');
+		addMemberMenuSql('main','bonus','Bonuspunkte','N','Y',7);
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_bonus`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_bonus` (
 id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
@@ -70,9 +70,9 @@ mails_sent BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
 KEY (cat_id),
 PRIMARY KEY  (id)
 )TYPE={?_TABLE_TYPE?}");
-		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_links` MODIFY link_type ENUM('NORMAL','BONUS') NOT NULL DEFAULT 'NORMAL'");
-		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_links` ADD bonus_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
-		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_links` ADD INDEX (bonus_id)");
+		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_links` MODIFY `link_type` ENUM('NORMAL','BONUS') NOT NULL DEFAULT 'NORMAL'");
+		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_links` ADD `bonus_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
+		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_links` ADD INDEX (`bonus_id`)");
 
 		// Run this SQL when html or html_mail extension is installed
 		if (isExtensionActive('html_mail')) addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_bonus` add html_msg ENUM('Y','N') NOT NULL DEFAULT 'N'");
@@ -121,7 +121,7 @@ PRIMARY KEY  (id)
 
 			case '0.2.1': // SQL queries for v0.2.1
 				addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `what`='config_bonus' LIMIT 1");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('setup','config_bonus','Bonus-{?POINTS?}',8,'Richten Sie Bonus-{?POINTS?} ein, die beim x&#39;ten Klick auf die Mail verbucht werden sollen. Beispiele: Der 1. Klick sollte mehr {?POINTS?} zus&auml;tzlich bekommen, als der 10. Klick.')");
+				addAdminMenuSql('setup','config_bonus','Bonus-{?POINTS?}',8,'Richten Sie Bonus-{?POINTS?} ein, die beim x&#39;ten Klick auf die Mail verbucht werden sollen. Beispiele: Der 1. Klick sollte mehr {?POINTS?} zus&auml;tzlich bekommen, als der 10. Klick.');
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD login_bonus FLOAT(20,3) NOT NULL DEFAULT 10.000");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD turbo_bonus FLOAT(20,3) NOT NULL DEFAULT 100.000");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD login_timeout BIGINT(20) UNSIGNED NOT NULL DEFAULT ".getConfig('ONE_DAY')."");
@@ -158,7 +158,7 @@ KEY userid (userid)
 
 			case '0.2.3': // SQL queries for v0.2.3
 				addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `what`='bonus' LIMIT 1");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`,`counter`) VALUES ('main','bonus','Aktiv-Rallye',7,'Y','Y', 0)");
+				addMemberMenuSql('main','bonus','Aktiv-Rallye','N','Y',7);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Aktiv-Rallye mit Klick-Verg&uuml;tung hinzugef&uuml;gt.");
@@ -225,7 +225,7 @@ KEY userid (userid)
 				break;
 
 			case '0.3.4': // SQL queries for v0.3.4
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','list_bonus','Aktiv-Rallye-Teilnehmer','Listet alle Mitglieder auf, die einen Aktiv-Bonus haben und zeigt die derzeit m&ouml;glichen Gewinner an.', 10)");
+				addAdminMenuSql('user','list_bonus','Aktiv-Rallye-Teilnehmer','Listet alle Mitglieder auf, die einen Aktiv-Bonus haben und zeigt die derzeit m&ouml;glichen Gewinner an.', 10);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Link <u>Aktiv-Rallye-Teilnehmer</u> hinzugef&uuml;gt, inklusive manuelle Vorbereitung der Verg&uuml;tung.");
@@ -525,7 +525,7 @@ WHERE `last_online` < ".$mark." ORDER BY `userid` ASC");
 				break;
 
 			case '0.8.7': // SQL queries for v0.8.7
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('email','list_notifications','Benachrichtigungen','Listet alle an die Mitglieder ausgesandten Benachrichtigungen auf.', 10)");
+				addAdminMenuSql('email','list_notifications','Benachrichtigungen','Listet alle an die Mitglieder ausgesandten Benachrichtigungen auf.', 10);
 
 				// Update notes
 				setExtensionUpdateNotes("Benachrichtigungsmails f&uuml;r z.B. Bettel- oder Aktiv-Rallye werden nun angezeigt.");
diff --git a/inc/extensions/ext-booking.php b/inc/extensions/ext-booking.php
index 0b27ad8ce3..5fcf111a5c 100644
--- a/inc/extensions/ext-booking.php
+++ b/inc/extensions/ext-booking.php
@@ -66,11 +66,11 @@ PRIMARY KEY (`id`)
 ) TYPE={?_TABLE_TYPE?} COMMENT='Member points booking table'");
 
 		// Admin menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_booking','Kontoauszug','Einstellungen am Kontoauszug f&uuml;r Mitglieder vornehmen.', 14)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','list_booking','Kontoauszug','Kontoausz&uuml;ge aller Ihrer Mitglieder oder eines einzelnen Mitgliedes anzeigen.',10)");
+		addAdminMenuSql('setup','config_booking','Kontoauszug','Einstellungen am Kontoauszug f&uuml;r Mitglieder vornehmen.', 14);
+		addAdminMenuSql('user','list_booking','Kontoauszug','Kontoausz&uuml;ge aller Ihrer Mitglieder oder eines einzelnen Mitgliedes anzeigen.',10);
 
 		// Member menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','booking','{?POINTS?}-Kontoauszug',5,'Y','Y')");
+		addMemberMenuSql('main','booking','{?POINTS?}-Kontoauszug','N','Y',5);
 
 		// Add the filters
 		registerFilter('add_points', 'ADD_BOOKING_RECORD', false, true, getExtensionDryRun());
diff --git a/inc/extensions/ext-cache.php b/inc/extensions/ext-cache.php
index e49f5d77ee..b371904636 100644
--- a/inc/extensions/ext-cache.php
+++ b/inc/extensions/ext-cache.php
@@ -124,7 +124,7 @@ switch (getExtensionMode()) {
 			case '0.0.7': // SQL queries for v0.0.7
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD db_hits BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD cache_hits BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('stats','cache_stats','DB-Cache','Auf Cache und gesamte Datenbank registrierte Anfragen anzeigen.', 4)");
+				addAdminMenuSql('stats','cache_stats','DB-Cache','Auf Cache und gesamte Datenbank registrierte Anfragen anzeigen.', 4);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Hits auf den Cache werden gez&auml;hlt.");
diff --git a/inc/extensions/ext-country.php b/inc/extensions/ext-country.php
index e83af64f2e..befd5678fc 100644
--- a/inc/extensions/ext-country.php
+++ b/inc/extensions/ext-country.php
@@ -65,8 +65,8 @@ PRIMARY KEY (id)
 		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_countries` (code, descr, is_active) VALUES ('DE','Deutschland','Y')");
 
 		// Admin menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('country', NULL, 'L&auml;ndercodes verwalten','Stellen Sie hier L&auml;ndercodes ein, damit auch internationale Mitglieder sich zu Ihrem {?mt_word?} anmelden k&ouml;nnen.', 8)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('country','list_country','Verwalten','Hinzuf&uuml;gen, &Auml;ndern und L&ouml;schen von L&auml;ndercodes.', 1)");
+		addAdminMenuSql('country', NULL, 'L&auml;ndercodes verwalten','Stellen Sie hier L&auml;ndercodes ein, damit auch internationale Mitglieder sich zu Ihrem {?mt_word?} anmelden k&ouml;nnen.', 8);
+		addAdminMenuSql('country','list_country','Verwalten','Hinzuf&uuml;gen, &Auml;ndern und L&ouml;schen von L&auml;ndercodes.', 1);
 
 		// Add entry to user table
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD country_code BIGINT(20) UNSIGNED NOT NULL DEFAULT 1");
diff --git a/inc/extensions/ext-debug.php b/inc/extensions/ext-debug.php
index 448816e0bd..cff92db1a0 100644
--- a/inc/extensions/ext-debug.php
+++ b/inc/extensions/ext-debug.php
@@ -112,19 +112,19 @@ PRIMARY KEY (`id`)
 ) TYPE={?_TABLE_TYPE?} COMMENT='Debug client <-> log connection'");
 
 		// Guest menus
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('debug',NULL,'Debug-System','Y','Y',2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('debug','debug_info','Informationen','Y','Y',1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('debug','debug_reg','Anmeldung','Y','Y',2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('debug','debug_unreg','Abmeldung','Y','Y',3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('debug','debug_pilory','Spam-Pranger','Y','Y',4)");
+		addGuestMenuSql('debug',NULL,'Debug-System','Y','Y',2);
+		addGuestMenuSql('debug','debug_info','Informationen','Y','Y',1);
+		addGuestMenuSql('debug','debug_reg','Anmeldung','Y','Y',2);
+		addGuestMenuSql('debug','debug_unreg','Abmeldung','Y','Y',3);
+		addGuestMenuSql('debug','debug_pilory','Spam-Pranger','Y','Y',4);
 
 		// Admin menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('debug',NULL,'Debug-System','Verwalten Sie hier komfortabel das debug.log, welches sich im Verzeichnis <strong>{?CACHE_PATH?}/</strong> befindet.',10)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('debug','import_debug','debug.log importieren','Importieren Sie hier manuell die debug.log, damit neue Eintr&auml;ge mit bestehenden abgeglichen werden k&ouml;nnen und dann evtl. hinzugef&uuml;gt werden. Die <em>debug.log</em> wird nach dem Import automatisch vom Server entfernt. Dieser Vorgang wird f&uuml;r Sie nachts automatisch erledigt!',1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('debug','list_debug','Eintr&auml;ge anzeigen','Listet alle bereits importierten Eintr&auml;ge auf. Von hier aus versenden Sie noch nicht gemeldete Fehler an das Relay-Netzwerk, damt diese vom MXChange-Team gepr&uuml;ft werden k&ouml;nnen.',2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('debug','reg_debug','Am Server anmelden','Sie m&uuml;ssen zuerst Ihren Debug-Client (Ihr {?mt_word?} ist dies) oder Relay am Server von MXChange.org anmelden. Dies geschieht f&uuml;r Sie nicht automatisch, da Sie Ihre Daten zuvor &uuml;berpr&uuml;fen m&uuml;ssen, wie z.B. URL, eMail-Adresse und {?mt_word?}-Titel.',3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('debug','unreg_debug','Vom Server abmelden','Melden Sie bitte Ihren {?mt_word?} wieder vom MXChange-Server ab, damit das Team von MXChange.org weiss, welche Keys nicht mehr genutzt werden.',4)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('debug','config_debug','Einstellungen','&Auml;ndern Sie hier alle Einstellungen, wie auch den Debug-Modus - ob Client, Hub oder selber Server sein. Lesen Sie dazu die Anleitung unter DOCs/de/debug/README.txt durch! Oder kommen Sie in&#39;s Forum. Das Team von MXChange.org hilft Ihnen gerne weiter.',5)");
+		addAdminMenuSql('debug',NULL,'Debug-System','Verwalten Sie hier komfortabel das debug.log, welches sich im Verzeichnis <strong>{?CACHE_PATH?}/</strong> befindet.',10);
+		addAdminMenuSql('debug','import_debug','debug.log importieren','Importieren Sie hier manuell die debug.log, damit neue Eintr&auml;ge mit bestehenden abgeglichen werden k&ouml;nnen und dann evtl. hinzugef&uuml;gt werden. Die <em>debug.log</em> wird nach dem Import automatisch vom Server entfernt. Dieser Vorgang wird f&uuml;r Sie nachts automatisch erledigt!',1);
+		addAdminMenuSql('debug','list_debug','Eintr&auml;ge anzeigen','Listet alle bereits importierten Eintr&auml;ge auf. Von hier aus versenden Sie noch nicht gemeldete Fehler an das Relay-Netzwerk, damt diese vom MXChange-Team gepr&uuml;ft werden k&ouml;nnen.',2);
+		addAdminMenuSql('debug','reg_debug','Am Server anmelden','Sie m&uuml;ssen zuerst Ihren Debug-Client (Ihr {?mt_word?} ist dies) oder Relay am Server von MXChange.org anmelden. Dies geschieht f&uuml;r Sie nicht automatisch, da Sie Ihre Daten zuvor &uuml;berpr&uuml;fen m&uuml;ssen, wie z.B. URL, eMail-Adresse und {?mt_word?}-Titel.',3);
+		addAdminMenuSql('debug','unreg_debug','Vom Server abmelden','Melden Sie bitte Ihren {?mt_word?} wieder vom MXChange-Server ab, damit das Team von MXChange.org weiss, welche Keys nicht mehr genutzt werden.',4);
+		addAdminMenuSql('debug','config_debug','Einstellungen','&Auml;ndern Sie hier alle Einstellungen, wie auch den Debug-Modus - ob Client, Hub oder selber Server sein. Lesen Sie dazu die Anleitung unter DOCs/de/debug/README.txt durch! Oder kommen Sie in&#39;s Forum. Das Team von MXChange.org hilft Ihnen gerne weiter.',5);
 
 		// Config entries
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `debug_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
diff --git a/inc/extensions/ext-doubler.php b/inc/extensions/ext-doubler.php
index e28b7f3b68..44588a96a0 100644
--- a/inc/extensions/ext-doubler.php
+++ b/inc/extensions/ext-doubler.php
@@ -104,15 +104,15 @@ PRIMARY KEY (id)
 		// --- MENU SYSTEMS ---
 		//
 		// Admin menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('doubler', NULL, '{?POINTS?}-Verdoppler','Einstellungen und Eintr&auml;ge auflisten.', 4)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('doubler','list_doubler','Auflisten','Eintr&auml;ge aus der Verdiensttabelle auflisten', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('doubler','config_doubler','Einstellungen','Prozentuale Geb&uuml;hr usw. einstellen.', 2)");
+		addAdminMenuSql('doubler', NULL, '{?POINTS?}-Verdoppler','Einstellungen und Eintr&auml;ge auflisten.', 4);
+		addAdminMenuSql('doubler','list_doubler','Auflisten','Eintr&auml;ge aus der Verdiensttabelle auflisten', 1);
+		addAdminMenuSql('doubler','config_doubler','Einstellungen','Prozentuale Geb&uuml;hr usw. einstellen.', 2);
 
 		// Guest menu (informations / default doubler link)
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','doubler','Verdoppeln!',3,'Y','Y')");
+		addGuestMenuSql('main','doubler','Verdoppeln!','N','Y',3);
 
 		// Member menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','doubler','Verdoppeln!','Y','Y',7)");
+		addMemberMenuSql('main','doubler','Verdoppeln!','N','Y',7);
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-holiday.php b/inc/extensions/ext-holiday.php
index e302d77188..86d16dc43c 100644
--- a/inc/extensions/ext-holiday.php
+++ b/inc/extensions/ext-holiday.php
@@ -65,13 +65,13 @@ PRIMARY KEY (id)
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD holiday_max BIGINT(20) UNSIGNED NOT NULL DEFAULT '30'");
 
 		// Add member menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','holiday','Urlaubsschaltung','4','Y','Y')");
+		addMemberMenuSql('main','holiday','Urlaubsschaltung','Y','Y',4);
 
 		// Add admin menus
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('holiday', NULL, 'Urlaubsmanagement','4','Hier k&ouml;nnen Sie Urlaubsschaltungen Ihrer Mitglieder auflisten oder auch wieder aufheben.')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('holiday','list_holiday','Auflisten','1','Alle Urlaubsschaltungen auflisten.')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('holiday','del_holiday','Urlaub beenden','2','Urlaubsschaltungen aufheben. Geben Sie bitte mehr als nur &quot;Verstoss gegen unsere AGBs&quot; ein!')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('holiday','config_holiday','Einstellungen','3','Maximale Tage f&uuml;r Urlaub usw. einstellen.')");
+		addAdminMenuSql('holiday', NULL, 'Urlaubsmanagement','Hier k&ouml;nnen Sie Urlaubsschaltungen Ihrer Mitglieder auflisten oder auch wieder aufheben.',4);
+		addAdminMenuSql('holiday','list_holiday','Auflisten','Alle Urlaubsschaltungen auflisten.',1);
+		addAdminMenuSql('holiday','del_holiday','Urlaub beenden','Urlaubsschaltungen aufheben. Geben Sie bitte mehr als nur &quot;Verstoss gegen unsere AGBs&quot; ein!',2);
+		addAdminMenuSql('holiday','config_holiday','Einstellungen','Maximale Tage f&uuml;r Urlaub usw. einstellen.',3);
 
 		// Remove 0 max mails per day
 		addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_max_receive` WHERE value='0' LIMIT 1");
diff --git a/inc/extensions/ext-html_mail.php b/inc/extensions/ext-html_mail.php
index 59753a9d06..3b36479df5 100644
--- a/inc/extensions/ext-html_mail.php
+++ b/inc/extensions/ext-html_mail.php
@@ -53,7 +53,7 @@ switch (getExtensionMode()) {
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD html ENUM('Y','N') NOT NULL DEFAULT 'Y'");
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_bonus` ADD html_msg ENUM('Y','N') NOT NULL DEFAULT 'N'");
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_pool` ADD html_msg ENUM('Y','N') NOT NULL DEFAULT 'N'");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','html_mail','HTML-Empfang','3','Y','Y')");
+		addMemberMenuSql('main','html_mail','HTML-Empfang','N','Y',3);
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-imprint.php b/inc/extensions/ext-imprint.php
index 2029e85427..ae40b5c711 100644
--- a/inc/extensions/ext-imprint.php
+++ b/inc/extensions/ext-imprint.php
@@ -53,10 +53,10 @@ switch (getExtensionMode()) {
 		addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_guest_menu` WHERE `what`='impressum' LIMIT 1");
 
 		// Extend guest menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','imprint','Impressum',4,'N','N')");
+		addGuestMenuSql('main','imprint','Impressum','N','N',4);
 
 		// Extend admin menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_imprint','Impressum','Einstellungen zum Impressum.',8)");
+		addAdminMenuSql('setup','config_imprint','Impressum','Einstellungen zum Impressum.',8);
 
 		// Extend config with with entries
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `imprint_image_url` VARCHAR(255) NOT NULL DEFAULT ''");
diff --git a/inc/extensions/ext-logs.php b/inc/extensions/ext-logs.php
index 55aeee596f..418c20e159 100644
--- a/inc/extensions/ext-logs.php
+++ b/inc/extensions/ext-logs.php
@@ -50,7 +50,7 @@ setExtensionVersionHistory(array('0.0'));
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('stats','logs','Aufruflogb&uuml;cher','Verwalten Sie Ihre Aufruflogb&uuml;cher mit diesem Admin-Bereich! (Derzeit nur Download!)',8)");
+		addAdminMenuSql('stats','logs','Aufruflogb&uuml;cher','Verwalten Sie Ihre Aufruflogb&uuml;cher mit diesem Admin-Bereich! (Derzeit nur Download!)',8);
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `logs_base` VARCHAR(255) NOT NULL DEFAULT 'logs'");
 		break;
 
diff --git a/inc/extensions/ext-maintenance.php b/inc/extensions/ext-maintenance.php
index 0345a064c7..edd99b4483 100644
--- a/inc/extensions/ext-maintenance.php
+++ b/inc/extensions/ext-maintenance.php
@@ -54,7 +54,7 @@ switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD maintenance ENUM('Y','N') NOT NULL DEFAULT 'N';");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','maintenance','Wartungsmodus','Schalten Sie den Wartungsmodus ein, nur wenn sehr schwerwiegende Fehler vorliegen, die Sie oder mxchange.org nicht schenll genug beheben k&ouml;nnen.','10')");
+		addAdminMenuSql('setup','maintenance','Wartungsmodus','Schalten Sie den Wartungsmodus ein, nur wenn sehr schwerwiegende Fehler vorliegen, die Sie oder mxchange.org nicht schenll genug beheben k&ouml;nnen.',10);
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-mediadata.php b/inc/extensions/ext-mediadata.php
index 3526ceeb7d..c66d91cf38 100644
--- a/inc/extensions/ext-mediadata.php
+++ b/inc/extensions/ext-mediadata.php
@@ -127,7 +127,7 @@ PRIMARY KEY (media_key)
 			case '0.0.7': // SQL queries for v0.0.7
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `mt_start` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `mt_stage` BIGINT(20) UNSIGNED NOT NULL DEFAULT '500'");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_mediadata','Mediendaten','Stellen Sie allgemeine Einstellungen zu den Mediendaten ein.', 10)");
+				addAdminMenuSql('setup','config_mediadata','Mediendaten','Stellen Sie allgemeine Einstellungen zu den Mediendaten ein.', 10);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Start des {?mt_word2?} und Anzahl Anmeldungen aufgenommen. (Task #13)<br />
@@ -140,7 +140,7 @@ Bitte stellen Sie diesen derzeit manuell unter <a href=\"{?URL?}/modules.php?mod
 				break;
 
 			case '0.0.9': // SQL queries for v0.0.9
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','mediadata','Mediendaten',3,'Y','N')");
+				addGuestMenuSql('main','mediadata','Mediendaten','N','N',3);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Men&uuml;punkt wird durch diese Erweiterung generiert.");
diff --git a/inc/extensions/ext-menu.php b/inc/extensions/ext-menu.php
index c850289ccf..81cbb4137c 100644
--- a/inc/extensions/ext-menu.php
+++ b/inc/extensions/ext-menu.php
@@ -50,13 +50,13 @@ setExtensionVersionHistory(array('0.0','0.0.1','0.0.2'));
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('menu',NULL,'Men&uuml;-System','Alle drei Men&uuml;-System bearbeiten (Admin-, Mitglied- und Gast-Men&uuml;)',1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('menu','admin_add','Admin-Men&uuml; hinzuf&uuml;gen','Weiteren Men&uuml;punkt zum Admin-Bereich hinzuf&uuml;gen',1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('menu','adminedit','Vom Admin editieren','Das Administrationsmen&uuml; mit neuen Men&uuml;s erweitern, bestehende &auml;ndern oder l&ouml;schen. <strong>Vorsicht!</strong> L&ouml;schen Sie nicht das Login-Men&uuml;!',2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('menu','mem_add','Mitgliedsmen&uuml; hinzuf&uuml;gen','Weiteren Men&uuml;punkt zum Mitgliedsmen&uuml; hinzuf&uuml;gen',3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('menu','memedit','Mitgliedsmen&uuml; editieren','Mitgliedsmen&uuml; editieren oder l&ouml;schen',4)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('menu','guest_add','G&auml;ste-Men&uuml; hinzuf&uuml;gen','F&uuml;gen Sie weitere Men&uuml;punkte dem G&auml;ste-Men&uuml; hinzu.',5)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('menu','guestedit','G&auml;ste-Men&uuml; editieren','G&auml;ste-Men&uuml; editieren, l&ouml;schen',6)");
+		addAdminMenuSql('menu',NULL,'Men&uuml;-System','Alle drei Men&uuml;-System bearbeiten (Admin-, Mitglied- und Gast-Men&uuml;)',1);
+		addAdminMenuSql('menu','admin_add','Admin-Men&uuml; hinzuf&uuml;gen','Weiteren Men&uuml;punkt zum Admin-Bereich hinzuf&uuml;gen',1);
+		addAdminMenuSql('menu','adminedit','Vom Admin editieren','Das Administrationsmen&uuml; mit neuen Men&uuml;s erweitern, bestehende &auml;ndern oder l&ouml;schen. <strong>Vorsicht!</strong> L&ouml;schen Sie nicht das Login-Men&uuml;!',2);
+		addAdminMenuSql('menu','mem_add','Mitgliedsmen&uuml; hinzuf&uuml;gen','Weiteren Men&uuml;punkt zum Mitgliedsmen&uuml; hinzuf&uuml;gen',3);
+		addAdminMenuSql('menu','memedit','Mitgliedsmen&uuml; editieren','Mitgliedsmen&uuml; editieren oder l&ouml;schen',4);
+		addAdminMenuSql('menu','guest_add','G&auml;ste-Men&uuml; hinzuf&uuml;gen','F&uuml;gen Sie weitere Men&uuml;punkte dem G&auml;ste-Men&uuml; hinzu.',5);
+		addAdminMenuSql('menu','guestedit','G&auml;ste-Men&uuml; editieren','G&auml;ste-Men&uuml; editieren, l&ouml;schen',6);
 		break;
 
 	case 'remove': // Do stuff when removing extension
@@ -79,7 +79,7 @@ switch (getExtensionMode()) {
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `member_menu_advert_enabled` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
 
 				// Insert menu entry
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('menu','config_menu','Einstellungen','Einstellungen an den Gast- und Mitgliedsmen&uuml;s vornehmen.',7)");
+				addAdminMenuSql('menu','config_menu','Einstellungen','Einstellungen an den Gast- und Mitgliedsmen&uuml;s vornehmen.',7);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Gast- und Mitgliedsmen&uuml;s k&ouml;nnen nun Werbung zwischen den Men&uuml;bl&ouml;cken einblenden.");
diff --git a/inc/extensions/ext-mods.php b/inc/extensions/ext-mods.php
index 509197de14..4fa9f312f4 100644
--- a/inc/extensions/ext-mods.php
+++ b/inc/extensions/ext-mods.php
@@ -50,9 +50,9 @@ setExtensionVersionHistory(array('0.0', '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.0
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('mods', NULL, 'Modul-Management','Verwalten Sie die Basis-Module index, login, admin usw.', 4)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('mods','config_mods','Module &auml;ndern','&Auml;ndern Sie hier die Zugtiffsrechte auf die Module. Was dennoch nicht geht: Mitglied- oder Gastzugriffsrtechte auf Admin-Module bzw. Gastzugriffsrechte auf Mitglieder-Module. Diese sind extra abgesichert.', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('mods','stats_mods','Modul-Statistiken','Sehen Sie sich hier die Statistiken der Module und die damit verkn&uuml;pften action- und what-Dateien an. Bei einigen Modulen gibt es allerdings keine verkn&uuml;pften Dateien und somit keine Extra-Statistik.', 2)");
+		addAdminMenuSql('mods', NULL, 'Modul-Management','Verwalten Sie die Basis-Module index, login, admin usw.', 4);
+		addAdminMenuSql('mods','config_mods','Module &auml;ndern','&Auml;ndern Sie hier die Zugtiffsrechte auf die Module. Was dennoch nicht geht: Mitglied- oder Gastzugriffsrtechte auf Admin-Module bzw. Gastzugriffsrechte auf Mitglieder-Module. Diese sind extra abgesichert.', 1);
+		addAdminMenuSql('mods','stats_mods','Modul-Statistiken','Sehen Sie sich hier die Statistiken der Module und die damit verkn&uuml;pften action- und what-Dateien an. Bei einigen Modulen gibt es allerdings keine verkn&uuml;pften Dateien und somit keine Extra-Statistik.', 2);
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-newsletter.php b/inc/extensions/ext-newsletter.php
index 9a65082a83..7ff6a38547 100644
--- a/inc/extensions/ext-newsletter.php
+++ b/inc/extensions/ext-newsletter.php
@@ -75,10 +75,10 @@ switch (getExtensionMode()) {
 	case 'update': // Update an extension
 		switch (getCurrentExtensionVersion()) {
 			case '0.0.1': // SQL queries for v0.0.1
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('newsletter', NULL, 'Newsletter','Einstellungen am Newsletter, Newsletter versenden, usw.', 3)");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('newsletter','config_newsletter','Einstellungen','Einstellungen am Newsletter vornehmen.', 3)");
+				addAdminMenuSql('newsletter', NULL, 'Newsletter','Einstellungen am Newsletter, Newsletter versenden, usw.', 3);
+				addAdminMenuSql('newsletter','config_newsletter','Einstellungen','Einstellungen am Newsletter vornehmen.', 3);
 				addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `action`='newsletter', `what`='send_newsletter', `title`='Versenden', `sort`='1' WHERE `what`='newsletter' LIMIT 1");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','newsletter','Newsletter-Empfang','N','Y', 10)");
+				addMemberMenuSql('main','newsletter','Newsletter-Empfang','N','Y', 10);
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `nl_receive` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
 
 				// Update notes (these will be set as task text!)
@@ -195,7 +195,7 @@ PRIMARY KEY (`nl_order_id`)
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `nl_archive` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
 
 				// Admin menu
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('newsletter', 'add_newsletter','Neuen erstellen','Legen Sie hier einen neuen Newsletter mit Betreff und Verfallsdatum an.', 1)");
+				addAdminMenuSql('newsletter', 'add_newsletter','Neuen erstellen','Legen Sie hier einen neuen Newsletter mit Betreff und Verfallsdatum an.', 1);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Komplett&uuml;berarbeitung der Erweiterung, siehe neuer Beschreibungstext.");
diff --git a/inc/extensions/ext-nickname.php b/inc/extensions/ext-nickname.php
index eec2bddcf1..b7ac3ca38d 100644
--- a/inc/extensions/ext-nickname.php
+++ b/inc/extensions/ext-nickname.php
@@ -52,7 +52,7 @@ switch (getExtensionMode()) {
 		// SQL commands to run
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD nickname VARCHAR(255) NOT NULL DEFAULT ''");
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD nick_userid ENUM ('nick','userid') NOT NULL DEFAULT 'userid'");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','nickname','Nicknamen','5','Y','Y')");
+		addMemberMenuSql('main','nickname','Nicknamen','Y','Y',5);
 		break;
 
 	case 'remove': // Do stuff when removing extension
@@ -103,7 +103,7 @@ switch (getExtensionMode()) {
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `nickname_len` TINYINT(3) UNSIGNED NOT NULL DEFAULT '5'");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `nickname_pattern` VARCHAR(255) NOT NULL DEFAULT 'a-zA-Z0-9_'");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `nickname_chars` VARCHAR(255) NOT NULL DEFAULT 'a-z, A-Z, 0-9, _'");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_nickname','Nicknamen','Stellen Sie minimale Nicknamenl&auml;nge, sowie erlaubte Zeichen hier ein.', 12)");
+				addAdminMenuSql('setup','config_nickname','Nicknamen','Stellen Sie minimale Nicknamenl&auml;nge, sowie erlaubte Zeichen hier ein.', 12);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Minimale L&auml;nge, sowie erlaubte Zeichen sind per Adminbereich &auml;nderbar. Setzen Sie als erlaubte Zeichen nur URL-konforme Zeichen ein!");
@@ -174,7 +174,7 @@ switch (getExtensionMode()) {
 				break;
 
 			case '0.1.9': // SQL queries for v0.1.9
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','list_nickname','Nickname-Historie','Listet alle verwendeten Nicknames der Mitglieder auf.', 12)");
+				addAdminMenuSql('user','list_nickname','Nickname-Historie','Listet alle verwendeten Nicknames der Mitglieder auf.', 12);
 				addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_nickname_history`");
 				addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_nickname_history` (
 id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
diff --git a/inc/extensions/ext-online.php b/inc/extensions/ext-online.php
index 87e2208fe6..d9a9d71d54 100644
--- a/inc/extensions/ext-online.php
+++ b/inc/extensions/ext-online.php
@@ -68,7 +68,7 @@ KEY (`userid`),
 KEY (`refid`),
 KEY `admin_member` (`is_admin`,`is_member`)
 ) TYPE={?_TABLE_TYPE?}");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('misc','usr_online','Online-Statistik','Eine Liste von derzeit &quot;Online&quot; Usern. Doppelte Eintr&auml;ge k&ouml;nnte auf mangelnden Cookie-Support des Browsers oder auf einen Spider hindeuten.', 1)");
+		addAdminMenuSql('misc','usr_online','Online-Statistik','Eine Liste von derzeit &quot;Online&quot; Usern. Doppelte Eintr&auml;ge k&ouml;nnte auf mangelnden Cookie-Support des Browsers oder auf einen Spider hindeuten.', 1);
 		break;
 
 	case 'remove': // Do stuff when removing extension
@@ -115,7 +115,7 @@ KEY `admin_member` (`is_admin`,`is_member`)
 				break;
 
 			case '0.0.5': // SQL queries for v0.0.5
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('online',NULL,'Jetzt Online','2','Y','N')");
+				addGuestMenuSql('online',NULL,'Jetzt Online','Y','N',2);
 
 				// Register filter
 				registerFilter('init', 'UPDATE_ONLINE_LIST', false, true, getExtensionDryRun());
diff --git a/inc/extensions/ext-optimize.php b/inc/extensions/ext-optimize.php
index 34b68946ff..79ce41bff5 100644
--- a/inc/extensions/ext-optimize.php
+++ b/inc/extensions/ext-optimize.php
@@ -58,7 +58,7 @@ switch (getExtensionMode()) {
   gain decimal(10,3) NOT NULL DEFAULT '0.000',
   PRIMARY KEY (id)
 ) TYPE={?_TABLE_TYPE?}");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('misc','optimize','DB optimieren','F&uuml;hren Sie dies ab und an aus, damit &uuml;berfl&uuml;ssige Daten aus der Datenbank entfernt werden.','5')");
+		addAdminMenuSql('misc','optimize','DB optimieren','F&uuml;hren Sie dies ab und an aus, damit &uuml;berfl&uuml;ssige Daten aus der Datenbank entfernt werden.','5');
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-order.php b/inc/extensions/ext-order.php
index 1c802fcd01..9b7993c3ed 100644
--- a/inc/extensions/ext-order.php
+++ b/inc/extensions/ext-order.php
@@ -74,7 +74,7 @@ switch (getExtensionMode()) {
 		switch (getCurrentExtensionVersion()) {
 			case '0.1.0': // SQL queries for v0.1
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD order_max_full ENUM('ORDER','MAX') NOT NULL DEFAULT 'MAX'");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('setup','config_order','Mailbuchungsseite','7','Einstellungen am Mailbuchungsformular.')");
+				addAdminMenuSql('setup','config_order','Mailbuchungsseite','7','Einstellungen am Mailbuchungsformular.');
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Maximale Mailbuchungen sind nun vom maximalen Empfang abh&auml;gig.");
@@ -82,7 +82,7 @@ switch (getExtensionMode()) {
 
 			case '0.1.1': // SQL queries for v0.1.1
 				addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `what`='config_order' LIMIT 1");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('setup','config_order','Mailbuchungsseite','7','Einstellungen am Mailbuchungsformular.')");
+				addAdminMenuSql('setup','config_order','Mailbuchungsseite','7','Einstellungen am Mailbuchungsformular.');
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD mail_orders BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
 
 				// Update notes (these will be set as task text!)
@@ -270,8 +270,8 @@ nicht die vom Mitglied eingegebene. Resultat: Das Script beschwerte sich, der Us
 				break;
 
 			case '0.4.6': // SQL queries for v0.4.6
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('order',NULL,'Mailbuchungen',3,'Y','N')");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('order','order2','Framekiller-Mails',2,'Y','N')");
+				addMemberMenuSql('order',NULL,'Mailbuchungen','N','Y',3);
+				addMemberMenuSql('order','order2','Framekiller-Mails','N','Y',2);
 				addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `action`='order', `sort`='1', `title`='Klick-Mails' WHERE `what`='order' LIMIT 1");
 
 				// Update notes (these will be set as task text!)
diff --git a/inc/extensions/ext-other.php b/inc/extensions/ext-other.php
index 8520a0993e..02e16d3baf 100644
--- a/inc/extensions/ext-other.php
+++ b/inc/extensions/ext-other.php
@@ -53,7 +53,7 @@ setExtensionAlwaysActive('Y');
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_other','Sonstige Einstellungen','Sonstige Einstellungen an Ihrem Mailtausch.',13)");
+		addAdminMenuSql('setup','config_other','Sonstige Einstellungen','Sonstige Einstellungen an Ihrem Mailtausch.',13);
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-payout.php b/inc/extensions/ext-payout.php
index 85e6ad3861..6d39cef8ed 100644
--- a/inc/extensions/ext-payout.php
+++ b/inc/extensions/ext-payout.php
@@ -72,9 +72,9 @@ rate FLOAT(22,3) UNSIGNED NOT NULL DEFAULT '0.000',
 min_points BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
 PRIMARY KEY (id)
 ) TYPE={?_TABLE_TYPE?}");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_payouts','Auszahlungen','Auszahlungsarten einstellen, neu anlegen oder l&ouml;schen.','15')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('payouts','list_payouts','Anfragen auflisten','Listet alle Auszahlungsanfragen Ihrer Mitglieder auf.','16')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','payout','Auszahlungen','N','N','11')");
+		addAdminMenuSql('setup','config_payouts','Auszahlungen','Auszahlungsarten einstellen, neu anlegen oder l&ouml;schen.',15);
+		addAdminMenuSql('payouts','list_payouts','Anfragen auflisten','Listet alle Auszahlungsanfragen Ihrer Mitglieder auf.',16);
+		addMemberMenuSql('main','payout','Auszahlungen','N','N',11);
 		break;
 
 	case 'remove': // Do stuff when removing extension
@@ -99,7 +99,7 @@ PRIMARY KEY (id)
 		switch (getCurrentExtensionVersion())
 		{
 			case '0.1.2': // SQL queries for v0.1.2
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('payouts', NULL, 'Auszahlungsmanagement','Management der Auszahlungsarten.','8')");
+				addAdminMenuSql('payouts', NULL, 'Auszahlungsmanagement','Management der Auszahlungsarten.',8);
 				addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_admin_menu` SET `action`='payouts', `title`='Einstellungen' WHERE `action`='setup' AND `what`='config_payouts' LIMIT 1");
 				break;
 
diff --git a/inc/extensions/ext-primera.php b/inc/extensions/ext-primera.php
index bd4473adba..2a2d7adac7 100644
--- a/inc/extensions/ext-primera.php
+++ b/inc/extensions/ext-primera.php
@@ -77,12 +77,12 @@ PRIMARY KEY (id)
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD primera_userid VARCHAR(255) NOT NULL DEFAULT ''");
 
 		// Admin menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('primera', NULL, 'Primera-Management','Konfiguration zur Primera-API einstellen, Auszahlungen auflisten usw..', 15)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('primera','config_primera','Primera-API-Einstellungen','Konfiguration zur Primera-API einstellen.', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('primera','list_primera','Primera-Anfragen auflisten','Listet alle Primera-Auszahlungsanfragen Ihrer Mitglieder auf.', 2)");
+		addAdminMenuSql('primera', NULL, 'Primera-Management','Konfiguration zur Primera-API einstellen, Auszahlungen auflisten usw..', 15);
+		addAdminMenuSql('primera','config_primera','Primera-API-Einstellungen','Konfiguration zur Primera-API einstellen.', 1);
+		addAdminMenuSql('primera','list_primera','Primera-Anfragen auflisten','Listet alle Primera-Auszahlungsanfragen Ihrer Mitglieder auf.', 2);
 
 		// Member menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','primera','Primera-Ein-/Auszahlungen','N','N','11')");
+		addMemberMenuSql('main','primera','Primera-Ein-/Auszahlungen','N','Y',11);
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-rallye.php b/inc/extensions/ext-rallye.php
index d63be45392..fa87340920 100644
--- a/inc/extensions/ext-rallye.php
+++ b/inc/extensions/ext-rallye.php
@@ -88,16 +88,16 @@ PRIMARY KEY (id)
 ) TYPE={?_TABLE_TYPE?}");
 
 		// Admin menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('rallye', NULL, 'Rallye-Management','Richten Sie neue Ref-Rallyes ein, die zeitgesteuert anfangen und aufh&ouml;hren. Dabei wird alles weitere automatisch geregelt.','9')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('rallye','add_rallye','Neue Rallye hinzuf&uuml;gen','Neue Ref-Rallye hinzuf&uuml;gen.','1')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('rallye','config_rallye_prices','Preise einrichten','Richten Sie Preise zu den Rallyes ein.','2')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('rallye','list_rallyes','Rallyes verwalten','Alle bestehenden Ref-Rallyes auflisten, bearbeiten, stoppen, l&ouml;schen usw.','3')");
+		addAdminMenuSql('rallye', NULL, 'Rallye-Management','Richten Sie neue Ref-Rallyes ein, die zeitgesteuert anfangen und aufh&ouml;hren. Dabei wird alles weitere automatisch geregelt.',9);
+		addAdminMenuSql('rallye','add_rallye','Neue Rallye hinzuf&uuml;gen','Neue Ref-Rallye hinzuf&uuml;gen.',1);
+		addAdminMenuSql('rallye','config_rallye_prices','Preise einrichten','Richten Sie Preise zu den Rallyes ein.',2);
+		addAdminMenuSql('rallye','list_rallyes','Rallyes verwalten','Alle bestehenden Ref-Rallyes auflisten, bearbeiten, stoppen, l&ouml;schen usw.',3);
 
 		// Guest menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','rallyes','Ref-Rallyes','Y','Y','9')");
+		addGuestMenuSql('main','rallyes','Ref-Rallyes','N','Y',9);
 
 		// Member menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','rallyes','Ref-Rallyes','Y','Y','9')");
+		addMemberMenuSql('main','rallyes','Ref-Rallyes','N','Y',9);
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-refback.php b/inc/extensions/ext-refback.php
index 161c8e6aa7..cd653a6498 100644
--- a/inc/extensions/ext-refback.php
+++ b/inc/extensions/ext-refback.php
@@ -64,7 +64,7 @@ UNIQUE `user_refid` (`userid`,`level`,`refid`),
 KEY (`level`),
 KEY (`refid`)
 ) ENGINE={?_TABLE_TYPE?} COMMENT='User Referals With Refback'");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','refback','Ref-Back einstellen',4,'N','N')");
+		addMemberMenuSql('main','refback','Ref-Back einstellen','N','Y',4);
 
 		// Execute this special file on registration
 		addIncludeToPool('extension', 'inc/gen_refback.php');
@@ -94,8 +94,8 @@ KEY (`refid`)
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `refback_enabled` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `refback_min_perc` TINYINT(3) NOT NULL DEFAULT 0");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `refback_max_perc` TINYINT(3) NOT NULL DEFAULT 100");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_refback','Refback','&Auml;ndern Sie Einstellungen zum Refback, wie z.B. Minium- und Maximum-Prozente, was die Mitglieder einstellen d&uuml;rfen.',15)");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','list_refback','Refback auflisten','Refback aller Mitglieder auflisten.',15)");
+				addAdminMenuSql('setup','config_refback','Refback','&Auml;ndern Sie Einstellungen zum Refback, wie z.B. Minium- und Maximum-Prozente, was die Mitglieder einstellen d&uuml;rfen.',15);
+				addAdminMenuSql('user','list_refback','Refback auflisten','Refback aller Mitglieder auflisten.',15);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Refback-System ist nun ein-/ausschaltbar und minimale/maximale Refback-Prozente sind festlegbar.");
diff --git a/inc/extensions/ext-register.php b/inc/extensions/ext-register.php
index 3cdd1aff5b..a5d582249a 100644
--- a/inc/extensions/ext-register.php
+++ b/inc/extensions/ext-register.php
@@ -93,7 +93,7 @@ PRIMARY KEY (id)
 				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_must_register` (`field_name`, `field_required`) VALUES ('city','Y')");
 
 				// Add admin menu
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_register','Pflichtfelder','Stellen Sie hier die Pflichtfelder sowohl im Anmeldeformular, als auch im Mitgliedsbereich unter <strong>Profildaten &auml;ndern</strong> ein.', 12)");
+				addAdminMenuSql('setup','config_register','Pflichtfelder','Stellen Sie hier die Pflichtfelder sowohl im Anmeldeformular, als auch im Mitgliedsbereich unter <strong>Profildaten &auml;ndern</strong> ein.', 12);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Einstellbare Pflichtfelder hinzugef&uuml;gt.");
@@ -334,7 +334,7 @@ PRIMARY KEY (id)
 				break;
 
 			case '0.5.4': // SQL queries for v0.5.4
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_register2','Anmeldeformular','Stellen Sie ein, wie viel Kategorien der Gast bei der Anmeldung mindestens einstellen muss. Diese Einstellung gilt nachher auch im Mitgliedsbereich!',8)");
+				addAdminMenuSql('setup','config_register2','Anmeldeformular','Stellen Sie ein, wie viel Kategorien der Gast bei der Anmeldung mindestens einstellen muss. Diese Einstellung gilt nachher auch im Mitgliedsbereich!',8);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Weiteren Men&uuml;punkt aus <strong>menu-{?DEFAULT_LANG?} heraus geholt.");
diff --git a/inc/extensions/ext-removeip.php b/inc/extensions/ext-removeip.php
index 10b40389b3..453bbb9cd1 100644
--- a/inc/extensions/ext-removeip.php
+++ b/inc/extensions/ext-removeip.php
@@ -60,7 +60,7 @@ switch (getExtensionMode())
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `removeip_member_show` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `removeip_sponsor_show` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `anonymous_ip` ENUM('LOCAL','ZERO','RANDOM') NOT NULL DEFAULT '127.0.0.1'");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_removeip','Anonymit&auml;t/Privatsph&auml;hre','Stellen Sie hier ein, ob die IP-Nummer, User-Agent und/oder Referer-Adresse anonymisiert im gesamten Script verwendet werden soll.',15)");
+		addAdminMenuSql('setup','config_removeip','Anonymit&auml;t/Privatsph&auml;hre','Stellen Sie hier ein, ob die IP-Nummer, User-Agent und/oder Referer-Adresse anonymisiert im gesamten Script verwendet werden soll.',15);
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-repair.php b/inc/extensions/ext-repair.php
index c1b6b8f30f..b430949d3a 100644
--- a/inc/extensions/ext-repair.php
+++ b/inc/extensions/ext-repair.php
@@ -50,8 +50,8 @@ setExtensionVersionHistory(array('0.0', '0.1.0', '0.1.1', '0.1.2', '0.1.3', '0.1
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('repair', NULL, 'Reperaturen','7','Repariert u.a. die Kategorie-Auswahlen der Mitglieder usw.')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('repair','repair_cats','Kategorieauswahlen','1','Repariert die Kategorieauswahlen Ihrer Mitglieder.')");
+		addAdminMenuSql('repair', NULL, 'Reperaturen','Repariert u.a. die Kategorie-Auswahlen der Mitglieder usw.',7);
+		addAdminMenuSql('repair','repair_cats','Kategorieauswahlen','Repariert die Kategorieauswahlen Ihrer Mitglieder.',1);
 		break;
 
 	case 'remove': // Do stuff when removing extension
@@ -72,9 +72,9 @@ switch (getExtensionMode()) {
 	case 'update': // Update an extension
 		switch (getCurrentExtensionVersion()) {
 			case '0.1.0': // SQL queries for v0.1
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('repair','repair_amnu','Admin-Men&uuml;', 2, 'Repariert die Gewichtung des Admin-Men&uuml;-Systems')");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('repair','repair_gmnu','Gast-Men&uuml;', 3, 'Repariert die Gewichtung des G&auml;ste-Men&uuml;-Systems')");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('repair','repair_mmnu','Mitglied-Men&uuml;', 4, 'Repariert die Gewichtung des Mitglieder-Men&uuml;-Systems')");
+				addAdminMenuSql('repair','repair_amnu','Admin-Men&uuml;', 'Repariert die Gewichtung des Admin-Men&uuml;-Systems',2);
+				addAdminMenuSql('repair','repair_gmnu','Gast-Men&uuml;', 'Repariert die Gewichtung des G&auml;ste-Men&uuml;-Systems',3);
+				addAdminMenuSql('repair','repair_mmnu','Mitglied-Men&uuml;', 'Repariert die Gewichtung des Mitglieder-Men&uuml;-Systems',4);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("F&uuml;gt ein Men&uuml;punkt zur Reperatur der Gewichtung des Admin-Men&uuml;s hinzu.");
diff --git a/inc/extensions/ext-rewrite.php b/inc/extensions/ext-rewrite.php
index 253e53d227..886f74997e 100644
--- a/inc/extensions/ext-rewrite.php
+++ b/inc/extensions/ext-rewrite.php
@@ -126,7 +126,7 @@ switch (getExtensionMode()) {
 
 			case '0.0.9': // SQL queries for v0.0.9
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD rewrite_skip VARCHAR(255) NOT NULL DEFAULT 'login:admin:frametester:mailid'");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_rewrite','Rewrite-Engine','Stellen Sie hier ein, welche Module &uuml;bersprungen werden sollen, in denen also kein Umschreiben des HTML-Codes stattfinden soll.', 8)");
+				addAdminMenuSql('setup','config_rewrite','Rewrite-Engine','Stellen Sie hier ein, welche Module &uuml;bersprungen werden sollen, in denen also kein Umschreiben des HTML-Codes stattfinden soll.', 8);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Zu &uuml;berspringende Module k&ouml;nnen per Admin-Bereich eingestellt werden.");
diff --git a/inc/extensions/ext-sponsor.php b/inc/extensions/ext-sponsor.php
index af8f8e702a..f1aa0a3d95 100644
--- a/inc/extensions/ext-sponsor.php
+++ b/inc/extensions/ext-sponsor.php
@@ -60,312 +60,314 @@ switch (getExtensionMode()) {
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_data`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_data` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-company VARCHAR(255) NOT NULL DEFAULT '',
-position VARCHAR(255) NOT NULL DEFAULT '',
-tax_ident VARCHAR(255) NOT NULL DEFAULT '',
-gender ENUM('M','F','C') NOT NULL DEFAULT 'M',
-surname VARCHAR(255) NOT NULL DEFAULT '',
-family VARCHAR(255) NOT NULL DEFAULT '',
-street_nr1 VARCHAR(255) NOT NULL DEFAULT '',
-street_nr2 VARCHAR(255) NOT NULL DEFAULT '',
-zip VARCHAR(6) NOT NULL DEFAULT '',
-city VARCHAR(255) NOT NULL DEFAULT '',
-country CHAR(2) NOT NULL DEFAULT 'DE',
-phone VARCHAR(255) NOT NULL DEFAULT '',
-fax VARCHAR(255) NOT NULL DEFAULT '',
-cell VARCHAR(255) NOT NULL DEFAULT '',
-email VARCHAR(255) NOT NULL DEFAULT '',
-url VARCHAR(255) NOT NULL DEFAULT '',
-password VARCHAR(255) NOT NULL DEFAULT '',
-remote_addr VARCHAR(15) NOT NULL DEFAULT '0.0.0.0',
-sponsor_created VARCHAR(10) NOT NULL DEFAULT 0,
-last_online VARCHAR(10) NOT NULL DEFAULT 0,
-last_change VARCHAR(10) NOT NULL DEFAULT 0,
-status ENUM('UNCONFIRMED','PENDING','CONFIRMED','LOCKED') NOT NULL DEFAULT 'UNCONFIRMED',
-receive_warnings ENUM('Y','N') NOT NULL DEFAULT 'Y',
-warning_interval BIGINT(20) UNSIGNED NOT NULL DEFAULT '".(getConfig('ONE_DAY')*7)."',
-points_amount FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
-points_used FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
-refid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-ref_count BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-hash VARCHAR(32) NOT NULL DEFAULT '',
-last_pay FLOAT(7,2) UNSIGNED NOT NULL DEFAULT '0.00',
-last_curr VARCHAR(255) NOT NULL DEFAULT '&euro;',
-KEY (refid),
-KEY (email),
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`company` VARCHAR(255) NOT NULL DEFAULT '',
+`position` VARCHAR(255) NOT NULL DEFAULT '',
+`tax_ident` VARCHAR(255) NOT NULL DEFAULT '',
+`gender` ENUM('M','F','C') NOT NULL DEFAULT 'M',
+`surname` VARCHAR(255) NOT NULL DEFAULT '',
+`family` VARCHAR(255) NOT NULL DEFAULT '',
+`street_nr1` VARCHAR(255) NOT NULL DEFAULT '',
+`street_nr2` VARCHAR(255) NOT NULL DEFAULT '',
+`zip` VARCHAR(6) NOT NULL DEFAULT '',
+`city` VARCHAR(255) NOT NULL DEFAULT '',
+`country` CHAR(2) NOT NULL DEFAULT 'DE',
+`phone` VARCHAR(255) NOT NULL DEFAULT '',
+`fax` VARCHAR(255) NOT NULL DEFAULT '',
+`cell` VARCHAR(255) NOT NULL DEFAULT '',
+`email` VARCHAR(255) NOT NULL DEFAULT '',
+`url` VARCHAR(255) NOT NULL DEFAULT '',
+`password` VARCHAR(255) NOT NULL DEFAULT '',
+`remote_addr` VARCHAR(15) NOT NULL DEFAULT '0.0.0.0',
+`sponsor_created` VARCHAR(10) NOT NULL DEFAULT 0,
+`last_online` VARCHAR(10) NOT NULL DEFAULT 0,
+`last_change` VARCHAR(10) NOT NULL DEFAULT 0,
+`status` ENUM('UNCONFIRMED','PENDING','CONFIRMED','LOCKED') NOT NULL DEFAULT 'UNCONFIRMED',
+`receive_warnings` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+`warning_interval` BIGINT(20) UNSIGNED NOT NULL DEFAULT '".(getConfig('ONE_DAY')*7)."',
+`points_amount` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
+`points_used` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
+`refid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`ref_count` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`hash` VARCHAR(32) NOT NULL DEFAULT '',
+`last_pay` FLOAT(7,2) UNSIGNED NOT NULL DEFAULT '0.00',
+`last_curr` VARCHAR(255) NOT NULL DEFAULT '&euro;',
+INDEX (`refid`),
+INDEX (`email`),
+UNIQUE KEY (`hash`),
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// Sponsor orders
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_orders`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_orders` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-sponsorid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-admin_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-regid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-payid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-pay_count BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-pay_status ENUM('PENDING','PAYED','UNPAYED','DELETED') NOT NULL DEFAULT 'PENDING',
-pay_ordered VARCHAR(10) NOT NULL DEFAULT 0,
-pay_done VARCHAR(10) NOT NULL DEFAULT 0,
-KEY (payid),
-KEY (regid),
-KEY (admin_id),
-KEY (sponsorid),
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`sponsorid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`admin_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`regid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`payid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`pay_count` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`pay_status` ENUM('PENDING','PAYED','UNPAYED','DELETED') NOT NULL DEFAULT 'PENDING',
+`pay_ordered` VARCHAR(10) NOT NULL DEFAULT 0,
+`pay_done` VARCHAR(10) NOT NULL DEFAULT 0,
+INDEX (`payid`),
+INDEX (`regid`),
+INDEX (`admin_id`),
+INDEX (`sponsorid`),
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// Pay-types
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_paytypes`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_paytypes` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-pay_name VARCHAR(255) NOT NULL DEFAULT '',
-pay_rate FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
-pay_min_count BIGINT(20) UNSIGNED NOT NULL DEFAULT 1,
-pay_currency VARCHAR(255) NOT NULL DEFAULT '&euro;',
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`pay_name` VARCHAR(255) NOT NULL DEFAULT '',
+`pay_rate` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
+`pay_min_count` BIGINT(20) UNSIGNED NOT NULL DEFAULT 1,
+`pay_currency` VARCHAR(255) NOT NULL DEFAULT '&euro;',
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// Points-to-action converting
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_action_convert`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_action_convert` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-ext_name VARCHAR(255) NOT NULL DEFAULT 'sponsor',
-conv_rate BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-conv_name VARCHAR(255) NOT NULL DEFAULT 'Mails',
-KEY (ext_name),
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`ext_name` VARCHAR(255) NOT NULL DEFAULT 'sponsor',
+`conv_rate` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`conv_name` VARCHAR(255) NOT NULL DEFAULT 'Mails',
+INDEX (`ext_name`),
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// Sponsor menu system (default)
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_menu`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_menu` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-action VARCHAR(255) NOT NULL DEFAULT '',
-what  VARCHAR(255) NULL DEFAULT NULL,
-title VARCHAR(255) NOT NULL DEFAULT '',
-active ENUM('Y','N') NOT NULL DEFAULT 'N',
-sort BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-KEY (action),
-UNIQUE KEY (what),
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`action` VARCHAR(255) NOT NULL DEFAULT '',
+`what`  VARCHAR(255) NULL DEFAULT NULL,
+`title` VARCHAR(255) NOT NULL DEFAULT '',
+`active` ENUM('Y','N') NOT NULL DEFAULT 'N',
+`sort` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+INDEX (`action`),
+UNIQUE KEY `action_what` (`action`,`what`),
+UNIQUE KEY (`what`),
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// Registry for performable actions by your sponsors
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_registry`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_registry` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-admin_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-ext_name VARCHAR(255) NOT NULL DEFAULT 'sponsor',
-is_active ENUM('Y','N') NOT NULL DEFAULT 'N',
-stamp_added VARCHAR(10) NOT NULL DEFAULT 0,
-KEY (ext_name),
-KEY (admin_id),
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`admin_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`ext_name` VARCHAR(255) NOT NULL DEFAULT 'sponsor',
+`is_active` ENUM('Y','N') NOT NULL DEFAULT 'N',
+`stamp_added` VARCHAR(10) NOT NULL DEFAULT 0,
+INDEX (`ext_name`),
+INDEX (`admin_id`),
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// URLs from the sponsors
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_urls`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_urls` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-sponsorid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-url VARCHAR(255) NOT NULL DEFAULT 'http://',
-title VARCHAR(255) NOT NULL DEFAULT '',
-clicks BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-status ENUM('PENDING','ACTIVE','LOCKED') NOT NULL DEFAULT 'PENDING',
-KEY (sponsorid),
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`sponsorid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`url` VARCHAR(255) NOT NULL DEFAULT 'http://',
+`title` VARCHAR(255) NOT NULL DEFAULT '',
+`clicks` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`status` ENUM('PENDING','ACTIVE','LOCKED') NOT NULL DEFAULT 'PENDING',
+INDEX (`sponsorid`),
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// Banners of any size from the sponsors
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_banner`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_banner` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-sponsorid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-url VARCHAR(255) NOT NULL DEFAULT 'http://',
-alternate VARCHAR(255) NOT NULL DEFAULT '',
-width INT(7) UNSIGNED NOT NULL DEFAULT 468,
-height INT(7) UNSIGNED NOT NULL DEFAULT 60,
-views BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-status ENUM('PENDING','ACTIVE','LOCKED') NOT NULL DEFAULT 'PENDING',
-KEY (sponsorid),
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`sponsorid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`url` VARCHAR(255) NOT NULL DEFAULT 'http://',
+`alternate` VARCHAR(255) NOT NULL DEFAULT '',
+`width` INT(7) UNSIGNED NOT NULL DEFAULT 468,
+`height` INT(7) UNSIGNED NOT NULL DEFAULT 60,
+`views` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`status` ENUM('PENDING','ACTIVE','LOCKED') NOT NULL DEFAULT 'PENDING',
+INDEX (`sponsorid`),
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// Campaigns
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_campaigns`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_campaigns` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-sponsorid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-admin_id BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-campaign_name VARCHAR(255) NOT NULL DEFAULT '',
-campaign_start VARCHAR(10) NOT NULL DEFAULT 0,
-campaign_end VARCHAR(10) NOT NULL DEFAULT 0,
-campaign_amount FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
-campaign_expired ENUM('Y','N') NOT NULL DEFAULT 'N',
-campaign_locked ENUM('Y','N') NOT NULL DEFAULT 'Y',
-campaign_ended VARCHAR(10) NOT NULL DEFAULT 0,
-locked_reason TINYTEXT,
-locked_timestamp VARCHAR(10) NOT NULL DEFAULT 0,
-status ENUM('PENDING','ACTIVE','LOCKED') NOT NULL DEFAULT 'PENDING',
-KEY (admin_id),
-KEY (sponsorid),
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`sponsorid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`admin_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`campaign_name` VARCHAR(255) NOT NULL DEFAULT '',
+`campaign_start` VARCHAR(10) NOT NULL DEFAULT 0,
+`campaign_end` VARCHAR(10) NOT NULL DEFAULT 0,
+`campaign_amount` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 0.00000,
+`campaign_expired` ENUM('Y','N') NOT NULL DEFAULT 'N',
+`campaign_locked` ENUM('Y','N') NOT NULL DEFAULT 'Y',
+`campaign_ended` VARCHAR(10) NOT NULL DEFAULT 0,
+`locked_reason` TINYTEXT,
+`locked_timestamp` VARCHAR(10) NOT NULL DEFAULT 0,
+`status` ENUM('PENDING','ACTIVE','LOCKED') NOT NULL DEFAULT 'PENDING',
+INDEX (`admin_id`),
+INDEX (`sponsorid`),
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// Campaigns + URLs + Banner
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_campaign_assigns`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_campaign_assigns` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-campaignid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-urlid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-bannerid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-clicks BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-views BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-KEY (bannerid),
-KEY (urlid),
-KEY (campaignid),
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`campaignid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`urlid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`bannerid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`clicks` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`views` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+INDEX (`bannerid`),
+INDEX (`urlid`),
+INDEX (`campaignid`),
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// Allowed data to display (administrative)
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_admin_data`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_admin_data` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-data_row VARCHAR(255) NOT NULL DEFAULT '',
-display ENUM('Y','N') NOT NULL DEFAULT 'N',
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`data_row` VARCHAR(255) NOT NULL DEFAULT '',
+`display` ENUM('Y','N') NOT NULL DEFAULT 'N',
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// Allowed data to display (sponsor-side)
 		//
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_sponsor_display_data`");
 		addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_sponsor_display_data` (
-id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
-sponsorid BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
-data_row VARCHAR(255) NOT NULL DEFAULT '',
-display ENUM('Y','N') NOT NULL DEFAULT 'N',
-KEY (sponsorid),
-PRIMARY KEY (id)
+`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+`sponsorid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
+`data_row` VARCHAR(255) NOT NULL DEFAULT '',
+`display` ENUM('Y','N') NOT NULL DEFAULT 'N',
+INDEX (`sponsorid`),
+PRIMARY KEY (`id`)
 )TYPE={?_TABLE_TYPE?}");
 		//
 		// Default allowed data to display
 		//
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('id','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('company','Y')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('position','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('tax_ident','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('gender','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('surname','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('family','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('street_nr1','Y')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('street_nr2','Y')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('zip','Y')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('city','Y')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('country','Y')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('phone','Y')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('fax','Y')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('email','Y')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('url','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('password','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('remote_addr','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('sponsor_created','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('last_online','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('last_change','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('status','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('receive_warnings','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('warning_interval','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('points_amount','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('points_used','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('refid','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('ref_count','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('hash','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('last_pay','N')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (data_row, display) VALUES ('last_curr','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('id','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('company','Y')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('position','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('tax_ident','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('gender','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('surname','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('family','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('street_nr1','Y')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('street_nr2','Y')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('zip','Y')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('city','Y')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('country','Y')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('phone','Y')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('fax','Y')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('email','Y')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('url','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('password','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('remote_addr','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('sponsor_created','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('last_online','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('last_change','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('status','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('receive_warnings','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('warning_interval','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('points_amount','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('points_used','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('refid','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('ref_count','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('hash','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('last_pay','N')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_admin_data` (`data_row`, `display`) VALUES ('last_curr','N')");
 		//
 		// Add default entries
 		//
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_registry` (ext_name, is_active, admin_id, stamp_added) VALUES ('sponsor','N',".getCurrentAdminId().",UNIX_TIMESTAMP())");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_action_convert` (ext_name, conv_rate, conv_name) VALUES ('sponsor','10','Mails')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_paytypes` (pay_name, pay_min_count, pay_rate, pay_currency) VALUES ('Standart-Paket', 5, 1000.00000, '&euro;')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_paytypes` (pay_name, pay_min_count, pay_rate, pay_currency) VALUES ('Spar-Paket', 1, 200.00000, '&euro;')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_paytypes` (pay_name, pay_min_count, pay_rate, pay_currency) VALUES ('Power-Paket', 10, 2000.00000, '&euro;')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_paytypes` (pay_name, pay_min_count, pay_rate, pay_currency) VALUES ('Sponsor-Paket', 20, 4000.00000, '&euro;')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_registry` (`ext_name`, `is_active`, `admin_id`, `stamp_added`) VALUES ('sponsor','N',".getCurrentAdminId().",UNIX_TIMESTAMP())");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_action_convert` (`ext_name`, `conv_rate`, `conv_name`) VALUES ('sponsor','10','Mails')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_paytypes` (`pay_name`,`pay_min_count`,`pay_rate`,`pay_currency`) VALUES ('Standart-Paket', 5, 1000.00000, '&euro;')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_paytypes` (`pay_name`,`pay_min_count`,`pay_rate`,`pay_currency`) VALUES ('Spar-Paket', 1, 200.00000, '&euro;')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_paytypes` (`pay_name`,`pay_min_count`,`pay_rate`,`pay_currency`) VALUES ('Power-Paket', 10, 2000.00000, '&euro;')");
+		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_paytypes` (`pay_name`,`pay_min_count`,`pay_rate`,`pay_currency`) VALUES ('Sponsor-Paket', 20, 4000.00000, '&euro;')");
 		//
 		// Admin menu
 		//
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor', NULL, 'Sponsorenbereich','Den Sponsorenbereich verwalten. Hier k&ouml;nnen Sie auch Sonderaktionen seperat deakvieren oder wieder aktivieren, Sponsorenaccounts verwalten usw.', 7)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','add_sponsor','Neuer Sponsor','Neues Sponsorenaccount hinzuf&uuml;gen.', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','unlock_sponsor','Sponsor freischalten','Sponsorenaccounts freigeben / sperren.', 2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','list_sponsor','Sponsoren auflisten','Listet alle verf&uuml;gbaren Sponsorenaccounts auf.', 3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','edit_sponsor','Sponsor &auml;ndern','Sponsorenaccount &auml;ndern (Grundaten, nicht Freigabe!).', 4)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','lock_sponsor','Sponsor ent-/sperren','Sponsorenaccount sperren und entsperren.', 5)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','del_sponsor','Sponsor l&ouml;schen','Sponsorenaccount l&ouml;schen.', 6)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','allow_sponsor_data','Datenverwaltung','Stellen Sie hier ein, welche Daten der Sponsor im Mitgliedsbereich &uuml;ber sicht anzeigen darf und welche nicht.', 7)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','list_sponsor_pays','Bestellungen...','Bestellungen der Sponsoren auflisten / bearbeiten.', 8)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','list_sponsor_menu','Sponsorenmen&uuml;','Das Sponsorenmen&uuml; kann hier ge&auml;ndert werden.', 9)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','list_sponsor_campaigns','Kampagnen...','Verwaltung aller von Ihren Sponsoren eingerichteten Kampagnen.', 10)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','list_sponsor_urls','URL-Verwaltung','Verwaltung (freischalten, sperren, l&ouml;schen, testen, bearbeiten usw.) von gebuchten URLs.', 11)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','list_sponsor_banner','Banner-Verwaltung','Verwaltung (freischalten, sperren, l&ouml;schen, testen, bearbeiten usw.) von gebuchten Bannern.', 12)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','list_sponsor_reg','Sponsor-Aktionen','Alle Sponsor-Aktionen auflisten und verwalten.', 13)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','list_sponsor_pay','Buchungspakete','Die Sponsoren k&ouml;nnen sich {?POINTS?}-Pakete kaufen. Hier k&ouml;nnen Sie diese verwalten.', 14)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','list_sponsor_conv','{?POINTS?} umwandeln...','Mit den vom Sponsor gekauften {?POINTS?} kann er Aktionen buchen. Hier stellen Sie die Umrechnungsrate von {?POINTS?} nach Sponsoraktionen um. Beispiel: 1 {?POINTS?} = 10 Mails.', 15)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('sponsor','config_sponsor','Einstellungen','Allgemeine Einstellungen am Sponsoring-System.', 16)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('repair','repr_sponsor','Sponsormen&uuml;','Gewichtung des Sponsormen&uuml;s reparieren.', 5)");
+		addAdminMenuSql('sponsor', NULL, 'Sponsorenbereich','Den Sponsorenbereich verwalten. Hier k&ouml;nnen Sie auch Sonderaktionen seperat deakvieren oder wieder aktivieren, Sponsorenaccounts verwalten usw.', 7);
+		addAdminMenuSql('sponsor','add_sponsor','Neuer Sponsor','Neues Sponsorenaccount hinzuf&uuml;gen.', 1);
+		addAdminMenuSql('sponsor','unlock_sponsor','Sponsor freischalten','Sponsorenaccounts freigeben / sperren.', 2);
+		addAdminMenuSql('sponsor','list_sponsor','Sponsoren auflisten','Listet alle verf&uuml;gbaren Sponsorenaccounts auf.', 3);
+		addAdminMenuSql('sponsor','edit_sponsor','Sponsor &auml;ndern','Sponsorenaccount &auml;ndern (Grundaten, nicht Freigabe!).', 4);
+		addAdminMenuSql('sponsor','lock_sponsor','Sponsor ent-/sperren','Sponsorenaccount sperren und entsperren.', 5);
+		addAdminMenuSql('sponsor','del_sponsor','Sponsor l&ouml;schen','Sponsorenaccount l&ouml;schen.', 6);
+		addAdminMenuSql('sponsor','allow_sponsor_data','Datenverwaltung','Stellen Sie hier ein, welche Daten der Sponsor im Mitgliedsbereich &uuml;ber sicht anzeigen darf und welche nicht.', 7);
+		addAdminMenuSql('sponsor','list_sponsor_pays','Bestellungen...','Bestellungen der Sponsoren auflisten / bearbeiten.', 8);
+		addAdminMenuSql('sponsor','list_sponsor_menu','Sponsorenmen&uuml;','Das Sponsorenmen&uuml; kann hier ge&auml;ndert werden.', 9);
+		addAdminMenuSql('sponsor','list_sponsor_campaigns','Kampagnen...','Verwaltung aller von Ihren Sponsoren eingerichteten Kampagnen.', 10);
+		addAdminMenuSql('sponsor','list_sponsor_urls','URL-Verwaltung','Verwaltung (freischalten, sperren, l&ouml;schen, testen, bearbeiten usw.) von gebuchten URLs.', 11);
+		addAdminMenuSql('sponsor','list_sponsor_banner','Banner-Verwaltung','Verwaltung (freischalten, sperren, l&ouml;schen, testen, bearbeiten usw.) von gebuchten Bannern.', 12);
+		addAdminMenuSql('sponsor','list_sponsor_reg','Sponsor-Aktionen','Alle Sponsor-Aktionen auflisten und verwalten.', 13);
+		addAdminMenuSql('sponsor','list_sponsor_pay','Buchungspakete','Die Sponsoren k&ouml;nnen sich {?POINTS?}-Pakete kaufen. Hier k&ouml;nnen Sie diese verwalten.', 14);
+		addAdminMenuSql('sponsor','list_sponsor_conv','{?POINTS?} umwandeln...','Mit den vom Sponsor gekauften {?POINTS?} kann er Aktionen buchen. Hier stellen Sie die Umrechnungsrate von {?POINTS?} nach Sponsoraktionen um. Beispiel: 1 {?POINTS?} = 10 Mails.', 15);
+		addAdminMenuSql('sponsor','config_sponsor','Einstellungen','Allgemeine Einstellungen am Sponsoring-System.', 16);
+		addAdminMenuSql('repair','repr_sponsor','Sponsormen&uuml;','Gewichtung des Sponsormen&uuml;s reparieren.', 5);
 		//
 		// Menu system (still admin menu)
 		//
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('menu','sponsor_medit','Sponsor-Men&uuml; editieren','Hier k&ouml;nnen Sie das Sponsorenmen&uuml; ver&auml;ndern: Positionen ver&auml;ndern, Men&uuml;titel &auml;ndern usw.', 7)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('menu','sponsor_madd','Sponsor-Men&uuml; hinzuf&uuml;gen','Hier k&ouml;nnen Sie einen neuen Men&uuml;punkt hinzuf&uuml;gen (falls Sie z.B. eigene Sponsoraktionen entwickelt haben oder welche versehendlich gel&ouml;scht haben.', 8)");
+		addAdminMenuSql('menu','sponsor_medit','Sponsor-Men&uuml; editieren','Hier k&ouml;nnen Sie das Sponsorenmen&uuml; ver&auml;ndern: Positionen ver&auml;ndern, Men&uuml;titel &auml;ndern usw.', 7);
+		addAdminMenuSql('menu','sponsor_madd','Sponsor-Men&uuml; hinzuf&uuml;gen','Hier k&ouml;nnen Sie einen neuen Men&uuml;punkt hinzuf&uuml;gen (falls Sie z.B. eigene Sponsoraktionen entwickelt haben oder welche versehendlich gel&ouml;scht haben.', 8);
 		//
 		// Guest menu
 		//
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`) VALUES ('sponsor', NULL, 'Sponsoren', 2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`) VALUES ('sponsor','sponsor_reg','Anmeldung', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`) VALUES ('sponsor','sponsor_login','Einloggen', 2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`) VALUES ('sponsor','sponsor_infos','Infos/Preise', 3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`) VALUES ('sponsor','sponsor_agb','AGBs', 4)");
+		addGuestMenuSql('sponsor', NULL, 'Sponsoren','N','Y', 2);
+		addGuestMenuSql('sponsor','sponsor_reg','Anmeldung','N','Y', 1);
+		addGuestMenuSql('sponsor','sponsor_login','Einloggen','N','Y', 2);
+		addGuestMenuSql('sponsor','sponsor_infos','Infos/Preise','N','Y', 3);
+		addGuestMenuSql('sponsor','sponsor_agb','AGBs','N','Y', 4);
 		//
 		// Member menu
 		//
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`) VALUES ('main','sponsor','Unsere Sponsoren', 8)");
+		addMemberMenuSql('main','sponsor','Unsere Sponsoren','N','Y',8);
 		//
 		// Add default menus to sponsor menu
 		//
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('main', NULL, 'Hauptauswahl','N', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('main','welcome','Willkommen','N', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('main','account','Ihr Account','N', 2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('main','campaigns','Kampagnen','N', 3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('main','list_urls','URL-Verwaltung','N', 4)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('main','list_banner','Banner-Verwaltung','N', 5)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('main','settings','Einstellungen','N', 6)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('main','fillup','Konto auff&uuml;llen','N', 7)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('main','stats','Statistiken','N', 8)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('main','inquiry','Kontaktanfrage','N', 9)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('main','refid','Referal-Link','N', 10)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('actions', NULL, 'Sponsorenaktionen','N', 2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('actions','mail','Sponsor-Mail','N', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('actions','banner','Banner buchen','N', 2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('actions','text','Textlink buchen','N', 3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('logout', NULL, 'Ausloggen','N', 3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('logout','logout','Ausloggen','N', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_sponsor_menu` (`action`,`what`,`title`,`active`,`sort`) VALUES ('logout','guest','Zum Gastbereich','N', 2)");
+		addSponsorMenuSql('main', NULL, 'Hauptauswahl','N', 1);
+		addSponsorMenuSql('main','welcome','Willkommen','N', 1);
+		addSponsorMenuSql('main','account','Ihr Account','N', 2);
+		addSponsorMenuSql('main','campaigns','Kampagnen','N', 3);
+		addSponsorMenuSql('main','list_urls','URL-Verwaltung','N', 4);
+		addSponsorMenuSql('main','list_banner','Banner-Verwaltung','N', 5);
+		addSponsorMenuSql('main','settings','Einstellungen','N', 6);
+		addSponsorMenuSql('main','fillup','Konto auff&uuml;llen','N', 7);
+		addSponsorMenuSql('main','stats','Statistiken','N', 8);
+		addSponsorMenuSql('main','inquiry','Kontaktanfrage','N', 9);
+		addSponsorMenuSql('main','refid','Referal-Link','N', 10);
+		addSponsorMenuSql('actions', NULL, 'Sponsorenaktionen','N', 2);
+		addSponsorMenuSql('actions','mail','Sponsor-Mail','N', 1);
+		addSponsorMenuSql('actions','banner','Banner buchen','N', 2);
+		addSponsorMenuSql('actions','text','Textlink buchen','N', 3);
+		addSponsorMenuSql('logout', NULL, 'Ausloggen','N', 3);
+		addSponsorMenuSql('logout','logout','Ausloggen','N', 1);
+		addSponsorMenuSql('logout','guest','Zum Gastbereich','N', 2);
 		//
 		// General configuration stuff
 		//
-		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD sponsor_ref_points FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 100.00000");
-		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD sponsor_min_points FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 1000.00000");
+		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `sponsor_ref_points` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 100.00000");
+		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `sponsor_min_points` FLOAT(20,5) UNSIGNED NOT NULL DEFAULT 1000.00000");
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-sql_patches.php b/inc/extensions/ext-sql_patches.php
index 3f7a340e15..d2fe0192c5 100644
--- a/inc/extensions/ext-sql_patches.php
+++ b/inc/extensions/ext-sql_patches.php
@@ -135,7 +135,7 @@ switch (getExtensionMode()) {
 		switch (getCurrentExtensionVersion()) {
 			case '0.0.1': // SQL queries for v0.0.1
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `ext_autopurge` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_extensions','Erweitungsmanagement','Alle Einstellungen am Erweiterungsmanagement.', 10)");
+				addAdminMenuSql('setup','config_extensions','Erweitungsmanagement','Alle Einstellungen am Erweiterungsmanagement.', 10);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Es kann nun bestimmt werden, ob vom Server gel&ouml;schte ext-xxx.php erkannt werden sollen und die verkn&uuml;pften Daten auch aus der Datenbank entfernt werden sollen.");
@@ -164,7 +164,7 @@ switch (getExtensionMode()) {
 
 			case '0.0.5': // SQL queries for v0.0.5
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `index_home` VARCHAR(255) NOT NULL DEFAULT 'welcome'");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_home','Home-Seite festlegen','Stellen Sie hier ein, welcher Men&uuml;punkt (what-welcome ist Standart) als Einstiegspunkt in das Men&uuml;system genutzt werden soll.', 5)");
+				addAdminMenuSql('setup','config_home','Home-Seite festlegen','Stellen Sie hier ein, welcher Men&uuml;punkt (what-welcome ist Standart) als Einstiegspunkt in das Men&uuml;system genutzt werden soll.', 5);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Die what-welcome.php ist derzeit die &quot;Home&quot;-Seite (Eingangsseite). Dies kann nun per Datenbank ge&auml;ndert werden.");
@@ -192,7 +192,7 @@ switch (getExtensionMode()) {
 				break;
 
 			case '0.0.9': // SQL queries for v0.0.9
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('email','list_unconfirmed','Unbest. Mails auflisten','Schauen Sie sich hier unbest&auml;tigte Maillinks an. Bitte diesen Link nur &uuml;ber dem EMail-Archiv oder EMail-Details aufrufen, direkt aufgerufen bekommen Sie eine Fehlermeldung.', 8)");
+				addAdminMenuSql('email','list_unconfirmed','Unbest. Mails auflisten','Schauen Sie sich hier unbest&auml;tigte Maillinks an. Bitte diesen Link nur &uuml;ber dem EMail-Archiv oder EMail-Details aufrufen, direkt aufgerufen bekommen Sie eine Fehlermeldung.', 8);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Unbest&auml;tigte Maillinks k&ouml;nnen unter Email-Management -&gt; Unbest. Mails auflisten aufgelistet werden.");
@@ -215,7 +215,7 @@ switch (getExtensionMode()) {
 				break;
 
 			case '0.1.2': // SQL queries for v0.1.2
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_refid','Standart-Ref-ID','Stellen Sie hier die User-ID ein, die genommen werden soll, wenn der Gast n icht per Referal-Link Ihren Mailtausch aufgerufen hat.', 7)");
+				addAdminMenuSql('setup','config_refid','Standart-Ref-ID','Stellen Sie hier die User-ID ein, die genommen werden soll, wenn der Gast n icht per Referal-Link Ihren Mailtausch aufgerufen hat.', 7);
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `def_refid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
 
 				// Update notes (these will be set as task text!)
@@ -248,7 +248,7 @@ switch (getExtensionMode()) {
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `title_right` VARCHAR(10) NOT NULL DEFAULT '--]'");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `enable_mod_title` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `enable_what_title` ENUM('Y','N') NOT NULL DEFAULT 'Y'");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_title','Seitentitel &auml;ndern','De-/aktivieren Sie hier die Dekorationen, sowie Modul-Titel und what-Titel im Seitentitel.', 8)");
+				addAdminMenuSql('setup','config_title','Seitentitel &auml;ndern','De-/aktivieren Sie hier die Dekorationen, sowie Modul-Titel und what-Titel im Seitentitel.', 8);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Dekorationen des Seitentiteles lassen sich ein- und ausschalten und selber definieren; Modul-Titel und Titel der <strong>what</strong>-Dateien kann hinzugef&uuml;gt werden.");
@@ -318,7 +318,7 @@ switch (getExtensionMode()) {
 				break;
 
 			case '0.2.6': // SQL queries for v0.2.6
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','sub_points','{?POINTS?} abziehen','Allen oder einem Mitglied {?POINTS?} abziehen.', 8)");
+				addAdminMenuSql('user','sub_points','{?POINTS?} abziehen','Allen oder einem Mitglied {?POINTS?} abziehen.', 8);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Abzug von {?POINTS?} nun m&ouml;glich.");
@@ -419,7 +419,7 @@ PRIMARY KEY (`id`)
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `admin_menu` ENUM('NEW','OLD') NOT NULL DEFAULT 'OLD'");
 
 				// Insert menus
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_admin','Adminmen&uuml;','Diverse Einstellungen am Adminmen&uuml; vornehmen.', 9)");
+				addAdminMenuSql('setup','config_admin','Adminmen&uuml;','Diverse Einstellungen am Adminmen&uuml; vornehmen.', 9);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Logische Bereiche (Logical Areas = LAs) eingef&uuml;hrt. Dadurch wird das immer st&auml;rker anwachsende Admin-Men&uuml; in grosse Hauptgruppen unterteilt, wodurch ein Auffinden von Men&uuml;punkten verbessert wird.");
@@ -451,11 +451,11 @@ PRIMARY KEY (`id`)
 
 			case '0.3.5': // SQL queries for v0.3.5
 				// List accounts with no referal
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('stats',NULL,'Statistiken',4,'Y','N')");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('stats','stats2','Framekiller-Mails',2,'Y','N')");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('extras',NULL,'Extras',5,'Y','N')");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('rals',NULL,'Rallyes',6,'Y','N')");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('account',NULL,'Ihr Account',7,'Y','N')");
+				addMemberMenuSql('stats',NULL,'Statistiken','Y','N',4);
+				addMemberMenuSql('stats','stats2','Framekiller-Mails','Y','N',2);
+				addMemberMenuSql('extras',NULL,'Extras','Y','N',5);
+				addMemberMenuSql('rals',NULL,'Rallyes','Y','N',6);
+				addMemberMenuSql('account',NULL,'Ihr Account','Y','N',7);
 				addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `action`='stats', `sort`='1', `title`='Klick-Mails' WHERE `what`='stats' LIMIT 1");
 				addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `action`='extras', `sort`='3' WHERE `what`='reflinks' LIMIT 1");
 
@@ -519,7 +519,7 @@ PRIMARY KEY (`id`)
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `proxy_port` INT(5) UNSIGNED NOT NULL DEFAULT 0");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `proxy_username` VARCHAR(255) NOT NULL DEFAULT ''");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `proxy_password` VARCHAR(255) NOT NULL DEFAULT ''");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_proxy','Proxy-Einstellungen','Sollte Ihr Webserver sich hinter einem Proxy befinden, so k&ouml;nnen Sie hier MXChange so konfigurieren, dass es Updates durch diesen hindurch sucht!', 15)");
+				addAdminMenuSql('setup','config_proxy','Proxy-Einstellungen','Sollte Ihr Webserver sich hinter einem Proxy befinden, so k&ouml;nnen Sie hier MXChange so konfigurieren, dass es Updates durch diesen hindurch sucht!', 15);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Proxy-Einstellungen hinzugef&uuml;gt.");
@@ -599,14 +599,14 @@ PRIMARY KEY (`id`)
 
 			case '0.5.3': // SQL queries for v0.5.3
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `session_save_path` VARCHAR(255) NOT NULL DEFAULT ''");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_session','Session-Einstellungen','&Auml;ndern Sie hier den Speicherpfad f&uuml;r Sessiondateien (Sitzungsdateien) ab, falls die Standart-Einstellung bei Ihrem Hoster zu Problem f&uuml;hren sollte.', 16)");
+				addAdminMenuSql('setup','config_session','Session-Einstellungen','&Auml;ndern Sie hier den Speicherpfad f&uuml;r Sessiondateien (Sitzungsdateien) ab, falls die Standart-Einstellung bei Ihrem Hoster zu Problem f&uuml;hren sollte.', 16);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Session-Speicherpfad konfigurierbar. Beispielsweise ist dies bei all-inkl.com n&ouml;tig.");
 				break;
 
 			case '0.5.4': // SQL queries for v0.5.4
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','reflist','Ref-&Uuml;bersicht',5,'Y','N')");
+				addMemberMenuSql('main','reflist','Ref-&Uuml;bersicht','N','Y',5);
 
 				// Depends on refback extension
 				addExtensionUpdateDependency('refback');
@@ -652,7 +652,7 @@ PRIMARY KEY (`id`)
 UNIQUE `name_function` (`filter_name` , `filter_function`),
 PRIMARY KEY (`filter_id`)
 ) TYPE={?_TABLE_TYPE?} COMMENT='Filter system'");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','list_filter','Filter-Management', 'Zeigt alle im System registrierten Filter an und l&auml;sst diese de- bzw. wieder aktivieren.', 17)");
+				addAdminMenuSql('setup','list_filter','Filter-Management', 'Zeigt alle im System registrierten Filter an und l&auml;sst diese de- bzw. wieder aktivieren.', 17);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Tabellen f&uuml;r Filter-System hinzugef&uuml;gt.");
diff --git a/inc/extensions/ext-surfbar.php b/inc/extensions/ext-surfbar.php
index e2cd56012c..e437d892b4 100644
--- a/inc/extensions/ext-surfbar.php
+++ b/inc/extensions/ext-surfbar.php
@@ -176,20 +176,20 @@ UNIQUE KEY `status_action` (`status`,`action`)
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `surfbar_low_notified` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'");
 
 		// Member menus
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('surfbar',NULL,'Surfbar','Y','Y',4)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('surfbar','surfbar_start','Surfbar starten','Y','Y',1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('surfbar','surfbar_book','URL buchen','Y','Y',2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('surfbar','surfbar_list','URL-Verwaltung','Y','Y',3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('surfbar','surfbar_stats','URL-Statistiken','Y','Y',4)");
+		addMemberMenuSql('surfbar',NULL,'Surfbar','N','Y',4);
+		addMemberMenuSql('surfbar','surfbar_start','Surfbar starten','N','Y',1);
+		addMemberMenuSql('surfbar','surfbar_book','URL buchen','N','Y',2);
+		addMemberMenuSql('surfbar','surfbar_list','URL-Verwaltung','N','Y',3);
+		addMemberMenuSql('surfbar','surfbar_stats','URL-Statistiken','N','Y',4);
 
 		// Admin menus
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('surfbar',NULL,'Surfbar','URLs in der Surfbar verwalten, Einstellungen &auml;ndern und vieles mehr.',7)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('surfbar','add_surfbar_url','URL hinzuf&uuml;gen','F&uuml;gen Sie URLs z.B. von Werbenetzwerken hinzu, oder Ihre eigenen Projekte. <strong>Vorsicht!</strong> Ihnen muss es auch gestattet sein, URLs aus dem Werbenetzwerk in die Surfbar einzuf&uuml;gen.',1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('surfbar','list_surfbar_urls','URLs verwalten','Verwalten Sie hier alle in der Surfbar befindlichen URLs mit nur wenigen Klicks.',2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('surfbar','unlock_surfbar_urls','Wartende URLs freigeben','Geben Sie hier nur direkt in der Surfbar gebuchte URLs frei.',3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('surfbar','config_surfbar','Einstellungen','Einstellungen an der Surfbar &auml;ndern, wie Festverg&uuml;tung, prozentuale Ref-Verg&uuml;tung und vieles mehr.',4)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('surfbar','surfbar_stats','Statistiken','Detailierte Statistiken zu einer ausgew&auml;hlten URL anzeigen.',5)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('surfbar','list_surfbar_actions','Mitgliederaktionen','Listet alle Mitgliederaktionen auf.',6)");
+		addAdminMenuSql('surfbar',NULL,'Surfbar','URLs in der Surfbar verwalten, Einstellungen &auml;ndern und vieles mehr.',7);
+		addAdminMenuSql('surfbar','add_surfbar_url','URL hinzuf&uuml;gen','F&uuml;gen Sie URLs z.B. von Werbenetzwerken hinzu, oder Ihre eigenen Projekte. <strong>Vorsicht!</strong> Ihnen muss es auch gestattet sein, URLs aus dem Werbenetzwerk in die Surfbar einzuf&uuml;gen.',1);
+		addAdminMenuSql('surfbar','list_surfbar_urls','URLs verwalten','Verwalten Sie hier alle in der Surfbar befindlichen URLs mit nur wenigen Klicks.',2);
+		addAdminMenuSql('surfbar','unlock_surfbar_urls','Wartende URLs freigeben','Geben Sie hier nur direkt in der Surfbar gebuchte URLs frei.',3);
+		addAdminMenuSql('surfbar','config_surfbar','Einstellungen','Einstellungen an der Surfbar &auml;ndern, wie Festverg&uuml;tung, prozentuale Ref-Verg&uuml;tung und vieles mehr.',4);
+		addAdminMenuSql('surfbar','surfbar_stats','Statistiken','Detailierte Statistiken zu einer ausgew&auml;hlten URL anzeigen.',5);
+		addAdminMenuSql('surfbar','list_surfbar_actions','Mitgliederaktionen','Listet alle Mitgliederaktionen auf.',6);
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-task.php b/inc/extensions/ext-task.php
index 19111376e5..d379e3f393 100644
--- a/inc/extensions/ext-task.php
+++ b/inc/extensions/ext-task.php
@@ -53,8 +53,8 @@ setExtensionAlwaysActive('Y');
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('task', NULL, 'Aufgaben-Management','1','Erweitertes Aufgaben-Management zur leichten verwaltung der vom System erzeugten Aufgaben.')");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`sort`,`descr`) VALUES ('task','list_task','Aufgaben auflisten','1','Alle Ihnen zugewiesenen Aufgaben auflisten (keine Updates).')");
+		addAdminMenuSql('task', NULL, 'Aufgaben-Management','Erweitertes Aufgaben-Management zur leichten verwaltung der vom System erzeugten Aufgaben.',1);
+		addAdminMenuSql('task','list_task','Aufgaben auflisten','Alle Ihnen zugewiesenen Aufgaben auflisten (keine Updates).',1);
 		addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_task_system` SET `status`='SOLVED' WHERE `status`='CLOSED'");
 		break;
 
diff --git a/inc/extensions/ext-theme.php b/inc/extensions/ext-theme.php
index fe5851cda0..e4b77c799b 100644
--- a/inc/extensions/ext-theme.php
+++ b/inc/extensions/ext-theme.php
@@ -129,22 +129,22 @@ INDEX (`theme_active`)
 ) TYPE={?_TABLE_TYPE?} COMMENT='Themes'");
 
 				// Admin menu
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('theme', NULL, 'Themes','Verwalten Sie hier alle Designs (Themes) Ihres Mailtausch-Scriptes.', 8)");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('theme','theme_import','Importieren','Es wird das Verzeichnis &quot;theme&quot; nach neuen Ordnern durchsucht und anschliessend in die Datenbank gesperrt aufgenommen.', 1)");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('theme','theme_edit','Modifizieren','&Auml;ndern Sie Titel, Freigaben usw. an den Themes. Sie k&ouml;nnen bis auf das Standart-Theme &quot;default&quot; auch Themes aus der Datenbank entfernen. Vorher sollten Sie es jedoch vom Server l&ouml;schen, damit es niht erneut importiert werden kann.', 2)");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('theme','theme_check','Pr&uuml;fen','Nach neuen Themes suchen bzw. nach Updates zu den Themes suchen.', 3)");
+				addAdminMenuSql('theme', NULL, 'Themes','Verwalten Sie hier alle Designs (Themes) Ihres Mailtausch-Scriptes.', 8);
+				addAdminMenuSql('theme','theme_import','Importieren','Es wird das Verzeichnis &quot;theme&quot; nach neuen Ordnern durchsucht und anschliessend in die Datenbank gesperrt aufgenommen.', 1);
+				addAdminMenuSql('theme','theme_edit','Modifizieren','&Auml;ndern Sie Titel, Freigaben usw. an den Themes. Sie k&ouml;nnen bis auf das Standart-Theme &quot;default&quot; auch Themes aus der Datenbank entfernen. Vorher sollten Sie es jedoch vom Server l&ouml;schen, damit es niht erneut importiert werden kann.', 2);
+				addAdminMenuSql('theme','theme_check','Pr&uuml;fen','Nach neuen Themes suchen bzw. nach Updates zu den Themes suchen.', 3);
 
 				// Guest menu
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('themes',NULL,'Design-Auswahl',4,'Y','N')");
+				addGuestMenuSql('themes',NULL,'Design-Auswahl','Y','N',4);
 
 				// Memember menu
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('themes',NULL,'Design-Auswahl',3,'Y','N')");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`sort`,`visible`,`locked`) VALUES ('main','themes','Designs', 6,'Y','N')");
+				addMemberMenuSql('themes',NULL,'Design-Auswahl','N','Y',3);
+				addMemberMenuSql('main','themes','Designs','N','Y',6);
 				addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `sort`='8' WHERE `action`='themes' LIMIT 1");
 				addExtensionSql("UPDATE `{?_MYSQL_PREFIX?}_member_menu` SET `action`='account', `sort`='1', `title`='Designs' WHERE `what`='themes' LIMIT 1");
 
 				// User data
-				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD curr_theme VARCHAR(255) NOT NULL DEFAULT 'default'");
+				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `curr_theme` VARCHAR(255) NOT NULL DEFAULT 'default'");
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Update von <u>sql_patches</u> &uuml;bertragen. (Kann Fehlermeldungen verursacht haben!)");
diff --git a/inc/extensions/ext-top10.php b/inc/extensions/ext-top10.php
index a824ccf214..2e068fe5ba 100644
--- a/inc/extensions/ext-top10.php
+++ b/inc/extensions/ext-top10.php
@@ -50,8 +50,8 @@ setExtensionVersionHistory(array('0.0', '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.0
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','top10','TOP-10','Y','Y', 7)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_top10','TOP-10 Listen','Stellen Sie hier ein, wie lang die TOP-Listen sein sollen, also wie viele Pl&auml;tze angezeigt werden sollen.', 8)");
+		addGuestMenuSql('main','top10','TOP-10','Y','Y', 7);
+		addAdminMenuSql('setup','config_top10','TOP-10 Listen','Stellen Sie hier ein, wie lang die TOP-Listen sein sollen, also wie viele Pl&auml;tze angezeigt werden sollen.', 8);
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD top10_max TINYINT(3) UNSIGNED NOT NULL DEFAULT 10");
 		break;
 
diff --git a/inc/extensions/ext-transfer.php b/inc/extensions/ext-transfer.php
index af286186f7..3c5ab03e49 100644
--- a/inc/extensions/ext-transfer.php
+++ b/inc/extensions/ext-transfer.php
@@ -82,13 +82,13 @@ PRIMARY KEY (id)
 ) Type={?_TABLE_TYPE?}");
 
 		// Admin menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('transfer', NULL, '{?POINTS?}-Transfer','Verwalten Sie hier die {?POINTS?}-Transaktionen zwischen Ihren Mitgliedern.', 7)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('transfer','list_transfer','Auflisten','Hier bekommen Sie alle ein- und ausgehende Transaktionen aufgelistet.', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('transfer','config_transfer','Einstellungen','Stellen Sie ein, wie viele Transaktionen aufgelistet werden sollen und wie alt diese werden d&uuml;rfen. Die evtl. installierte autopurge-Erweiterung kann dann automatisch die veralteten Transktionen l&ouml;schen.', 2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('transfer','del_transfer','Manuell l&ouml;schen','Hier k&ouml;nnen Sie - abgesehen von der automatischen L&ouml;schung - Transaktionen selber l&ouml;schen. Bitte beachten Sie, dass immer aus- und eingehende Transaktionen gleichzeitig gel&ouml;scht werden.', 3)");
+		addAdminMenuSql('transfer', NULL, '{?POINTS?}-Transfer','Verwalten Sie hier die {?POINTS?}-Transaktionen zwischen Ihren Mitgliedern.', 7);
+		addAdminMenuSql('transfer','list_transfer','Auflisten','Hier bekommen Sie alle ein- und ausgehende Transaktionen aufgelistet.', 1);
+		addAdminMenuSql('transfer','config_transfer','Einstellungen','Stellen Sie ein, wie viele Transaktionen aufgelistet werden sollen und wie alt diese werden d&uuml;rfen. Die evtl. installierte autopurge-Erweiterung kann dann automatisch die veralteten Transktionen l&ouml;schen.', 2);
+		addAdminMenuSql('transfer','del_transfer','Manuell l&ouml;schen','Hier k&ouml;nnen Sie - abgesehen von der automatischen L&ouml;schung - Transaktionen selber l&ouml;schen. Bitte beachten Sie, dass immer aus- und eingehende Transaktionen gleichzeitig gel&ouml;scht werden.', 3);
 
 		// Member menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','transfer','{?POINTS?}-Transfer','Y','Y', 5)");
+		addMemberMenuSql('main','transfer','{?POINTS?}-Transfer','N','Y', 5);
 
 		// Add config values
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD transfer_max BIGINT(20) UNSIGNED NOT NULL DEFAULT '50'");
diff --git a/inc/extensions/ext-usage.php b/inc/extensions/ext-usage.php
index b0b586e1db..71f293749d 100644
--- a/inc/extensions/ext-usage.php
+++ b/inc/extensions/ext-usage.php
@@ -50,7 +50,7 @@ setExtensionVersionHistory(array('0.0'));
 switch (getExtensionMode()) {
 	case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
 		// SQL commands to run
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('stats','usage','Aufrufstatistik','Erkennt automatisch Ihre Aufrufstatisiken und bindet diese in das Admin-Interface ein. (Derzeit nur Webalizer!)',9)");
+		addAdminMenuSql('stats','usage','Aufrufstatistik','Erkennt automatisch Ihre Aufrufstatisiken und bindet diese in das Admin-Interface ein. (Derzeit nur Webalizer!)',9);
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `usage_base` VARCHAR(255) NOT NULL DEFAULT 'usage'");
 		break;
 
diff --git a/inc/extensions/ext-user.php b/inc/extensions/ext-user.php
index b5b4580fca..643e223866 100644
--- a/inc/extensions/ext-user.php
+++ b/inc/extensions/ext-user.php
@@ -160,16 +160,16 @@ INDEX (`stats_type`)
 ) TYPE={?_TABLE_TYPE?} COMMENT='Member statistics data'");
 
 		// Admin menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user',NULL,'Mitglieder-Management','Mitglieder freischalten, sperren, Accounts editieren, Neuanmeldungen verwalten, {?POINTS?} gutschreiben und abziehen und und und...',3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','del_user','Mitglied l&ouml;schen','L&ouml;schen Sie hier Mitglied, die gegen die AGBs mehrmals verstossen haben. Bitte seien Sie nett zu Ihren Mitgliedern und l&ouml;schen Sie nicht gleich.',1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','chk_regs','Anmeldungen pr&uuml;fen','Pr&uuml;fen Sie hier neue Anmeldungen zu Ihrem System. Hier k&ouml;nnen Sie im Falle einer Fehler-Mail den Mitglied gleich wieder l&ouml;schen!',2)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','lock_user','Mitglied sperren / entsperren','Sperren Sie Mitglied, die zu viele unbest&auml;tigte Mails haben oder gegen Ihre AGBs verstossen haben &uuml;ber diesen Men&uuml;punkt.',3)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','list_user','Mitglied auflisten','Listen Sie alle Mitglied oder eingeschr&auml;nkt nach Suchkritieren Ihre Userdatenbank auf. Sie k&ouml;nen per Klick auf die Usernummer sich Details zum Mitglied ansehen.',4)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','add_points','{?POINTS?} gutschreiben','Buchen Sie einem Mitglied direkt {?POINTS?} auf. Sie k&ouml;nnen dazu auch einen Kommentar mitsenden.',5)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','edit_user','Account editieren','Daten eines Mitglieder-Accountes &auml;ndern.',6)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','list_refs','Referals anzeigen','Mit diesem Men&uuml;punkt k&ouml;nnen Sie die generierten Referals eines Mitgliedes auflisten.',7)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','list_links','Unbest&auml;tigte Mails','Mit diesem Men&uuml;punkt k&ouml;nnen Sie die vom Mitglied nicht best&auml;tigten Mails anzeigen.',8)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','list_cats','Kategorien anzeigen','Listet die ausgew&auml;hlten Kategorien eines Mitgliedes auf.',9)");
+		addAdminMenuSql('user',NULL,'Mitglieder-Management','Mitglieder freischalten, sperren, Accounts editieren, Neuanmeldungen verwalten, {?POINTS?} gutschreiben und abziehen und und und...',3);
+		addAdminMenuSql('user','del_user','Mitglied l&ouml;schen','L&ouml;schen Sie hier Mitglied, die gegen die AGBs mehrmals verstossen haben. Bitte seien Sie nett zu Ihren Mitgliedern und l&ouml;schen Sie nicht gleich.',1);
+		addAdminMenuSql('user','chk_regs','Anmeldungen pr&uuml;fen','Pr&uuml;fen Sie hier neue Anmeldungen zu Ihrem System. Hier k&ouml;nnen Sie im Falle einer Fehler-Mail den Mitglied gleich wieder l&ouml;schen!',2);
+		addAdminMenuSql('user','lock_user','Mitglied sperren / entsperren','Sperren Sie Mitglied, die zu viele unbest&auml;tigte Mails haben oder gegen Ihre AGBs verstossen haben &uuml;ber diesen Men&uuml;punkt.',3);
+		addAdminMenuSql('user','list_user','Mitglied auflisten','Listen Sie alle Mitglied oder eingeschr&auml;nkt nach Suchkritieren Ihre Userdatenbank auf. Sie k&ouml;nen per Klick auf die Usernummer sich Details zum Mitglied ansehen.',4);
+		addAdminMenuSql('user','add_points','{?POINTS?} gutschreiben','Buchen Sie einem Mitglied direkt {?POINTS?} auf. Sie k&ouml;nnen dazu auch einen Kommentar mitsenden.',5);
+		addAdminMenuSql('user','edit_user','Account editieren','Daten eines Mitglieder-Accountes &auml;ndern.',6);
+		addAdminMenuSql('user','list_refs','Referals anzeigen','Mit diesem Men&uuml;punkt k&ouml;nnen Sie die generierten Referals eines Mitgliedes auflisten.',7);
+		addAdminMenuSql('user','list_links','Unbest&auml;tigte Mails','Mit diesem Men&uuml;punkt k&ouml;nnen Sie die vom Mitglied nicht best&auml;tigten Mails anzeigen.',8);
+		addAdminMenuSql('user','list_cats','Kategorien anzeigen','Listet die ausgew&auml;hlten Kategorien eines Mitgliedes auf.',9);
 		break;
 
 	case 'remove': // Do stuff when removing extension
@@ -263,7 +263,7 @@ INDEX (`stats_type`)
 
 			case '0.2.1': // SQL queries for v0.2.1
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `user_alpha` TINYINT(3) UNSIGNED NOT NULL DEFAULT 10");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_user','Mitgliederliste','Anzahl Mitglieder pro Seite, Anzahl Buchstaben pro Zeile usw.', 8)");
+				addAdminMenuSql('setup','config_user','Mitgliederliste','Anzahl Mitglieder pro Seite, Anzahl Buchstaben pro Zeile usw.', 8);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("User-Liste ist konfigurierbar: Anzahl Mitglieder pro Seite und Anzahl Buchstaben pro Zeile; Template-Fehler beseitigt.");
@@ -307,7 +307,7 @@ INDEX (`stats_type`)
 				break;
 
 			case '0.2.9': // SQL queries for v0.2.9
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','user_contct','Mitglied kontaktieren','Kontaktieren Sie hier Ihre Mitglieder ganz direkt &uuml;ber ein Webformular. Sie brauchen somit kein EMail-Programm mehr starten!', 8)");
+				addAdminMenuSql('user','user_contct','Mitglied kontaktieren','Kontaktieren Sie hier Ihre Mitglieder ganz direkt &uuml;ber ein Webformular. Sie brauchen somit kein EMail-Programm mehr starten!', 8);
 
 				// Update notes (these will be set as task text!)
 				setExtensionUpdateNotes("Admin-Kontaktformular hinzugef&uuml;gt.");
@@ -348,7 +348,7 @@ INDEX (`stats_type`)
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `lock_reason` TINYTEXT");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD `lock_timestamp` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00'");
 				addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `user_delete_purge` BIGINT(20) UNSIGNED NOT NULL DEFAULT ".(getConfig('ONE_DAY') * 30)."");
-				addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('user','list_user_del','L&ouml;schungen auflisten','Listet die L&ouml;schungen von Usern auf.', 9)");
+				addAdminMenuSql('user','list_user_del','L&ouml;schungen auflisten','Listet die L&ouml;schungen von Usern auf.', 9);
 				addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_user_del`");
 				addExtensionSql("CREATE TABLE `{?_MYSQL_PREFIX?}_user_del` (
 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
diff --git a/inc/extensions/ext-wernis.php b/inc/extensions/ext-wernis.php
index 41ef42b345..9bf6f0cd61 100644
--- a/inc/extensions/ext-wernis.php
+++ b/inc/extensions/ext-wernis.php
@@ -75,15 +75,15 @@ PRIMARY KEY (id)
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_user_data` ADD wernis_userid VARCHAR(6) NOT NULL DEFAULT ''");
 
 		// Admin menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('wernis', NULL, 'Wernis-Management','Konfiguration zur WDS66-API einstellen, Auszahlungen auflisten usw..', 15)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('wernis','config_wernis','WDS66-API-Einstellungen','Konfiguration zur WDS66-API einstellen.', 1)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('wernis','list_wernis','Wernis-Anfragen auflisten','Listet alle Wernis-Auszahlungsanfragen Ihrer Mitglieder auf.', 2)");
+		addAdminMenuSql('wernis', NULL, 'Wernis-Management','Konfiguration zur WDS66-API einstellen, Auszahlungen auflisten usw..', 15);
+		addAdminMenuSql('wernis','config_wernis','WDS66-API-Einstellungen','Konfiguration zur WDS66-API einstellen.', 1);
+		addAdminMenuSql('wernis','list_wernis','Wernis-Anfragen auflisten','Listet alle Wernis-Auszahlungsanfragen Ihrer Mitglieder auf.', 2);
 
 		// Member menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_member_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','wernis','Wernis-Ein-/Auszahlungen','N','N', 11)");
+		addMemberMenuSql('main','wernis','Wernis-Ein-/Auszahlungen','N','Y', 11);
 
 		// Guest menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_guest_menu` (`action`,`what`,`title`,`visible`,`locked`,`sort`) VALUES ('main','wernis_portal','WDS66-News','N','N', 7)");
+		addGuestMenuSql('main','wernis_portal','WDS66-News','N','Y', 7);
 		break;
 
 	case 'remove': // Do stuff when removing extension
diff --git a/inc/extensions/ext-yoomedia.php b/inc/extensions/ext-yoomedia.php
index 9bb204ab96..5eeb7c7659 100644
--- a/inc/extensions/ext-yoomedia.php
+++ b/inc/extensions/ext-yoomedia.php
@@ -69,8 +69,8 @@ switch (getExtensionMode()) {
 		addExtensionSql("ALTER TABLE `{?_MYSQL_PREFIX?}_config` ADD `yoomedia_requests_remain` SMALLINT(6) UNSIGNED NOT NULL DEFAULT 200");
 
 		// Admin menu
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_yoomedia','Yoo!Media Interface 2.0','Einstellungen zum Yoo!Media Interface 2.0, wie User-ID, Interface-Passwort und vieles mehr.',17)");
-		addExtensionSql("INSERT INTO `{?_MYSQL_PREFIX?}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('email','list_yoomedia_tm','Yoo!Media Textmails','Listet Textmail-Buchungen &uuml;ber das Interface 2.0 von Yoo!Media nach Ihren eingestellten Kriterien auf. <strong>Vorsicht:</strong> Jede Aktualisierung dieser Liste kostet Ihnen eine Abfrage!',10)");
+		addAdminMenuSql('setup','config_yoomedia','Yoo!Media Interface 2.0','Einstellungen zum Yoo!Media Interface 2.0, wie User-ID, Interface-Passwort und vieles mehr.',17);
+		addAdminMenuSql('email','list_yoomedia_tm','Yoo!Media Textmails','Listet Textmail-Buchungen &uuml;ber das Interface 2.0 von Yoo!Media nach Ihren eingestellten Kriterien auf. <strong>Vorsicht:</strong> Jede Aktualisierung dieser Liste kostet Ihnen eine Abfrage!',10);
 
 		// Reload lock table
 		addExtensionSql("DROP TABLE IF EXISTS `{?_MYSQL_PREFIX?}_yoomedia_reload`");
diff --git a/inc/libs/register_functions.php b/inc/libs/register_functions.php
index 99af2efc60..cc4ecaeb8c 100644
--- a/inc/libs/register_functions.php
+++ b/inc/libs/register_functions.php
@@ -147,10 +147,13 @@ function FILTER_REGISTER_MUST_FILLOUT ($content) {
 	$result = SQL_QUERY("SELECT `field_name`, `field_required` FROM `{?_MYSQL_PREFIX?}_must_register` ORDER BY `id` ASC",
 		__FUNCTION__, __LINE__);
 
+	// Walk through all entries
 	while ($row = SQL_FETCHARRAY($result)) {
+		// Must the user fill out this element?
 		$value = '';
 		if ($row['field_required'] == 'Y') $value = "<span class=\\\"guest_failed\\\">&nbsp;(*)</span>";
-		// @TODO Rewrite these constants
+
+		// Add it
 		$content['must_fillout_'.strtolower($row['field_name']).''] = $value;
 	} // END - while
 
diff --git a/inc/loader/load_cache-admin.php b/inc/loader/load_cache-admin.php
index 9bef80aa7a..8a0b92b067 100644
--- a/inc/loader/load_cache-admin.php
+++ b/inc/loader/load_cache-admin.php
@@ -120,7 +120,7 @@ if (isExtensionInstalledAndNewer('admins', '0.3')) {
 		$GLOBALS['cache_instance']->init();
 
 		// Load all modules and their data (column 'id' is no longer required)
-		$result = SQL_QUERY('SELECT `admin_id`, `action_menu`, `what_menu`, `access_mode` FROM `{?_MYSQL_PREFIX?}_admins_acls` ORDER BY admin_id, action_menu, what_menu', __FILE__, __LINE__);
+		$result = SQL_QUERY('SELECT `admin_id`, `action_menu`, `what_menu`, `access_mode` FROM `{?_MYSQL_PREFIX?}_admins_acls` ORDER BY `admin_id` ASC, `action_menu` ASC, `what_menu` ASC', __FILE__, __LINE__);
 
 		// Add all rows
 		while ($content = SQL_FETCHARRAY($result)) {
diff --git a/inc/modules/admin/admin-inc.php b/inc/modules/admin/admin-inc.php
index 0d06e5fbfd..ffdab4e9b2 100644
--- a/inc/modules/admin/admin-inc.php
+++ b/inc/modules/admin/admin-inc.php
@@ -53,8 +53,12 @@ function addAdminAccount ($user, $md5, $email) {
 	// Is the entry there?
 	if (SQL_NUMROWS($result) == 0) {
 		// Ok, let's create the admin login
-		SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_admins` (login, password, email) VALUES ('%s', '%s', '%s')",
-		array($user, $md5, $email), __FUNCTION__, __LINE__);
+		SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_admins` (`login`, `password`, `email`) VALUES ('%s', '%s', '%s')",
+			array(
+				$user,
+				$md5,
+				$email
+			), __FUNCTION__, __LINE__);
 		$ret = 'done';
 	} // END - if
 
@@ -175,15 +179,15 @@ function ifAdminLoginDataIsValid ($admin, $password) {
 	// Count login failure if admins extension version is 0.7.0+
 	if (($ret == 'pass') && (getExtensionVersion('admins') >= '0.7.0')) {
 		// Update counter
-		SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_admins` SET login_failures=login_failures+1,last_failure=NOW() WHERE `id`=%s LIMIT 1",
-		array($adminId), __FUNCTION__, __LINE__);
+		SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_admins` SET login_failures`=`login_failures`+1,`last_failure`=NOW() WHERE `id`=%s LIMIT 1",
+			array($adminId), __FUNCTION__, __LINE__);
 
 		// Rebuild cache
 		rebuildCacheFile('admin', 'admin');
 	} // END - if
 
 	// Return the result
-	//* DEBUG: */ die("RETURN=".$ret);
+	//* DEBUG: */ die('RETURN=' . $ret);
 	return $ret;
 }
 
diff --git a/inc/modules/admin/what-config_admins.php b/inc/modules/admin/what-config_admins.php
index e79b70adc4..71e05e601e 100644
--- a/inc/modules/admin/what-config_admins.php
+++ b/inc/modules/admin/what-config_admins.php
@@ -212,7 +212,7 @@ VALUES ('%s','%s','%s','%s')",
 	loadTemplate('admin_settings_saved', false, $content);
 } else {
 	// List all ACLs
-	$result_acls = SQL_QUERY("SELECT id, admin_id, action_menu, what_menu, access_mode FROM `{?_MYSQL_PREFIX?}_admins_acls` ORDER BY admin_id, id", __FILE__, __LINE__);
+	$result_acls = SQL_QUERY('SELECT `id`, `admin_id`, `action_menu`, `what_menu`, `access_mode` FROM `{?_MYSQL_PREFIX?}_admins_acls` ORDER BY `admin_id` ASC, `id` ASC', __FILE__, __LINE__);
 
 	// Entries found?
 	if (SQL_NUMROWS($result_acls) > 0) {
diff --git a/inc/mysql-manager.php b/inc/mysql-manager.php
index a1e6936b58..519d73c98a 100644
--- a/inc/mysql-manager.php
+++ b/inc/mysql-manager.php
@@ -766,9 +766,9 @@ function isEmailTaken ($email) {
 }
 
 // Validate the given menu action
-function isMenuActionValid ($mode, $action, $what, $UPDATE=false) {
+function isMenuActionValid ($mode, $action, $what, $updateEntry=false) {
 	// Is the cache entry there and we shall not update?
-	if ((isset($GLOBALS['action_valid'][$mode][$action][$what])) && ($UPDATE === false)) {
+	if ((isset($GLOBALS['action_valid'][$mode][$action][$what])) && ($updateEntry === false)) {
 		// Count cache hit
 		incrementStatsEntry('cache_hits');
 
@@ -784,7 +784,7 @@ function isMenuActionValid ($mode, $action, $what, $UPDATE=false) {
 	if ((!isAdmin()) && ($mode != 'admin')) $add = " AND `locked`='N'";
 
 	//* DEBUG: */ outputHtml(__LINE__.':'.$mode.'/'.$action.'/'.$what."*<br />");
-	if (($mode != 'admin') && ($UPDATE === true)) {
+	if (($mode != 'admin') && ($updateEntry === true)) {
 		// Update guest or member menu
 		$sql = SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_%s_menu` SET counter=counter+1 WHERE `action`='%s' AND `what`='%s'".$add." LIMIT 1",
 			array($mode, $action, $what), __FUNCTION__, __LINE__, false);
@@ -800,7 +800,7 @@ function isMenuActionValid ($mode, $action, $what, $UPDATE=false) {
 
 	// Run SQL command
 	$result = SQL_QUERY($sql, __FUNCTION__, __LINE__);
-	if ($UPDATE === true) {
+	if ($updateEntry === true) {
 		// Check updated/affected rows
 		$ret = (SQL_AFFECTEDROWS() == 1);
 	} else {