diff --git a/includes/webform.admin.inc b/includes/webform.admin.inc
index f075987..ecca365 100644
--- a/includes/webform.admin.inc
+++ b/includes/webform.admin.inc
@@ -267,6 +267,7 @@ function theme_webform_admin_content($variables) {
 
   $rows = array();
   foreach ($nodes as $node) {
+    $node = webform_get_original_node($node);
     $rows[] = array(
       l($node->title, 'node/' . $node->nid),
       l(t('Submissions'), 'node/' . $node->nid . '/webform-results'),
diff --git a/includes/webform.components.inc b/includes/webform.components.inc
index 18e74bd..70eead4 100644
--- a/includes/webform.components.inc
+++ b/includes/webform.components.inc
@@ -15,6 +15,7 @@
  * Overview page of all components for this webform.
  */
 function webform_components_page($node, $page_number = 1) {
+  $node = webform_get_original_node($node);
   $output = drupal_get_form('webform_components_form', $node);
 
   return array(
@@ -32,6 +33,7 @@ function webform_components_page($node, $page_number = 1) {
  */
 function theme_webform_components_page($variables) {
   $node = $variables['node'];
+  $node = webform_get_original_node($node);
   $form = $variables['form'];
 
   return drupal_render($form);
@@ -41,6 +43,7 @@ function theme_webform_components_page($variables) {
  * The table-based listing of all components for this webform.
  */
 function webform_components_form($form, $form_state, $node) {
+  $node = webform_get_original_node($node);
   $form = array(
     '#tree' => TRUE,
     '#node' => $node,
@@ -303,6 +306,7 @@ function webform_components_form_validate($form, &$form_state) {
 
 function webform_components_form_submit($form, &$form_state) {
   $node = node_load($form_state['values']['nid']);
+  $node = webform_get_original_node($node);
 
   // Update all mandatory and weight values.
   foreach ($node->webform['components'] as $cid => $component) {
@@ -598,6 +602,7 @@ function webform_component_edit_form($form, $form_state, $node, $component, $clo
  */
 function webform_component_edit_form_validate($form, &$form_state) {
   $node = node_load($form_state['values']['nid']);
+  $node = webform_get_original_node($node);
 
   if (!preg_match('/^[a-z0-9_]+$/i', $form_state['values']['form_key'])) {
     form_set_error('form_key', t('The field key %field_key is invalid. Please include only lowercase alphanumeric characters and underscores.', array('%field_key' => $form_state['values']['form_key'])));
@@ -613,6 +618,7 @@ function webform_component_edit_form_validate($form, &$form_state) {
 function webform_component_edit_form_submit($form, &$form_state) {
   // Ensure a webform record exists.
   $node = node_load($form_state['values']['nid']);
+  $node = webform_get_original_node($node);
   webform_ensure_record($node);
 
   // Remove empty extra values.
@@ -660,6 +666,7 @@ function webform_component_edit_form_submit($form, &$form_state) {
 }
 
 function webform_component_delete_form($form, $form_state, $node, $component) {
+  $node = webform_get_original_node($node);
   $cid = $component['cid'];
 
   $form = array();
@@ -687,6 +694,7 @@ function webform_component_delete_form($form, $form_state, $node, $component) {
 function webform_component_delete_form_submit($form, &$form_state) {
   // Delete the component.
   $node = $form_state['values']['node'];
+  $node = webform_get_original_node($node);
   $component = $form_state['values']['component'];
   webform_component_delete($node, $component);
   drupal_set_message(t('Component %name deleted.', array('%name' => $component['name'])));
@@ -724,6 +732,7 @@ function webform_component_insert(&$component) {
   $component['value'] = isset($component['value']) ? $component['value'] : NULL;
   $component['mandatory'] = isset($component['mandatory']) ? $component['mandatory'] : 0;
   $component['extra']['private'] = isset($component['extra']['private']) ? $component['extra']['private'] : 0;
+  $component['nid'] = webform_get_original_node_nid($component['nid']);
 
   if (!isset($component['cid'])) {
     if (lock_acquire('webform_component_insert_' . $component['nid'], 5)) {
@@ -779,6 +788,8 @@ function webform_component_update($component) {
   $component['value'] = isset($component['value']) ? $component['value'] : NULL;
   $component['mandatory'] = isset($component['mandatory']) ? $component['mandatory'] : 0;
   $component['extra']['private'] = isset($component['extra']['private']) ? $component['extra']['private'] : 0;
+  $component['nid'] = webform_get_original_node_nid($component['nid']);
+
   db_update('webform_component')
     ->fields(array(
       'pid' => $component['pid'],
@@ -802,6 +813,7 @@ function webform_component_delete($node, $component) {
   // Check if a delete function is available for this component. If so,
   // load all submissions and allow the component to delete each one.
 
+  $node = webform_get_original_node($node);
   webform_component_include($component['type']);
   $delete_function = '_webform_delete_' . $component['type'];
   if (function_exists($delete_function)) {
@@ -901,6 +913,7 @@ function webform_component_feature($type, $feature) {
  *   returned list of options.
  */
 function webform_component_list($node, $component_filter = NULL, $indent = TRUE, $optgroups = FALSE) {
+  $node = webform_get_original_node($node);
   $options = array();
   $page_names = array();
 
diff --git a/includes/webform.emails.inc b/includes/webform.emails.inc
index 4c44a01..6b4ba6d 100644
--- a/includes/webform.emails.inc
+++ b/includes/webform.emails.inc
@@ -12,6 +12,7 @@
  */
 function webform_emails_form($form, $form_state, $node) {
   module_load_include('inc', 'webform', 'includes/webform.components');
+  $node = webform_get_original_node($node);
 
   $form['#attached']['library'][] = array('webform', 'admin');
 
@@ -93,6 +94,7 @@ function webform_emails_form($form, $form_state, $node) {
 function theme_webform_emails_form($variables) {
   $form = $variables['form'];
   $node = $form['#node'];
+  $node = webform_get_original_node($node);
 
   $header = array(t('E-mail to'), t('Subject'), t('From'), array('data' => t('Operations'), 'colspan' => 2));
   $rows = array();
@@ -150,13 +152,14 @@ function theme_webform_email_add_form($variables) {
  * Submit handler for webform_emails_form().
  */
 function webform_emails_form_submit($form, &$form_state) {
+  $node = webform_get_original_node($form['#node']);
   if ($form_state['values']['email_option'] == 'custom') {
     $email = $form_state['values']['email_custom'];
   }
   else {
     $email = $form_state['values']['email_component'];
   }
-  $form_state['redirect'] = array('node/' . $form['#node']->nid . '/webform/emails/new', array('query' => array('option' => $form_state['values']['email_option'], 'email' => trim($email))));
+  $form_state['redirect'] = array('node/' . $node->nid . '/webform/emails/new', array('query' => array('option' => $form_state['values']['email_option'], 'email' => trim($email))));
 }
 
 /**
@@ -164,6 +167,7 @@ function webform_emails_form_submit($form, &$form_state) {
  */
 function webform_email_edit_form($form, $form_state, $node, $email = array()) {
   module_load_include('inc', 'webform', 'includes/webform.components');
+  $node = webform_get_original_node($node);
 
   $form['#attached']['library'][] = array('webform', 'admin');
   $form['#attached']['js'][] = array('data' => array('webform' => array('revertConfirm' => t('Are you sure you want to revert any changes to your template back to the default?'))), 'type' => 'setting');
@@ -398,6 +402,7 @@ function webform_email_edit_form_validate($form, &$form_state) {
 function webform_email_edit_form_submit($form, &$form_state) {
   // Ensure a webform record exists.
   $node = $form_state['values']['node'];
+  $node = webform_get_original_node($node);
   webform_ensure_record($node);
 
   // Merge the e-mail, name, address, and subject options into single values.
@@ -462,6 +467,7 @@ function webform_email_edit_form_submit($form, &$form_state) {
  */
 function webform_email_delete_form($form, $form_state, $node, $email) {
   $eid = $email['eid'];
+  $node = webform_get_original_node($node);
 
   $form['node'] = array(
     '#type' => 'value',
@@ -489,6 +495,7 @@ function webform_email_delete_form($form, $form_state, $node, $email) {
 function webform_email_delete_form_submit($form, &$form_state) {
   // Delete the e-mail settings.
   $node = $form_state['values']['node'];
+  $node = webform_get_original_node($node);
   $email = $form_state['values']['email'];
   webform_email_delete($node, $email);
   drupal_set_message(t('E-mail settings deleted.'));
@@ -510,6 +517,7 @@ function webform_email_delete_form_submit($form, &$form_state) {
  */
 function webform_email_load($eid, $nid) {
   $node = node_load($nid);
+  $node = webform_get_original_node($node);
   if ($eid == 'new') {
     $email = array(
       'email' => '',
@@ -571,6 +579,7 @@ function webform_email_update($email) {
  * Delete an e-mail setting.
  */
 function webform_email_delete($node, $email) {
+  $node = webform_get_original_node($node);
   db_delete('webform_emails')
     ->condition('nid', $node->nid)
     ->condition('eid', $email['eid'])
diff --git a/includes/webform.pages.inc b/includes/webform.pages.inc
index f75250b..15ade66 100644
--- a/includes/webform.pages.inc
+++ b/includes/webform.pages.inc
@@ -241,6 +241,7 @@ function webform_configure_form_validate($form, &$form_state) {
  */
 function webform_configure_form_submit($form, &$form_state) {
   $node = node_load($form_state['values']['nid']);
+  $node = webform_get_original_node($node);
 
   // Save the confirmation.
   $node->webform['confirmation'] = $form_state['values']['confirmation']['value'];
diff --git a/includes/webform.report.inc b/includes/webform.report.inc
index 157888f..4373a02 100644
--- a/includes/webform.report.inc
+++ b/includes/webform.report.inc
@@ -15,6 +15,7 @@ module_load_include('inc', 'webform', 'includes/webform.submissions');
  */
 function webform_results_submissions($node, $user_filter, $pager_count) {
   global $user;
+  $node = webform_get_original_node($node);
 
   if (isset($_GET['results']) && is_numeric($_GET['results'])) {
     $pager_count = $_GET['results'];
@@ -140,6 +141,7 @@ function theme_webform_results_per_page($variables) {
  */
 function theme_webform_results_submissions_header($variables) {
   $node = $variables['node'];
+  $node = webform_get_original_node($node);
 
   $columns = array(
     array('data' => t('#'), 'field' => 'sid', 'sort' => 'desc'),
@@ -215,6 +217,7 @@ function theme_webform_results_table($variables) {
   drupal_add_library('webform', 'admin');
 
   $node = $variables['node'];
+  $node = webform_get_original_node($node);
   $components = $variables['components'];
   $submissions = $variables['submissions'];
   $total_count = $variables['total_count'];
@@ -272,6 +275,7 @@ function theme_webform_results_table($variables) {
  */
 function webform_results_clear($nid) {
   $node = node_load($nid);
+  $node = webform_get_original_node($node);
   $submissions = webform_get_submissions($nid);
   foreach ($submissions as $submission) {
     webform_submission_delete($node, $submission);
@@ -286,6 +290,7 @@ function webform_results_clear($nid) {
  */
 function webform_results_clear_form($form, $form_state, $node) {
   drupal_set_title(t('Clear Form Submissions'));
+  $node = webform_get_original_node($node);
 
   $form = array();
   $form['nid'] = array('#type' => 'value', '#value' => $node->nid);
@@ -310,6 +315,7 @@ function webform_results_clear_form_submit($form, &$form_state) {
 function webform_results_download_form($form, &$form_state, $node) {
   module_load_include('inc', 'webform', 'includes/webform.export');
   module_load_include('inc', 'webform', 'includes/webform.components');
+  $node = webform_get_original_node($node);
 
   $form = array();
 
@@ -612,6 +618,7 @@ function webform_results_download($node, $format = 'delimited', $options = array
   global $user;
   module_load_include('inc', 'webform', 'includes/webform.export');
   module_load_include('inc', 'webform', 'includes/webform.components');
+  $node = webform_get_original_node($node);
 
   $submission_information = array(
     'serial' => t('Serial'),
@@ -780,6 +787,7 @@ function webform_results_download($node, $format = 'delimited', $options = array
  *   "Other" values within a select list.
  */
 function webform_results_analysis($node, $sids = array(), $analysis_component = NULL) {
+  $node = webform_get_original_node($node);
   if (!is_array($sids)) {
     $sids = array();
   }
@@ -809,6 +817,7 @@ function webform_results_analysis($node, $sids = array(), $analysis_component =
  */
 function theme_webform_results_analysis($variables) {
   $node = $variables['node'];
+  $node = webform_get_original_node($node);
   $data = $variables['data'];
   $sids = $variables['sids'];
   $analysis_component = $variables['component'];
diff --git a/includes/webform.submissions.inc b/includes/webform.submissions.inc
index 86b00c6..a2c5c09 100644
--- a/includes/webform.submissions.inc
+++ b/includes/webform.submissions.inc
@@ -20,6 +20,7 @@
  */
 function webform_submission_data($node, $submitted) {
   $data = array();
+  $node = webform_get_original_node($node);
 
   foreach ($submitted as $cid => $values) {
     // Don't save pagebreaks as submitted data.
@@ -49,6 +50,8 @@ function webform_submission_data($node, $submitted) {
  *   The existing submission SID.
  */
 function webform_submission_update($node, $submission) {
+  $node = webform_get_original_node($node);
+
   // Allow other modules to modify the submission before saving.
   foreach (module_implements('webform_submission_presave') as $module) {
     $function = $module . '_webform_submission_presave';
@@ -100,6 +103,8 @@ function webform_submission_update($node, $submission) {
  *   The new submission SID.
  */
 function webform_submission_insert($node, $submission) {
+  $node = webform_get_original_node($node);
+
   // The submission ID may already be set if being called as an update.
   if (!isset($submission->sid) && (!isset($submission->is_new) || $submission->is_new == FALSE)) {
     // Allow other modules to modify the submission before saving.
@@ -151,6 +156,7 @@ function webform_submission_insert($node, $submission) {
  *   ID of submission to be deleted (from webform_submitted_data).
  */
 function webform_submission_delete($node, $submission) {
+  $node = webform_get_original_node_nid($node);
   // Iterate through all components and let each do cleanup if necessary.
   foreach ($node->webform['components'] as $cid => $component) {
     if (isset($submission->data[$cid])) {
@@ -191,6 +197,7 @@ function webform_submission_delete($node, $submission) {
  */
 function webform_submission_send_mail($node, $submission, $emails = NULL) {
   global $user;
+  $node = webform_get_original_node($node);
 
   // Get the list of e-mails we'll be sending.
   $emails = isset($emails) ? $emails : $node->webform['emails'];
@@ -333,6 +340,7 @@ function webform_submission_send_mail($node, $submission, $emails = NULL) {
  *   The submission to be deleted (from webform_submitted_data).
  */
 function webform_submission_delete_form($form, $form_state, $node, $submission) {
+  $node = webform_get_original_node($node);
   webform_set_breadcrumb($node, $submission);
 
   // Set the correct page title.
@@ -367,11 +375,13 @@ function webform_submission_delete_form($form, $form_state, $node, $submission)
 
 function webform_submission_delete_form_submit($form, &$form_state) {
   $node = node_load($form_state['values']['details']['nid']);
+  $original = $node;
+  $node = webform_get_original_node($node);
   $submission = webform_get_submission($form_state['values']['details']['nid'], $form_state['values']['details']['sid']);
   webform_submission_delete($node, $submission);
   drupal_set_message(t('Submission deleted.'));
 
-  $form_state['redirect'] = 'node/' . $node->nid . '/webform-results';
+  $form_state['redirect'] = 'node/' . $original->nid . '/webform-results';
 }
 
 /**
@@ -386,6 +396,7 @@ function webform_submission_title($node, $submission) {
  */
 function webform_submission_page($node, $submission, $format) {
   global $user;
+  $node = webform_get_original_node($node);
 
   // Render the admin UI breadcrumb.
   webform_set_breadcrumb($node, $submission);
@@ -445,6 +456,7 @@ function webform_submission_page($node, $submission, $format) {
  * Form to resend specific e-mails associated with a submission.
  */
 function webform_submission_resend($form, $form_state, $node, $submission) {
+  $node = webform_get_original_node($node);
   // Render the admin UI breadcrumb.
   webform_set_breadcrumb($node, $submission);
 
@@ -500,6 +512,7 @@ function webform_submission_resend_validate($form, &$form_state) {
  */
 function webform_submission_resend_submit($form, &$form_state) {
   $node = $form['#node'];
+  $node = webform_get_original_node($node);
   $submission = $form['#submission'];
 
   $emails = array();
@@ -557,6 +570,7 @@ function theme_webform_submission_resend($variables) {
  * Print a Webform submission for display on a page or in an e-mail.
  */
 function webform_submission_render($node, $submission, $email, $format) {
+  $node = webform_get_original_node($node);
   $component_tree = array();
   $renderable = array();
   $page_count = 1;
@@ -620,6 +634,11 @@ function webform_get_submissions($filters = array(), $header = NULL, $pager_coun
     unset($filters['uid']);
   }
 
+  // Use the original node nid instead of a possible translated one
+  if (isset($filters['nid'])) {
+    $filters['nid'] = webform_get_original_node_nid($filters['nid']);
+  }
+
   // No need to find SIDs if it was given to us.
   if (isset($filters['sid'])) {
     $sids = array($filters['sid']);
@@ -723,6 +742,7 @@ function webform_get_submissions($filters = array(), $header = NULL, $pager_coun
  */
 function webform_get_submission_count($nid, $uid = NULL, $reset = FALSE) {
   static $counts;
+  $nid = webform_get_original_node_nid($nid);
 
   if (!isset($counts[$nid][$uid]) || $reset) {
     $query = db_select('webform_submissions')
@@ -747,6 +767,7 @@ function webform_get_submission_count($nid, $uid = NULL, $reset = FALSE) {
  */
 function webform_get_submission($nid, $sid, $reset = FALSE) {
   static $submissions = array();
+  $nid = webform_get_original_node_nid($nid);
 
   if ($reset) {
     $submissions = array();
@@ -788,6 +809,7 @@ function _webform_submission_spam_check($to, $subject, $from, $headers = array()
  */
 function _webform_submission_limit_check($node) {
   global $user;
+  $node = webform_get_original_node($node);
 
   // Check if submission limiting is enabled.
   if ($node->webform['submit_limit'] == '-1') {
@@ -857,14 +879,15 @@ function template_preprocess_webform_submission(&$vars) {
  */
 function template_preprocess_webform_submission_navigation(&$vars) {
   $start_path = ($vars['mode'] == 'print') ? 'print/' : 'node/';
+  $node = webform_get_original_node($vars['node']);
 
   $previous_query = db_select('webform_submissions')
-    ->condition('nid', $vars['node']->nid)
+    ->condition('nid', $node->nid)
     ->condition('sid', $vars['submission']->sid, '<');
   $previous_query->addExpression('MAX(sid)');
 
   $next_query = db_select('webform_submissions')
-    ->condition('nid', $vars['node']->nid)
+    ->condition('nid', $node->nid)
     ->condition('sid', $vars['submission']->sid, '>');
   $next_query->addExpression('MIN(sid)');
 
@@ -878,6 +901,7 @@ function template_preprocess_webform_submission_navigation(&$vars) {
  * Preprocess function for webform-submission-navigation.tpl.php.
  */
 function template_preprocess_webform_submission_information(&$vars) {
+  $node = webform_get_original_node($vars['node']);
   $vars['account'] = user_load($vars['submission']->uid);
-  $vars['actions'] = theme('links', module_invoke_all('webform_submission_actions', $vars['node'], $vars['submission']));
+  $vars['actions'] = theme('links', module_invoke_all('webform_submission_actions', $node, $vars['submission']));
 }
diff --git a/webform.module b/webform.module
index 7c90051..5b4f685 100644
--- a/webform.module
+++ b/webform.module
@@ -356,6 +356,7 @@ function webform_menu_load($nid) {
     return FALSE;
   }
   $node = node_load($nid);
+  $node = webform_get_original_node($node);
   if (!isset($node->type) || !in_array($node->type, webform_variable_get('webform_node_types'))) {
     return FALSE;
   }
@@ -367,6 +368,7 @@ function webform_menu_load($nid) {
  */
 function webform_menu_submission_load($sid, $nid) {
   module_load_include('inc', 'webform', 'includes/webform.submissions');
+  $nid = $node = webform_get_original_node_nid($nid);
   $submission = webform_get_submission($nid, $sid);
   return empty($submission) ? FALSE : $submission;
 }
@@ -376,6 +378,7 @@ function webform_menu_submission_load($sid, $nid) {
  */
 function webform_menu_component_load($cid, $nid, $type) {
   module_load_include('inc', 'webform', 'includes/webform.components');
+  $nid = $node = webform_get_original_node_nid($nid);
   if ($cid == 'new') {
     $components = webform_components();
     $component = in_array($type, array_keys($components)) ? array('type' => $type, 'nid' => $nid, 'name' => $_GET['name'], 'mandatory' => $_GET['mandatory'], 'pid' => $_GET['pid'], 'weight' => $_GET['weight']) : FALSE;
@@ -397,6 +400,7 @@ function webform_menu_component_load($cid, $nid, $type) {
 function webform_menu_email_load($eid, $nid) {
   module_load_include('inc', 'webform', 'includes/webform.emails');
   $node = node_load($nid);
+  $node = webform_get_original_node($node);
   $email = webform_email_load($eid, $nid);
   if ($eid == 'new') {
     if (isset($_GET['option']) && isset($_GET['email'])) {
@@ -415,6 +419,7 @@ function webform_menu_email_load($eid, $nid) {
 
 function webform_submission_access($node, $submission, $op = 'view', $account = NULL) {
   global $user;
+  $node = webform_get_original_node($node);
   $account = isset($account) ? $account : $user;
 
   $access_all = user_access('access all webform results', $account);
@@ -448,6 +453,7 @@ function webform_submission_access($node, $submission, $op = 'view', $account =
  */
 function webform_results_access($node, $account = NULL) {
   global $user;
+  $node = webform_get_original_node($node);
   $account = isset($account) ? $account : $user;
 
   $module_access = count(array_filter(module_invoke_all('webform_results_access', $node, $account))) > 0;
@@ -457,6 +463,7 @@ function webform_results_access($node, $account = NULL) {
 
 function webform_results_clear_access($node, $account = NULL) {
   global $user;
+  $node = webform_get_original_node($node);
   $account = isset($account) ? $account : $user;
 
   $module_access = count(array_filter(module_invoke_all('webform_results_clear_access', $node, $account))) > 0;
@@ -859,6 +866,7 @@ function webform_webform_select_options_info() {
 function webform_webform_submission_actions($node, $submission) {
   $actions = array();
   $destination = drupal_get_destination();
+  $node = webform_get_original_node($node);
 
   if (module_exists('print_pdf') && user_access('access PDF version')) {
     $actions['printpdf'] = array(
@@ -1014,6 +1022,7 @@ function webform_node_insert($node) {
  * Implements hook_node_update().
  */
 function webform_node_update($node) {
+  $node = webform_get_original_node($node);
   if (!in_array($node->type, webform_variable_get('webform_node_types'))) {
     return;
   }
@@ -1100,6 +1109,7 @@ function webform_node_update($node) {
  * Implements hook_delete().
  */
 function webform_node_delete($node) {
+  $node = webform_get_original_node($node);
   if (!in_array($node->type, webform_variable_get('webform_node_types'))) {
     return;
   }
@@ -1150,6 +1160,7 @@ function webform_node_defaults() {
  * Implements hook_node_prepare().
  */
 function webform_node_prepare($node) {
+  $node = webform_get_original_node($node);
   $webform_types = webform_variable_get('webform_node_types');
   if (in_array($node->type, $webform_types) && !isset($node->webform)) {
     $node->webform = webform_node_defaults();
@@ -1157,17 +1168,6 @@ function webform_node_prepare($node) {
 }
 
 /**
- * Implements hook_node_prepare_translation().
- */
-function webform_node_prepare_translation(&$node) {
-  // Copy all Webform settings over to translated versions of this node.
-  if (isset($node->translation_source)) {
-    $source_node = node_load($node->translation_source->nid);
-    $node->webform = $source_node->webform;
-  }
-}
-
-/**
  * Implements hook_node_load().
  */
 function webform_node_load($nodes, $types) {
@@ -1177,25 +1177,40 @@ function webform_node_load($nodes, $types) {
     return;
   }
 
+  // Get the source nodes nids
+  $tnid_to_nid = array();
+  $nid_to_tnid = array();
+  foreach ($nodes as $nid => $node) {
+    if ($node->tnid != 0) {
+      $tnid_to_nid[$node->tnid] = $nid;
+      $nid_to_tnid[$nid] = $node->tnid;
+    }
+    else {
+      $tnid_to_nid[$nid] = $nid;
+      $nid_to_tnid[$nid] = $nid;
+    }
+  }
+
   module_load_include('inc', 'webform', 'includes/webform.components');
 
   // Select all webforms that match these node IDs.
   $result = db_select('webform')
     ->fields('webform')
-    ->condition('nid', array_keys($nodes), 'IN')
+    ->condition('nid', array_keys($tnid_to_nid), 'IN')
     ->execute()
     ->fetchAllAssoc('nid', PDO::FETCH_ASSOC);
 
   foreach ($result as $nid => $webform) {
     // Load the basic information for each node.
-    $nodes[$nid]->webform = $webform;
-    $nodes[$nid]->webform['record_exists'] = TRUE;
+    $nodes[$tnid_to_nid[$nid]]->webform = $webform;
+    $nodes[$tnid_to_nid[$nid]]->webform['record_exists'] = TRUE;
   }
 
   // Load the components, emails, and defaults for all webform-enabled nodes.
   // TODO: Increase efficiency here by pulling in all information all at once
   // instead of individual queries.
   foreach ($nodes as $nid => $node) {
+    $tnid = $nid_to_tnid[$nid];
     if (!in_array($node->type, $webform_types)) {
       continue;
     }
@@ -1208,12 +1223,12 @@ function webform_node_load($nodes, $types) {
 
     $nodes[$nid]->webform['roles'] = db_select('webform_roles')
       ->fields('webform_roles', array('rid'))
-      ->condition('nid', $nid)
+      ->condition('nid', $tnid)
       ->execute()
       ->fetchCol();
     $nodes[$nid]->webform['emails'] = db_select('webform_emails')
       ->fields('webform_emails')
-      ->condition('nid', $nid)
+      ->condition('nid', $tnid)
       ->execute()
       ->fetchAllAssoc('eid', PDO::FETCH_ASSOC);
 
@@ -1228,7 +1243,7 @@ function webform_node_load($nodes, $types) {
     // Load components for each node.
     $nodes[$nid]->webform['components'] = db_select('webform_component')
       ->fields('webform_component')
-      ->condition('nid', $nid)
+      ->condition('nid', $tnid)
       ->orderBy('weight')
       ->orderBy('name')
       ->execute()
@@ -1236,7 +1251,7 @@ function webform_node_load($nodes, $types) {
 
     // Do a little cleanup on each component.
     foreach ($nodes[$nid]->webform['components'] as $cid => $component) {
-      $nodes[$nid]->webform['components'][$cid]['nid'] = $nid;
+      $nodes[$nid]->webform['components'][$cid]['nid'] = $tnid;
       $nodes[$nid]->webform['components'][$cid]['extra'] = unserialize($component['extra']);
       webform_component_defaults($nodes[$nid]->webform['components'][$cid]);
     }
@@ -2449,6 +2464,9 @@ function template_preprocess_webform_mail_message(&$vars) {
  * Replacement for theme_form_element().
  */
 function theme_webform_element($variables) {
+  // translate labels
+  $variables['element']['#title'] = t($variables['element']['#title']);
+  
   // Ensure defaults.
   $variables['element'] += array(
     '#title_display' => 'before',
@@ -3493,6 +3511,30 @@ function webform_strtodate($format, $string, $timezone_name = NULL) {
 }
 
 /**
+ * Get the original node from a possibly translated one
+ */
+function webform_get_original_node($node) {
+  if(!isset($node)){
+    return $node;
+  }
+  if(isset($node->tnid)) {
+    if ($node->tnid != 0 && $node->nid != $node->tnid) {
+      return node_load($node->tnid);
+    }
+  }
+  return $node;
+}
+
+/**
+ * Load the original nid from a possible translated node nid
+ */
+function webform_get_original_node_nid($nid) {
+  $node = node_load($nid);
+  $node = webform_get_original_node($node);
+  return $node->nid;
+}
+
+/**
  * Get a timestamp in GMT time, ensuring timezone accuracy.
  */
 function webform_strtotime($date) {
