diff --git a/src/Plugin/tmgmt/Translator/SmartlingTranslator.php b/src/Plugin/tmgmt/Translator/SmartlingTranslator.php
index 1c691df..fad73d7 100755
--- a/src/Plugin/tmgmt/Translator/SmartlingTranslator.php
+++ b/src/Plugin/tmgmt/Translator/SmartlingTranslator.php
@@ -127,7 +127,7 @@ class SmartlingTranslator extends TranslatorPluginBase implements ContainerFacto
   public function requestTranslation(JobInterface $job) {
     $name = $this->getFileName($job);
 
-    $export_format = $job->getSetting('export_format');
+    $export_format = pathinfo($name, PATHINFO_EXTENSION) == 'xlf' ? 'xlf' : 'html';
     $export = $this->formatPluginsManager->createInstance($export_format);
 
     $path = $job->getSetting('scheme') . '://tmgmt_sources/' . $name;
@@ -161,7 +161,7 @@ class SmartlingTranslator extends TranslatorPluginBase implements ContainerFacto
       $this->getSmartlingApi($job->getTranslator())->uploadFile(
           \Drupal::service('file_system')->realpath($file->getFileUri()),
           $file->getFilename(),
-          $job->getSetting('export_format') === 'xlf' ? 'xliff' : 'xml',
+          $export_format === 'xlf' ? 'xliff' : 'xml',
           $upload_params
       );
 
@@ -264,8 +264,19 @@ class SmartlingTranslator extends TranslatorPluginBase implements ContainerFacto
   }
 
   public function getFileName(JobInterface $job) {
-    $extension = $job->getSetting('export_format') === 'xlf' ? 'xlf' : 'xml';
-    return  "JobID" . $job->id() . '_' . $job->getSourceLangcode() . '_' . $job->getTargetLangcode() . '.' . $extension;
+    try {
+      $filename = $job->get('job_file_name');
+      $filename = !empty($filename->getValue()) ? $filename->getValue()[0]['value'] : '';
+    } catch (\Exception $e) {
+      $filename = '';
+    }
+
+    if (empty($filename)) {
+      $extension = $job->getSetting('export_format') === 'xlf' ? 'xlf' : 'xml';
+      $filename = "JobID" . $job->id() . '_' . $job->getSourceLangcode() . '_' . $job->getTargetLangcode() . '.' . $extension;
+    }
+
+    return  $filename;
   }
 
   /**
diff --git a/tmgmt_smartling.install b/tmgmt_smartling.install
index 24ce45a..5f0417a 100644
--- a/tmgmt_smartling.install
+++ b/tmgmt_smartling.install
@@ -20,3 +20,19 @@ function tmgmt_smartling_update_8001() {
       ->save(TRUE);
   }
 }
+
+/**
+ * Add file name into job entries.
+ */
+function tmgmt_smartling_update_8002() {
+  // Apply new field to a job entity.
+  Drupal::service('entity.definition_update_manager')->applyUpdates();
+
+  Drupal::database()->update('tmgmt_job')
+    ->expression('job_file_name', 'CONCAT(:job, tmgmt_job.tjid, :underscore, tmgmt_job.source_language, :underscore, tmgmt_job.target_language, :extension)', [
+      ':job' => 'JobID',
+      ':underscore' => '_',
+      ':extension' => '.xlf',
+    ])
+    ->execute();
+}
diff --git a/tmgmt_smartling.module b/tmgmt_smartling.module
index d18a337..7903168 100644
--- a/tmgmt_smartling.module
+++ b/tmgmt_smartling.module
@@ -5,9 +5,11 @@
  * Contains
  */
 
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\tmgmt\TMGMTException;
 use Drupal\views\ViewExecutable;
-use Drupal\tmgmt\JobInterface;
 
 function tmgmt_smartling_download_file_submit(array &$form, FormStateInterface $form_state) {
   /* @var \Drupal\tmgmt\Entity\Job $job */
@@ -21,9 +23,9 @@ function tmgmt_smartling_download_file(\Drupal\tmgmt\JobInterface $job) {
     $smartlingApi = $job->getTranslatorPlugin()->getSmartlingApi($job->getTranslator());
     $retrieval_type = $job->getTranslator()->getSetting('retrieval_type');
     $filename = $job->getTranslatorPlugin()->getFileName($job);
-    $export_format = $job->getSetting('export_format');
+    $extension = pathinfo($filename, PATHINFO_EXTENSION) === 'xlf' ? 'xlf' : 'html';
     $xml = $smartlingApi->downloadFile($filename, $job->getRemoteTargetLanguage(), ['retrievalType' => $retrieval_type]);
-    if ('xlf' !== $export_format) {
+    if ('xlf' !== $extension) {
       $xml = $job->getTranslatorPlugin()->convertXML2HTML($xml);
     }
   }
@@ -35,7 +37,6 @@ function tmgmt_smartling_download_file(\Drupal\tmgmt\JobInterface $job) {
   $path = $job->getSetting('scheme') . '://tmgmt_smartling_translations/' . $job->getTranslatorPlugin()->getFileName($job);
   $dirname = dirname($path);
   if (file_prepare_directory($dirname, FILE_CREATE_DIRECTORY) && ($file = file_save_data($xml, $path, FILE_EXISTS_REPLACE))) {
-    $extension = pathinfo($file->getFileUri(), PATHINFO_EXTENSION) === 'xlf' ? 'xlf' : 'html';
     $plugin = \Drupal::service('plugin.manager.tmgmt_file.format')->createInstance($extension);
     if ($plugin) {
       // Validate the file on job.
@@ -146,4 +147,43 @@ function tmgmt_smartling_views_pre_view(ViewExecutable $view, $display_id, array
 
     $view->addHandler($view->current_display, 'field', 'tmgmt_job_item', 'operations', $handlers['operations']);
   }
-}
\ No newline at end of file
+}
+
+/**
+ * Implements hook_entity_base_field_info_alter().
+ *
+ * TODO: move this hook into tmgmt_extension_suit module.
+ *
+ * @param $fields
+ * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
+ */
+function tmgmt_smartling_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) {
+  if ($entity_type->id() === 'tmgmt_job' && empty($fields['job_file_name'])) {
+    $fields['job_file_name'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('Generated file name'))
+      ->setSetting('max_length', 1024)
+      ->setTranslatable(FALSE)
+      ->setProvider('tmgmt_smartling')
+      ->setName('job_file_name')
+      ->setTargetEntityTypeId($entity_type->id())
+      ->setTargetBundle(NULL);
+  }
+}
+
+/**
+ * Implements hook_ENTITY_TYPE_update().
+ *
+ * TODO: move this hook into tmgmt_extension_suit module.
+ *
+ * @param \Drupal\Core\Entity\EntityInterface $entity
+ */
+function tmgmt_smartling_tmgmt_job_update(Drupal\Core\Entity\EntityInterface $entity) {
+  try {
+    if ($entity->hasTranslator()) {
+      $entity->set('job_file_name', $entity->getTranslatorPlugin()->getFileName($entity));
+    }
+  }
+  catch (TMGMTException $e) {
+    watchdog_exception('tmgmt_smartling', $e);
+  }
+}
