diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php
index ca2b3f2c8fa2a649f5b9cfa2e55a786737339f38..de0f05ce235988e0ece7cd8a518017f6fcfa0f5d 100644
--- a/include/class.dynamic_forms.php
+++ b/include/class.dynamic_forms.php
@@ -236,7 +236,7 @@ class DynamicForm extends VerySimpleModel {
         // New translations (?)
         if ($vars['trans'] && is_array($vars['trans'])) {
             foreach ($vars['trans'] as $lang=>$parts) {
-                if (!Internationalization::isLanguageInstalled($lang))
+                if (!Internationalization::isLanguageEnabled($lang))
                     continue;
                 foreach ($parts as $T => $content) {
                     $content = trim($content);
diff --git a/include/class.i18n.php b/include/class.i18n.php
index c6e4bfc61b50973d19a3a2ad38d140178c2ef49f..94f6b679c41587f2c3c43272f6aa5b80137d2586 100644
--- a/include/class.i18n.php
+++ b/include/class.i18n.php
@@ -255,18 +255,28 @@ class Internationalization {
         return isset($langs[strtolower($code)]);
     }
 
+    static function isLanguageEnabled($code) {
+        $langs = self::getConfiguredSystemLanguages();
+        return isset($langs[$code]);
+    }
+
     static function getConfiguredSystemLanguages() {
         global $cfg;
+        static $langs;
 
         if (!$cfg)
             return self::availableLanguages();
 
-        $pri = $cfg->getPrimaryLanguage();
-        $langs = array($pri => self::getLanguageInfo($pri));
+        if (!isset($langs)) {
+            $pri = $cfg->getPrimaryLanguage();
+            if ($info = self::getLanguageInfo($pri))
+                $langs = array($pri => $info);
 
-        // Honor sorting preference of ::availableLanguages()
-        foreach ($cfg->getSecondaryLanguages() as $l) {
-            $langs[$l] = self::getLanguageInfo($l);
+            // Honor sorting preference of ::availableLanguages()
+            foreach ($cfg->getSecondaryLanguages() as $l) {
+                if ($info = self::getLanguageInfo($l))
+                    $langs[$l] = $info;
+            }
         }
         return $langs;
     }
@@ -369,7 +379,7 @@ class Internationalization {
 
         $user = $user ?: $thisstaff ?: $thisclient;
         if ($user && method_exists($user, 'getLanguage'))
-            if ($lang = $user->getLanguage())
+            if (($lang = $user->getLanguage()) && self::isLanguageEnabled($lang))
                 return $lang;
 
         // Support the flag buttons for guests
diff --git a/include/staff/dynamic-form.inc.php b/include/staff/dynamic-form.inc.php
index e194d4d8561b4d0a35fb365a85e8c7ca356ca6d3..5415ba03cbd755b4c696f32eeb339ef50064cb58 100644
--- a/include/staff/dynamic-form.inc.php
+++ b/include/staff/dynamic-form.inc.php
@@ -15,7 +15,7 @@ if($form && $_REQUEST['a']!='add') {
     $translations = CustomDataTranslation::allTranslations($trans, 'phrase');
     $_keys = array_flip($trans);
     foreach ($translations as $t) {
-        if (!Internationalization::isLanguageInstalled($t->lang))
+        if (!Internationalization::isLanguageEnabled($t->lang))
             continue;
         // Create keys of [trans][de_DE][title] for instance
         $info['trans'][$t->lang][$_keys[$t->object_hash]]