diff --git a/Application/Controller/Admin/GA4AdminUserInterface_main.php b/Application/Controller/Admin/GA4AdminUserInterface_main.php
new file mode 100644
index 0000000..f857f2c
--- /dev/null
+++ b/Application/Controller/Admin/GA4AdminUserInterface_main.php
@@ -0,0 +1,97 @@
+addTplParam('d3ConfigObject', $oConf);
+ $this->addTplParam('d3ViewObject', $this);
+ $this->addTplParam('d3ManagerTypeArray', oxNew(ManagerTypes::class)->getManagerList());
+
+ return $return;
+ }
+
+ public function save()
+ {
+ parent::save();
+
+ $aParams = Registry::getRequest()->getRequestEscapedParameter('editval');
+
+ $aCheckBoxParams = [
+ '_blEnableGa4',
+ '_blEnableDebug',
+ '_blEnableConsentMode',
+ '_blEnableOwnCookieManager',
+ ];
+
+ foreach ($aCheckBoxParams as $checkBoxName){
+ if (isset($aParams['bool'][$checkBoxName])){
+ $aParams['bool'][$checkBoxName] = true;
+ }else{
+ $aParams['bool'][$checkBoxName] = false;
+ }
+ }
+
+ $this->d3SaveShopConfigVars($aParams);
+ }
+
+ /**
+ * @param array $aParams
+ * @return void
+ */
+ protected function d3SaveShopConfigVars(array $aParams)
+ {
+ $oConfig = Registry::getConfig();
+ foreach ($aParams as $sConfigType => $aConfigParams) {
+ foreach ($aConfigParams as $sParamName => $sParamValue){
+ if($this->d3GetModuleConfigParam($sParamName) !== $sParamValue){
+ $oConfig->saveShopConfVar(
+ $sConfigType,
+ Constants::OXID_MODULE_ID.$sParamName,
+ $sParamValue,
+ $oConfig->getShopId(),
+ Constants::OXID_MODULE_ID
+ );
+ }
+ }
+ }
+ }
+
+ /**
+ * @param array $postArray
+ * @param array $toExcludeArray
+ * @return array
+ */
+ public function clearOffPostParams(array $postArray, array $toExcludeArray) :array
+ {
+ foreach ($toExcludeArray as $excludeThis){
+ if (in_array($excludeThis, array_keys($postArray))){
+ unset($postArray[$excludeThis]);
+ }
+ }
+
+ return $postArray;
+ }
+
+ /**
+ * @param string $configParamName
+ * @return mixed
+ */
+ public function d3GetModuleConfigParam(string $configParamName)
+ {
+ return Registry::getConfig()->getShopConfVar(Constants::OXID_MODULE_ID.$configParamName, null, Constants::OXID_MODULE_ID);
+ }
+}
\ No newline at end of file
diff --git a/Application/views/admin/de/d3googleanalytics4_lang.php b/Application/views/admin/de/d3googleanalytics4_lang.php
new file mode 100644
index 0000000..fcdcaea
--- /dev/null
+++ b/Application/views/admin/de/d3googleanalytics4_lang.php
@@ -0,0 +1,77 @@
+ 'UTF-8',
+
+ 'd3mxgoogleanalytics4' => 'Google Analytics 4',
+ 'd3mxgoogleanalytics4set' => 'Modulverwaltung',
+
+ // Base Translations
+ 'D3BASECONFIG' => 'Grundeinstellungen',
+ 'D3CLOSE' => 'Schließen',
+ 'D3NONE' => '- keinen -',
+ 'D3CONTAINERID' => 'Container-ID',
+ 'D3ACTIVATEMOD' => 'Modul aktivieren',
+ 'D3CNTRLPARAM' => 'Steuerungsparameter',
+
+ // Use debug mode?
+ 'D3USEDEBUGMODE' => "Debug-Modus aktivieren",
+
+ // Use Consentmode?
+ 'D3USEGOOGLECONSENTMODE' => "Google Consent Mode 'Default Values' akivieren",
+
+ // Use CMP?
+ 'D3CMPTABTITLE' => 'Cookie Manager Einstellungen',
+ 'D3CMPUSEQ' => 'Cookie Manager nutzen?',
+ 'D3CMP' => 'Consent Management Platform ( CMP )',
+
+ // Additional Config
+ // Server-Side tagging
+ 'D3SERVERSIDETAGGING' => 'Server-Side tagging',
+ 'D3DETAILED_DESC' => 'Detailliertere Erklärung der Funktion',
+ 'D3SERVERSIDETAGGING_HINT' => 'Die Conatiner-ID wird weiterhin unter "Grundeinstellungen" eingetragen!
+ "Serverseitiges Tagging ist eine neue Möglichkeit, mit Google Tag Manager Ihre Anwendung geräteübergreifend zu verwalten.
+ Servercontainer verwenden dasselbe Tag-, Trigger- und Variablenmodell, das Sie gewohnt sind.
+ Außerdem bieten sie neue Tools, mit denen Sie Nutzeraktivitäten überall messen können."
+
+ - Quelle Developers-Google Server-Side tagging
+
+ Verändern Sie die Werte nur, wenn Sie Server-Side tagging verwenden wollen! Gegebenenfalls fragen Sie einen technischen Ansprechpartner.
+ ',
+ 'D3SERVERSIDETAGGING_TITLE_ACTIVE' => 'Ausführender code',
+ 'D3SERVERSIDETAGGING_ACTIVE' => 'Diese Domain wird im aktiven-code ausgefüht. Das heißt,
+ dass es sich hierbei um das HTML-Tag script
handelt.
+ Dieses kümmert sich darum, dass die im DataLayer
+ zusammengefassten Daten an den GTM weitergeleitet werden.
+
+
+
+Vorher:
+https://www.googletagmanager.com/gtm.js?id=
+
+Nachher:
+{Domain}?id=
+
+
',
+ 'D3SERVERSIDETAGGING_TITLE_PASSIVE' => 'nicht Ausführneder code',
+ 'D3SERVERSIDETAGGING_PASSIVE' => 'Diese Domain wird im passiven-code ausgefüht. Das heißt,
+ dass es sich hierbei um das HTML-Tag noscript
handelt.
+ Dieses wird ausgeführt, wenn aus einem bestimmten Grund
+ das Javascript nicht ausgeführt wird.
+
+Vorher:
+src="https://www.googletagmanager.com/ns.html?id={Container-ID}"
+
+Nachher:
+src="{Domain}?id={Container-ID}"
+
+
',
+);
\ No newline at end of file
diff --git a/Application/views/admin/tpl/d3googleanalytics4_main.tpl b/Application/views/admin/tpl/d3googleanalytics4_main.tpl
new file mode 100644
index 0000000..4d5e180
--- /dev/null
+++ b/Application/views/admin/tpl/d3googleanalytics4_main.tpl
@@ -0,0 +1,194 @@
+[{include file="headitem.tpl" title="GENERAL_ADMIN_TITLE"|oxmultilangassign}]
+
+
+
+
+
+[{if $readonly}]
+ [{assign var="readonly" value="readonly disabled"}]
+ [{else}]
+ [{assign var="readonly" value=""}]
+ [{/if}]
+
+