diff --git a/assets/default/css/theme.css b/assets/default/css/theme.css
index d68ab78e966a898a2af31a1a92f9650e5ca1ae28..ef15177855fea724c3c77e11babdb4f28bfddfe0 100644
--- a/assets/default/css/theme.css
+++ b/assets/default/css/theme.css
@@ -309,7 +309,7 @@ body {
   width: 400px;
   text-align: right;
   margin: 0;
-  padding: 10px 0;
+  padding: 10px 0 0;
   float: right;
 }
 #nav {
diff --git a/client.inc.php b/client.inc.php
index 3b8b41014955dbab1a2b69a3fa578b51f7d643dd..bb8e8badbe7fdce1ef104276bff36448aa4126a6 100644
--- a/client.inc.php
+++ b/client.inc.php
@@ -47,6 +47,10 @@ $nav=null;
 //Make sure the user is valid..before doing anything else.
 $thisclient = UserAuthenticationBackend::getUser();
 
+if (isset($_GET['lang']) && $_GET['lang']) {
+    $_SESSION['client:lang'] = $_GET['lang'];
+}
+
 // Bootstrap gettext translations as early as possible, but after attempting
 // to sign on the agent
 TextDomain::configureForUser($thisclient);
diff --git a/css/flags.css b/css/flags.css
new file mode 100644
index 0000000000000000000000000000000000000000..8e67320909401edbc33f4d4495ebd4d463cb9506
--- /dev/null
+++ b/css/flags.css
@@ -0,0 +1,258 @@
+.flag {
+	width: 16px;
+	height: 11px;
+    display: inline-block;
+	background:url(../images/flags.png) no-repeat
+}
+
+.flag.flag-ad {background-position: -16px 0}
+.flag.flag-ae {background-position: -32px 0}
+.flag.flag-af {background-position: -48px 0}
+.flag.flag-ag {background-position: -64px 0}
+.flag.flag-ai {background-position: -80px 0}
+.flag.flag-al {background-position: -96px 0}
+.flag.flag-am {background-position: -112px 0}
+.flag.flag-an {background-position: -128px 0}
+.flag.flag-ao {background-position: -144px 0}
+.flag.flag-ar {background-position: -160px 0}
+.flag.flag-as {background-position: -176px 0}
+.flag.flag-at {background-position: -192px 0}
+.flag.flag-au {background-position: -208px 0}
+.flag.flag-aw {background-position: -224px 0}
+.flag.flag-az {background-position: -240px 0}
+.flag.flag-ba {background-position: 0 -11px}
+.flag.flag-bb {background-position: -16px -11px}
+.flag.flag-bd {background-position: -32px -11px}
+.flag.flag-be {background-position: -48px -11px}
+.flag.flag-bf {background-position: -64px -11px}
+.flag.flag-bg {background-position: -80px -11px}
+.flag.flag-bh {background-position: -96px -11px}
+.flag.flag-bi {background-position: -112px -11px}
+.flag.flag-bj {background-position: -128px -11px}
+.flag.flag-bm {background-position: -144px -11px}
+.flag.flag-bn {background-position: -160px -11px}
+.flag.flag-bo {background-position: -176px -11px}
+.flag.flag-br {background-position: -192px -11px}
+.flag.flag-bs {background-position: -208px -11px}
+.flag.flag-bt {background-position: -224px -11px}
+.flag.flag-bv {background-position: -240px -11px}
+.flag.flag-bw {background-position: 0 -22px}
+.flag.flag-by {background-position: -16px -22px}
+.flag.flag-bz {background-position: -32px -22px}
+.flag.flag-ca {background-position: -48px -22px}
+.flag.flag-catalonia {background-position: -64px -22px}
+.flag.flag-cd {background-position: -80px -22px}
+.flag.flag-cf {background-position: -96px -22px}
+.flag.flag-cg {background-position: -112px -22px}
+.flag.flag-ch {background-position: -128px -22px}
+.flag.flag-ci {background-position: -144px -22px}
+.flag.flag-ck {background-position: -160px -22px}
+.flag.flag-cl {background-position: -176px -22px}
+.flag.flag-cm {background-position: -192px -22px}
+.flag.flag-cn {background-position: -208px -22px}
+.flag.flag-co {background-position: -224px -22px}
+.flag.flag-cr {background-position: -240px -22px}
+.flag.flag-cu {background-position: 0 -33px}
+.flag.flag-cv {background-position: -16px -33px}
+.flag.flag-cw {background-position: -32px -33px}
+.flag.flag-cy {background-position: -48px -33px}
+.flag.flag-cz {background-position: -64px -33px}
+.flag.flag-de {background-position: -80px -33px}
+.flag.flag-dj {background-position: -96px -33px}
+.flag.flag-dk {background-position: -112px -33px}
+.flag.flag-dm {background-position: -128px -33px}
+.flag.flag-do {background-position: -144px -33px}
+.flag.flag-dz {background-position: -160px -33px}
+.flag.flag-ec {background-position: -176px -33px}
+.flag.flag-ee {background-position: -192px -33px}
+.flag.flag-eg {background-position: -208px -33px}
+.flag.flag-eh {background-position: -224px -33px}
+.flag.flag-england {background-position: -240px -33px}
+.flag.flag-er {background-position: 0 -44px}
+.flag.flag-es {background-position: -16px -44px}
+.flag.flag-et {background-position: -32px -44px}
+.flag.flag-eu {background-position: -48px -44px}
+.flag.flag-fi {background-position: -64px -44px}
+.flag.flag-fj {background-position: -80px -44px}
+.flag.flag-fk {background-position: -96px -44px}
+.flag.flag-fm {background-position: -112px -44px}
+.flag.flag-fo {background-position: -128px -44px}
+.flag.flag-fr {background-position: -144px -44px}
+.flag.flag-ga {background-position: -160px -44px}
+.flag.flag-gb {background-position: -176px -44px}
+.flag.flag-gd {background-position: -192px -44px}
+.flag.flag-ge {background-position: -208px -44px}
+.flag.flag-gf {background-position: -224px -44px}
+.flag.flag-gg {background-position: -240px -44px}
+.flag.flag-gh {background-position: 0 -55px}
+.flag.flag-gi {background-position: -16px -55px}
+.flag.flag-gl {background-position: -32px -55px}
+.flag.flag-gm {background-position: -48px -55px}
+.flag.flag-gn {background-position: -64px -55px}
+.flag.flag-gp {background-position: -80px -55px}
+.flag.flag-gq {background-position: -96px -55px}
+.flag.flag-gr {background-position: -112px -55px}
+.flag.flag-gs {background-position: -128px -55px}
+.flag.flag-gt {background-position: -144px -55px}
+.flag.flag-gu {background-position: -160px -55px}
+.flag.flag-gw {background-position: -176px -55px}
+.flag.flag-gy {background-position: -192px -55px}
+.flag.flag-hk {background-position: -208px -55px}
+.flag.flag-hm {background-position: -224px -55px}
+.flag.flag-hn {background-position: -240px -55px}
+.flag.flag-hr {background-position: 0 -66px}
+.flag.flag-ht {background-position: -16px -66px}
+.flag.flag-hu {background-position: -32px -66px}
+.flag.flag-ic {background-position: -48px -66px}
+.flag.flag-id {background-position: -64px -66px}
+.flag.flag-ie {background-position: -80px -66px}
+.flag.flag-il {background-position: -96px -66px}
+.flag.flag-im {background-position: -112px -66px}
+.flag.flag-in {background-position: -128px -66px}
+.flag.flag-io {background-position: -144px -66px}
+.flag.flag-iq {background-position: -160px -66px}
+.flag.flag-ir {background-position: -176px -66px}
+.flag.flag-is {background-position: -192px -66px}
+.flag.flag-it {background-position: -208px -66px}
+.flag.flag-je {background-position: -224px -66px}
+.flag.flag-jm {background-position: -240px -66px}
+.flag.flag-jo {background-position: 0 -77px}
+.flag.flag-jp {background-position: -16px -77px}
+.flag.flag-ke {background-position: -32px -77px}
+.flag.flag-kg {background-position: -48px -77px}
+.flag.flag-kh {background-position: -64px -77px}
+.flag.flag-ki {background-position: -80px -77px}
+.flag.flag-km {background-position: -96px -77px}
+.flag.flag-kn {background-position: -112px -77px}
+.flag.flag-kp {background-position: -128px -77px}
+.flag.flag-kr {background-position: -144px -77px}
+.flag.flag-kurdistan {background-position: -160px -77px}
+.flag.flag-kw {background-position: -176px -77px}
+.flag.flag-ky {background-position: -192px -77px}
+.flag.flag-kz {background-position: -208px -77px}
+.flag.flag-la {background-position: -224px -77px}
+.flag.flag-lb {background-position: -240px -77px}
+.flag.flag-lc {background-position: 0 -88px}
+.flag.flag-li {background-position: -16px -88px}
+.flag.flag-lk {background-position: -32px -88px}
+.flag.flag-lr {background-position: -48px -88px}
+.flag.flag-ls {background-position: -64px -88px}
+.flag.flag-lt {background-position: -80px -88px}
+.flag.flag-lu {background-position: -96px -88px}
+.flag.flag-lv {background-position: -112px -88px}
+.flag.flag-ly {background-position: -128px -88px}
+.flag.flag-ma {background-position: -144px -88px}
+.flag.flag-mc {background-position: -160px -88px}
+.flag.flag-md {background-position: -176px -88px}
+.flag.flag-me {background-position: -192px -88px}
+.flag.flag-mg {background-position: -208px -88px}
+.flag.flag-mh {background-position: -224px -88px}
+.flag.flag-mk {background-position: -240px -88px}
+.flag.flag-ml {background-position: 0 -99px}
+.flag.flag-mm {background-position: -16px -99px}
+.flag.flag-mn {background-position: -32px -99px}
+.flag.flag-mo {background-position: -48px -99px}
+.flag.flag-mp {background-position: -64px -99px}
+.flag.flag-mq {background-position: -80px -99px}
+.flag.flag-mr {background-position: -96px -99px}
+.flag.flag-ms {background-position: -112px -99px}
+.flag.flag-mt {background-position: -128px -99px}
+.flag.flag-mu {background-position: -144px -99px}
+.flag.flag-mv {background-position: -160px -99px}
+.flag.flag-mw {background-position: -176px -99px}
+.flag.flag-mx {background-position: -192px -99px}
+.flag.flag-my {background-position: -208px -99px}
+.flag.flag-mz {background-position: -224px -99px}
+.flag.flag-na {background-position: -240px -99px}
+.flag.flag-nc {background-position: 0 -110px}
+.flag.flag-ne {background-position: -16px -110px}
+.flag.flag-nf {background-position: -32px -110px}
+.flag.flag-ng {background-position: -48px -110px}
+.flag.flag-ni {background-position: -64px -110px}
+.flag.flag-nl {background-position: -80px -110px}
+.flag.flag-no {background-position: -96px -110px}
+.flag.flag-np {background-position: -112px -110px}
+.flag.flag-nr {background-position: -128px -110px}
+.flag.flag-nu {background-position: -144px -110px}
+.flag.flag-nz {background-position: -160px -110px}
+.flag.flag-om {background-position: -176px -110px}
+.flag.flag-pa {background-position: -192px -110px}
+.flag.flag-pe {background-position: -208px -110px}
+.flag.flag-pf {background-position: -224px -110px}
+.flag.flag-pg {background-position: -240px -110px}
+.flag.flag-ph {background-position: 0 -121px}
+.flag.flag-pk {background-position: -16px -121px}
+.flag.flag-pl {background-position: -32px -121px}
+.flag.flag-pm {background-position: -48px -121px}
+.flag.flag-pn {background-position: -64px -121px}
+.flag.flag-pr {background-position: -80px -121px}
+.flag.flag-ps {background-position: -96px -121px}
+.flag.flag-pt {background-position: -112px -121px}
+.flag.flag-pw {background-position: -128px -121px}
+.flag.flag-py {background-position: -144px -121px}
+.flag.flag-qa {background-position: -160px -121px}
+.flag.flag-re {background-position: -176px -121px}
+.flag.flag-ro {background-position: -192px -121px}
+.flag.flag-rs {background-position: -208px -121px}
+.flag.flag-ru {background-position: -224px -121px}
+.flag.flag-rw {background-position: -240px -121px}
+.flag.flag-sa {background-position: 0 -132px}
+.flag.flag-sb {background-position: -16px -132px}
+.flag.flag-sc {background-position: -32px -132px}
+.flag.flag-scotland {background-position: -48px -132px}
+.flag.flag-sd {background-position: -64px -132px}
+.flag.flag-se {background-position: -80px -132px}
+.flag.flag-sg {background-position: -96px -132px}
+.flag.flag-sh {background-position: -112px -132px}
+.flag.flag-si {background-position: -128px -132px}
+.flag.flag-sk {background-position: -144px -132px}
+.flag.flag-sl {background-position: -160px -132px}
+.flag.flag-sm {background-position: -176px -132px}
+.flag.flag-sn {background-position: -192px -132px}
+.flag.flag-so {background-position: -208px -132px}
+.flag.flag-somaliland {background-position: -224px -132px}
+.flag.flag-sr {background-position: -240px -132px}
+.flag.flag-ss {background-position: 0 -143px}
+.flag.flag-st {background-position: -16px -143px}
+.flag.flag-sv {background-position: -32px -143px}
+.flag.flag-sx {background-position: -48px -143px}
+.flag.flag-sy {background-position: -64px -143px}
+.flag.flag-sz {background-position: -80px -143px}
+.flag.flag-tc {background-position: -96px -143px}
+.flag.flag-td {background-position: -112px -143px}
+.flag.flag-tf {background-position: -128px -143px}
+.flag.flag-tg {background-position: -144px -143px}
+.flag.flag-th {background-position: -160px -143px}
+.flag.flag-tj {background-position: -176px -143px}
+.flag.flag-tk {background-position: -192px -143px}
+.flag.flag-tl {background-position: -208px -143px}
+.flag.flag-tm {background-position: -224px -143px}
+.flag.flag-tn {background-position: -240px -143px}
+.flag.flag-to {background-position: 0 -154px}
+.flag.flag-tr {background-position: -16px -154px}
+.flag.flag-tt {background-position: -32px -154px}
+.flag.flag-tv {background-position: -48px -154px}
+.flag.flag-tw {background-position: -64px -154px}
+.flag.flag-tz {background-position: -80px -154px}
+.flag.flag-ua {background-position: -96px -154px}
+.flag.flag-ug {background-position: -112px -154px}
+.flag.flag-um {background-position: -128px -154px}
+.flag.flag-us {background-position: -144px -154px}
+.flag.flag-uy {background-position: -160px -154px}
+.flag.flag-uz {background-position: -176px -154px}
+.flag.flag-va {background-position: -192px -154px}
+.flag.flag-vc {background-position: -208px -154px}
+.flag.flag-ve {background-position: -224px -154px}
+.flag.flag-vg {background-position: -240px -154px}
+.flag.flag-vi {background-position: 0 -165px}
+.flag.flag-vn {background-position: -16px -165px}
+.flag.flag-vu {background-position: -32px -165px}
+.flag.flag-wales {background-position: -48px -165px}
+.flag.flag-wf {background-position: -64px -165px}
+.flag.flag-ws {background-position: -80px -165px}
+.flag.flag-ye {background-position: -96px -165px}
+.flag.flag-yt {background-position: -112px -165px}
+.flag.flag-za {background-position: -128px -165px}
+.flag.flag-zanzibar {background-position: -144px -165px}
+.flag.flag-zm {background-position: -160px -165px}
+.flag.flag-zw {background-position: -176px -165px}
diff --git a/images/flags.png b/images/flags.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b3a380895c1f5d236075fc64f506a5352fb2350
Binary files /dev/null and b/images/flags.png differ
diff --git a/include/ajax.config.php b/include/ajax.config.php
index 98053cf330e953936e6f1ce142e7e047203e6aee..6b67e1a1a0d1239f5b4d343d957aa02bc7e336da 100644
--- a/include/ajax.config.php
+++ b/include/ajax.config.php
@@ -36,13 +36,17 @@ class ConfigAjaxAPI extends AjaxController {
     function client() {
         global $cfg;
 
+        $lang = Internationalization::getCurrentLanguage();
+        list($sl, $locale) = explode('_', $lang);
+
         $config=array(
             'allow_attachments' => (bool) $cfg->allowOnlineAttachments(),
             'file_types'      => $cfg->getAllowedFileTypes(),
             'max_file_size'   => (int) $cfg->getMaxFileSize(),
             'max_file_uploads'=> (int) $cfg->getClientMaxFileUploads(),
             'html_thread'     => (bool) $cfg->isHtmlThreadEnabled(),
-            'lang'            => $cfg->getSystemLanguage(),
+            'lang'            => $lang,
+            'short_lang'      => $sl,
         );
 
         $config = $this->json_encode($config);
diff --git a/include/class.i18n.php b/include/class.i18n.php
index f412e5f9e2724448ad44360c5b5bbf1037fcc8ae..05914f780e46eef877a8395db34bf63e40331fae 100644
--- a/include/class.i18n.php
+++ b/include/class.i18n.php
@@ -166,12 +166,7 @@ class Internationalization {
             $info = &$langs[$lang];
             if (!isset($info['desc'])) {
                 if (extension_loaded('intl')) {
-                    if ($thisstaff)
-                        $lang = $thisstaff->getLanguage();
-                    elseif ($thisclient)
-                        $lang = $thisclient->getLanguage();
-                    else
-                        $lang = self::getDefaultLanguage();
+                    $lang = self::getCurrentLanguage();
                     list($simple_lang,) = explode('_', $lang);
                     $info['desc'] = sprintf("%s%s",
                         // Display the localized name of the language
@@ -316,12 +311,14 @@ class Internationalization {
     }
 
     static function getCurrentLanguage($user=false) {
-        global $thisstaff, $thisclient, $cfg;
+        global $thisstaff, $thisclient;
 
         $user = $user ?: $thisstaff ?: $thisclient;
         if ($user && method_exists($user, 'getLanguage'))
             return $user->getLanguage();
-        return Internationalization::getDefaultLanguage();
+        if (isset($_SESSION['client:lang']))
+            return $_SESSION['client:lang'];
+        return self::getDefaultLanguage();
     }
 
     static function bootstrap() {
diff --git a/include/class.translation.php b/include/class.translation.php
index b6fe18c2bf2293b520e417699d87e7ee9d94f746..9f1990f5ecb7d728c07933d4901a190cb30650ed 100644
--- a/include/class.translation.php
+++ b/include/class.translation.php
@@ -710,9 +710,14 @@ class TextDomain {
     static function configureForUser($user=false) {
         $lang = Internationalization::getCurrentLanguage($user);
 
+        $info = Internationalization::getLanguageInfo(strtolower($lang));
+        if (!$info)
+            // Not a supported language
+            return;
+
         // Define locale for C-libraries
-        putenv('LC_ALL=' . $lang);
-        self::setLocale(LC_ALL, $lang);
+        putenv('LC_ALL=' . $info['code']);
+        self::setLocale(LC_ALL, $info['code']);
     }
 
     static function setDefaultDomain($domain) {
diff --git a/include/client/footer.inc.php b/include/client/footer.inc.php
index 25efea2f60cdd93738919d6aabeedb8ca0824ce9..9ff4ad15265c68a7a7938535786cae3ea9f910db 100644
--- a/include/client/footer.inc.php
+++ b/include/client/footer.inc.php
@@ -10,11 +10,7 @@
     <p><?php echo __('Please wait... it will take a second!');?></p>
 </div>
 <?php
-if ($thisclient && $thisclient instanceof EndUser)
-    $lang = $thisclient->getLanguage();
-elseif ($cfg && $cfg->getSystemLanguage())
-    $lang = $cfg->getSystemLanguage();
-if ($lang && $lang != 'en_US') { ?>
+if (($lang = Internationalization::getCurrentLanguage()) && $lang != 'en_US') { ?>
     <script type="text/javascript" src="ajax.php/i18n/<?php
         echo $lang; ?>/js"></script>
 <?php } ?>
diff --git a/include/client/header.inc.php b/include/client/header.inc.php
index efeffb5131d96afa59b921083c61fdfa408f2e42..0c439c484e5803c5242bbd7f0d12590da41c5f46 100644
--- a/include/client/header.inc.php
+++ b/include/client/header.inc.php
@@ -31,6 +31,7 @@ if (($lang = Internationalization::getCurrentLanguage())
     <link rel="stylesheet" href="<?php echo ROOT_PATH; ?>css/thread.css" media="screen">
     <link rel="stylesheet" href="<?php echo ROOT_PATH; ?>css/redactor.css" media="screen">
     <link type="text/css" rel="stylesheet" href="<?php echo ROOT_PATH; ?>css/font-awesome.min.css">
+    <link type="text/css" rel="stylesheet" href="<?php echo ROOT_PATH; ?>css/flags.css">
     <script type="text/javascript" src="<?php echo ROOT_PATH; ?>js/jquery-1.8.3.min.js"></script>
     <script type="text/javascript" src="<?php echo ROOT_PATH; ?>js/jquery-ui-1.10.3.custom.min.js"></script>
     <script src="<?php echo ROOT_PATH; ?>js/jquery.multifile.js"></script>
@@ -75,7 +76,22 @@ if (($lang = Internationalization::getCurrentLanguage())
                 }
             } ?>
             </p>
+            <p>
+<?php
+if (($all_langs = Internationalization::availableLanguages())
+    && (count($all_langs) > 1)
+) {
+    foreach ($all_langs as $code=>$info) {
+        list($lang, $locale) = explode('_', $code);
+?>
+        <a class="flag flag-<?php echo strtolower($locale ?: $info['flag'] ?: $lang); ?>"
+            href="?<?php echo urlencode($_GET['QUERY_STRING']); ?>&amp;lang=<?php echo $code;
+            ?>" title="<?php echo Internationalization::getLanguageDescription($code); ?>">&nbsp;</a>
+<?php }
+} ?>
+            </p>
         </div>
+        <div class="clear"></div>
         <?php
         if($nav){ ?>
         <ul id="nav">
diff --git a/include/i18n/langs.php b/include/i18n/langs.php
index 1caed5cb7d984dde6bab1197ab4e094b73045485..205ba63fdcfb82b0bf9d77bb791c3dd5c7543b74 100644
--- a/include/i18n/langs.php
+++ b/include/i18n/langs.php
@@ -107,6 +107,7 @@ return array(
     ),
     "ca" => array(
         "name" => "Catalan; Valencian",
+        "flag" => "catalonia",
         "nativeName" => "Català"
     ),
     "ch" => array(
@@ -147,10 +148,12 @@ return array(
     ),
     "cs" => array(
         "name" => "Czech",
+        "flag" => "CZ",
         "nativeName" => "česky, čeština"
     ),
     "da" => array(
         "name" => "Danish",
+        "flag" => "DK",
         "nativeName" => "dansk"
     ),
     "dv" => array(
@@ -203,6 +206,7 @@ return array(
     ),
     "ka" => array(
         "name" => "Georgian",
+        "flag" => "GE",
         "nativeName" => "ქართული"
     ),
     "de" => array(
@@ -211,6 +215,7 @@ return array(
     ),
     "el" => array(
         "name" => "Greek, Modern",
+        "flag" => "GR",
         "nativeName" => "Ελληνικά"
     ),
     "gn" => array(
@@ -232,6 +237,7 @@ return array(
     "he" => array(
         "direction" => "rtl",
         "name" => "Hebrew (modern)",
+        "flag" => "IL",
         "nativeName" => "עברית"
     ),
     "hz" => array(
@@ -240,6 +246,7 @@ return array(
     ),
     "hi" => array(
         "name" => "Hindi",
+        "flag" => "IN",
         "nativeName" => "हिन्दी, हिंदी"
     ),
     "ho" => array(
@@ -292,6 +299,7 @@ return array(
     ),
     "ja" => array(
         "name" => "Japanese",
+        "flag" => "JP",
         "nativeName" => "日本語 (にほんご/にっぽんご)"
     ),
     "jv" => array(
@@ -504,6 +512,7 @@ return array(
     ),
     "fa" => array(
         "direction" => "rtl",
+        "flag" => "IR",
         "name" => "Persian",
         "nativeName" => "فارسی"
     ),
@@ -565,6 +574,7 @@ return array(
     ),
     "sr" => array(
         "name" => "Serbian",
+        "flag" => "RS",
         "nativeName" => "српски језик"
     ),
     "gd" => array(
@@ -585,6 +595,7 @@ return array(
     ),
     "sl" => array(
         "name" => "Slovene",
+        "flag" => "SI",
         "nativeName" => "slovenščina"
     ),
     "so" => array(
@@ -605,6 +616,7 @@ return array(
     ),
     "sw" => array(
         "name" => "Swahili",
+        "flag" => "KE",
         "nativeName" => "Kiswahili"
     ),
     "ss" => array(
@@ -681,6 +693,7 @@ return array(
     ),
     "uk" => array(
         "name" => "Ukrainian",
+        "flag" => "UA",
         "nativeName" => "українська"
     ),
     "ur" => array(
diff --git a/js/redactor-osticket.js b/js/redactor-osticket.js
index c0f69668744b3219c1a7830fcd4f225c3ee72573..da5baf97920b28bb39b1b1ad29614aeaa869f2cf 100644
--- a/js/redactor-osticket.js
+++ b/js/redactor-osticket.js
@@ -260,8 +260,8 @@ $(function() {
         }
         getConfig().then(function(c) {
             if (c.lang && c.lang.toLowerCase() != 'en_us' &&
-                    $.Redactor.opts.langs[c.lang.toLowerCase()])
-                options['lang'] = c.lang.toLowerCase();
+                    $.Redactor.opts.langs[c.short_lang])
+                options['lang'] = c.short_lang;
             el.redactor(options);
         });
     },
diff --git a/setup/cli/modules/i18n.php b/setup/cli/modules/i18n.php
index 1d9295d480e360bb6913e450a375007cc62afd14..9f2d90b3eb3e7a06663059d9e8d9a08ba070fc0f 100644
--- a/setup/cli/modules/i18n.php
+++ b/setup/cli/modules/i18n.php
@@ -145,9 +145,11 @@ class i18n_Compiler extends Module {
 
         // TODO: Add i18n extras (like fonts)
         // Redactor language pack
+        //
+        list($short_lang, $locale) = explode('_', $lang);
         list($code, $js) = $this->_http_get(
             'http://imperavi.com/webdownload/redactor/lang/?lang='
-            .strtolower($lang));
+            .strtolower($short_lang));
         if ($code == 200 && ($js != 'File not found'))
             $phar->addFromString('js/redactor.js', $js);
         else