diff --git a/gtranslate.module b/gtranslate.module
index 1cee3f5..8194365 100644
--- a/gtranslate.module
+++ b/gtranslate.module
@@ -48,9 +48,14 @@ function gtranslate_block_view($delta = '') {
         $i++;
     }
 
+    // Sort by the user defined weightings
+    uksort($languages, "gtranslate_compare_weights");
+
     // Move the default language to the first position and sort
-    asort($languages);
-    $languages = array_merge(array(variable_get('gtranslate_main_lang', 'en') => $languages[variable_get('gtranslate_main_lang', 'en')]), $languages);
+    if(variable_get('gtranslate_main_lang_first', false)) {
+        asort($languages);
+        $languages = array_merge(array(variable_get('gtranslate_main_lang', 'en') => $languages[variable_get('gtranslate_main_lang', 'en')]), $languages);
+    }
 
     // use redirect method if using Pro or Enterprise
     if(variable_get('gtranslate_pro', 0) or variable_get('gtranslate_enterprise', 0))
@@ -478,6 +483,14 @@ function gtranslate_admin() {
         '#required' => TRUE
     );
 
+    $form['general']['gtranslate_main_lang_first'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Show Main Language First'),
+      '#default_value' => variable_get('gtranslate_main_lang_first', false),
+      '#description' => t("Select whether you wish for the default language to display at the front of the list"),
+      '#required' => FALSE
+    );
+
     $form['general']['gtranslate_pro'] = array(
         '#type' => 'checkbox',
         '#title' => t('Sub-directory URL structure'),
@@ -525,7 +538,9 @@ function gtranslate_admin() {
 
     $languages_flags = array('en', 'fr', 'de', 'it', 'pt', 'ru', 'es');
     $languages_noflags = array('my' => 'Myanmar (Burmese)','ny' => 'Chichewa','kk' => 'Kazakh','mg' => 'Malagasy','ml' => 'Malayalam','si' => 'Sinhala','st' => 'Sesotho','su' => 'Sudanese','tg' => 'Tajik','uz' => 'Uzbek','am' => 'Amharic','co' => 'Corsican','haw' => 'Hawaiian','ku' => 'Kurdish (Kurmanji)','ky' => 'Kyrgyz','lb' => 'Luxembourgish','ps' => 'Pashto','sm' => 'Samoan','gd' => 'Scottish Gaelic','sn' => 'Shona','sd' => 'Sindhi','fy' => 'Frisian','xh' => 'Xhosa');
-    foreach($languages as $lang => $language)
+    $language_count = count($languages);
+    $language_keys = array_keys($languages);
+    foreach($languages as $lang => $language) {
         $form['language']["gtranslate_$lang"] = array(
             '#type' => 'radios',
             '#title' => t("Show $language"),
@@ -534,10 +549,25 @@ function gtranslate_admin() {
             '#description' => t("Show $language in the language list"),
             '#required' => TRUE
         );
+        $form['language']["gtranslate_weight_$lang"] = array(
+            '#type' => 'weight',
+            '#title' => t("$language weight"),
+            '#default_value' => variable_get("gtranslate_weight_$lang", array_search($lang, $language_keys)),
+            '#delta' => $language_count,
+            '#description' => t("Select the weighting for $language in the language list"),
+            '#required' => TRUE
+        );
+    }
 
     return system_settings_form($form);
 } // function gtranslate_admin
 
+function gtranslate_compare_weights($lang1, $lang2){
+    $weight1 = variable_get("gtranslate_weight_$lang1", 9999);
+    $weight2 = variable_get("gtranslate_weight_$lang2", 9999);
+    return $weight1 < $weight2 ? -1 : ($weight1 == $weight2 ? 0 : 1);
+}
+
 function gtranslate_menu() {
     $items = array();
     $items['admin/settings/gtranslate'] = array(
