diff --git phplist.module phplist.module
index c8ceee3..f393908 100644
--- phplist.module
+++ phplist.module
@@ -256,6 +256,27 @@ function phplist_admin_settings() {
       '#default_value' => variable_get('phplist_pllastname', 'Last Name')
     );
   }
+  if (module_exists('locale')) {
+    $languages = locale_language_list();
+    if (count($languages) > 1) {
+      $count = 1;
+      $form['mapping']['phplist_lang'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Language mapping'),
+        '#default_value' => variable_get('phplist_lang', ''),
+        '#description' => t('Language attribute in phplist, leave blank to disable language mapping.'),
+      );
+      foreach ($languages as $key => $value) {
+        $form['mapping']["phplist_lang_$key"] = array(
+          '#type' => 'textfield',
+           '#title' => $value,
+           '#default_value' => variable_get("phplist_lang_$key", (string)$count),
+           '#description' => t('phplist attribute table value for !lang', array('!lang' => $value)),
+        );
+        $count++;
+      }
+    }
+  }
   $form['user'] = array(
     '#title' => 'My Account - My Newsletters options',
     '#type' => 'fieldset'
@@ -829,7 +850,19 @@ function _phplist_sync_user($phplistid, $user) {
   	// Map last name to phpList attribute
     $attrmap[] = array($profilelastname, variable_get('phplist_pllastname', ''));
   }
-  
+
+  if ((($langattr = variable_get('phplist_lang', '')) != '') && module_exists('locale')) {
+    // Map languages to array
+    $languages = locale_language_list();
+    $count = 0;
+    $langmap = array();
+    $langmap[$langattr] = array();
+    foreach ($languages as $key => $value) {
+      $langmap[$langattr][$key] = variable_get("phplist_lang_$key", (string)$count);
+      $count++;
+    }
+  }
+
   if ($phplistid != '') {
     db_set_active('phplist');
     $result = db_query("UPDATE {$prefix['user']}user SET email='%s', modified=NOW(), htmlemail=%d, confirmed=1 WHERE id=%d", ($user->mail == '' ? $user->init : $user->mail), ($user->phplist_html == 0 || $user->phplist_html == '' ? 1 : 0), $phplistid);
@@ -871,7 +904,22 @@ function _phplist_sync_user($phplistid, $user) {
       }
     }
   }
-  
+
+  // Synchronise language
+  if (module_exists('locale')) {
+    if (isset($user->language)) {
+      $lang = $user->language;
+    }
+    else {
+      global $language;
+      $lang = $language->language;
+    }
+    foreach ($langmap as $langattr => $langs) {
+      if (PHPLIST_DEBUG) drupal_set_message('Synchronised language '. $lang .' : '. $langs[$lang]);
+      _phplist_update_attribute($langattr, 'radio', $langs[$lang], $phplistid);
+    }
+  }
+
   db_set_active('default');
 }
 
@@ -1323,7 +1371,21 @@ function phplist_subscribe_form_submit($form, &$form_state) {
     'htmlemail' => ($form_state['values']['phplist_html'] ? 0 : 1), // looks backwards, is not. see usage in _phplist_sync_user()
     'subscribe' => 'Subscribe',
   );
+
+  // Set the currently active language as the user's language
+  if (module_exists('locale') && variable_get('phplist_lang', '') != '') {
+    global $language;
+    $lang = $language->language;
+    $attr_name = variable_get('phplist_lang', '');
+    $prefix = _phplist_dbconn();
+    db_set_active('phplist');
+    $attrid = db_result(db_query("SELECT id FROM {$prefix['user']}attribute WHERE name='$attr_name'"));
+    if ($attrid) {
+      $data["attribute$attrid"] = variable_get("phplist_lang_$lang", '1');
+    }
+  }
   
+
   $lists = _phplist_get_lists($user);
 
   foreach ($lists as $l) {
