diff --git a/imagefield_default_alt_and_title.links.task.yml b/imagefield_default_alt_and_title.links.task.yml
new file mode 100644
index 0000000..460e167
--- /dev/null
+++ b/imagefield_default_alt_and_title.links.task.yml
@@ -0,0 +1,11 @@
+imagefield_default_alt_and_title.tab_1:
+  route_name : imagefield_default_alt_and_title.settings
+  title: 'Settings'
+  base_route: imagefield_default_alt_and_title.settings
+  weight: 10
+
+imagefield_default_alt_and_title.tab_2:
+  route_name: imagefield_default_alt_and_title.batch
+  title: 'Update images'
+  base_route: imagefield_default_alt_and_title.settings
+  weight: 20
\ No newline at end of file
diff --git a/imagefield_default_alt_and_title.routing.yml b/imagefield_default_alt_and_title.routing.yml
index 038d321..d04baed 100644
--- a/imagefield_default_alt_and_title.routing.yml
+++ b/imagefield_default_alt_and_title.routing.yml
@@ -1,7 +1,15 @@
 imagefield_default_alt_and_title.settings:
-  path: '/admin/config/search/imagefield_default_alt_and_title'
+  path: '/admin/config/search/imagefield-default-alt-and-title'
   defaults:
     _form: '\Drupal\imagefield_default_alt_and_title\Form\ImagefieldDefaultAltAndTitleForm'
     _title: 'Imagefield default alt and title'
+  requirements:
+    _permission: 'administer site configuration'
+
+imagefield_default_alt_and_title.batch:
+  path: '/admin/config/search/imagefield-default-alt-and-title/batch-page'
+  defaults:
+    _form: '\Drupal\imagefield_default_alt_and_title\Form\ImagefieldDefaultAltAndTitleBatchForm'
+    _title: 'Update images'
   requirements:
     _permission: 'administer site configuration'
\ No newline at end of file
diff --git a/src/Form/ImagefieldDefaultAltAndTitleBatchForm.php b/src/Form/ImagefieldDefaultAltAndTitleBatchForm.php
new file mode 100644
index 0000000..a2b6dc9
--- /dev/null
+++ b/src/Form/ImagefieldDefaultAltAndTitleBatchForm.php
@@ -0,0 +1,167 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\imagefield_default_alt_and_title\Form\ImagefieldDefaultAltAndTitleBatchForm.
+ */
+
+namespace Drupal\imagefield_default_alt_and_title\Form;
+
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Class Batch form.
+ *
+ * @package Drupal\imagefield_default_alt_and_title\Form
+ */
+class ImagefieldDefaultAltAndTitleBatchForm extends FormBase {
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'imagefield-alt-title-batch';
+  }
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $config = $this->config('imagefield_default_alt_and_title.settings');
+
+    $form['default_alt'] = array(
+      '#type' => 'textfield',
+      '#title' => $this->t('Default Alt'),
+    );
+    $form['default_title'] = array(
+      '#type' => 'textfield',
+      '#title' => $this->t('Default Title'),
+    );
+
+    $node_options = $this->ImagefieldDefaultAltAndTitleEntityListByType('node_type');
+    if (!empty($node_options)) {
+      $form['node_type'] = array(
+        '#type' => 'details',
+        '#title' => $this->t('Node types'),
+        '#open' => TRUE,
+      );
+      $form['node_type']['node_entity_types'] = array(
+        '#type' => 'checkboxes',
+        '#options' => $this->ImagefieldDefaultAltAndTitleEntityListByType('node_type'),
+      );
+    }
+
+    $taxonomy_options = $this->ImagefieldDefaultAltAndTitleEntityListByType('taxonomy_vocabulary');
+    if (!empty($taxonomy_options)) {
+      $form['taxonomy_vocabulary'] = array(
+        '#type' => 'details',
+        '#title' => $this->t('Taxonomy vocabularies'),
+        '#open' => TRUE,
+      );
+      $form['taxonomy_vocabulary']['taxonomy_entity_types'] = array(
+        '#type' => 'checkboxes',
+        '#options' => $this->ImagefieldDefaultAltAndTitleEntityListByType('taxonomy_vocabulary'),
+      );
+    }
+
+    $commerce_options = $this->ImagefieldDefaultAltAndTitleEntityListByType('commerce_product_type');
+    if (!empty($commerce_options)) {
+      $form['commerce_product'] = array(
+        '#type' => 'details',
+        '#title' => $this->t('Commerce product type '),
+        '#open' => TRUE,
+      );
+      $form['commerce_product']['commerce_entity_types'] = array(
+        '#type' => 'checkboxes',
+        '#options' => $this->ImagefieldDefaultAltAndTitleEntityListByType('commerce_product_type'),
+      );
+    }
+
+    $form['submit'] = array(
+      '#type' => 'submit',
+      '#value' => $this->t('Start'),
+    );
+
+    return $form;
+  }
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    $operations = [];
+
+    \Drupal::configFactory()
+           ->getEditable('system.site')
+           ->set('imagefield_default_alt_and_title_default_values', [
+             'alt' => $form_state->getValue(['default_alt']),
+             'title' => $form_state->getValue(['default_title']),
+           ])
+           ->save();
+
+    if (!empty($form_state->getValue(['node_entity_types']))) {
+      $node_query = \Drupal::database()->select('node', 'n');
+      $node_query->fields('n', ['nid']);
+      $node_query->condition('n.type', $form_state->getValue(['node_entity_types']), 'IN');
+      $node_result = $node_query->execute()->fetchCol();
+      $operations[] = [
+        '\Drupal\imagefield_default_alt_and_title\ImagefieldDefaultAltAndTitleBatch::addedData',
+        [$node_result, 'node_entity']
+      ];
+    }
+    if (!empty($form_state->getValue(['taxonomy_entity_types']))) {
+      $tax_query = \Drupal::database()->select('taxonomy_term_field_data', 't');
+      $tax_query->fields('t', ['tid']);
+      $tax_query->condition('t.vid', $form_state->getValue(['taxonomy_entity_types']), 'IN');
+      $node_result = $tax_query->execute()->fetchCol();
+
+      $operations[] = [
+        '\Drupal\imagefield_default_alt_and_title\ImagefieldDefaultAltAndTitleBatch::addedData',
+        [$node_result, 'taxonomy_vocabulary']
+      ];
+    }
+    if (!empty($form_state->getValue(['commerce_entity_types']))) {
+      $com_query = \Drupal::database()->select('commerce_product', 'cp');
+      $com_query->fields('cp', ['product_id']);
+      $com_query->condition('cp.type', $form_state->getValue(['commerce_entity_types']), 'IN');
+      $node_result = $com_query->execute()->fetchCol();
+
+      $operations[] = [
+        '\Drupal\imagefield_default_alt_and_title\ImagefieldDefaultAltAndTitleBatch::addedData',
+        [$node_result, 'commerce_product_type']
+      ];
+    }
+
+    $batch = array(
+      'title' => $this->t('Update images...'),
+      'operations' => $operations,
+      'finished' => '\Drupal\imagefield_default_alt_and_title\ImagefieldDefaultAltAndTitleBatch::addedDataFinishedCallback',
+      'init_message' => t('Processing Modules'),
+      'progress_message' => t('Processed @current out of @total.'),
+      'error_message' => t('Batch has encountered an error.'),
+    );
+    batch_set($batch);
+  }
+
+  /**
+   * Load all entity types available on the site.
+   */
+  public function ImagefieldDefaultAltAndTitleEntityListByType($type) {
+    $all_types = array();
+    $entity_all_types_list = \Drupal::entityTypeManager()->getDefinitions();
+    if (!empty($entity_all_types_list)) {
+      foreach ($entity_all_types_list as $key => $data) {
+        if ($key == $type) {
+          $contentTypesList = \Drupal::service('entity.manager')
+                                     ->getStorage($key)
+                                     ->loadMultiple();
+          if (!empty($contentTypesList)) {
+            foreach ($contentTypesList as $key_bundles => $data_bundles) {
+              $all_types[$key_bundles] = $key_bundles;
+            }
+          }
+        }
+      }
+    }
+
+    return $all_types;
+  }
+}
diff --git a/src/Form/ImagefieldDefaultAltAndTitleForm.php b/src/Form/ImagefieldDefaultAltAndTitleForm.php
index b712e9d..f7520d3 100644
--- a/src/Form/ImagefieldDefaultAltAndTitleForm.php
+++ b/src/Form/ImagefieldDefaultAltAndTitleForm.php
@@ -59,7 +59,7 @@ class ImagefieldDefaultAltAndTitleForm extends ConfigFormBase {
    */
   public function ImagefieldDefaultAltAndTitleEntityList() {
     $all_types = [];
-    $use_entitys = ['commerce_product', 'node_type', 'taxonomy_vocabulary'];
+    $use_entitys = ['commerce_product_type', 'node_type', 'taxonomy_vocabulary'];
     $entity_all_types_list = \Drupal::entityTypeManager()->getDefinitions();
     if (!empty($entity_all_types_list)) {
       foreach ($entity_all_types_list as $key => $data) {
diff --git a/src/ImagefieldDefaultAltAndTitleBatch.php b/src/ImagefieldDefaultAltAndTitleBatch.php
new file mode 100644
index 0000000..21734bb
--- /dev/null
+++ b/src/ImagefieldDefaultAltAndTitleBatch.php
@@ -0,0 +1,119 @@
+<?php
+
+namespace Drupal\imagefield_default_alt_and_title;
+
+use Drupal\node\Entity\Node;
+use Drupal\taxonomy\Entity\Term;
+use Drupal\commerce_product\Entity\Product;
+
+class ImagefieldDefaultAltAndTitleBatch {
+
+  /**
+   * Batch procased.
+   */
+  function addedData($data, $type, &$context) {
+    $results = array();
+    $config = \Drupal::config('system.site')
+                     ->get('imagefield_default_alt_and_title_default_values');
+    $limit = 1;
+    if (empty($context['sandbox']['progress'])) {
+      $context['sandbox']['progress'] = 0;
+      $context['sandbox']['max'] = count($data);
+    }
+    if (empty($context['sandbox']['items'])) {
+      $context['sandbox']['items'] = $data;
+    }
+    $counter = 0;
+    if (!empty($context['sandbox']['items'])) {
+      if ($context['sandbox']['progress'] != 0) {
+        array_splice($context['sandbox']['items'], 0, $limit);
+      }
+      foreach ($context['sandbox']['items'] as $item) {
+        if ($counter != $limit) {
+          switch ($type) {
+            case 'node_entity':
+              $node = Node::load($item);
+              $node_fields = $node->getFieldDefinitions();
+              $node = ImagefieldDefaultAltAndTitleBatch::changeValue($node_fields, $node, $config);
+              $results[] = $node->save();
+              break;
+            case 'taxonomy_vocabulary':
+              $term = Term::load($item);
+              $term_fields = $term->getFieldDefinitions();
+              $term = ImagefieldDefaultAltAndTitleBatch::changeValue($term_fields, $term, $config);
+              $results[] = $term->save();
+              break;
+            case 'commerce_product_type':
+              $moduleHandler = \Drupal::service('module_handler');
+              if ($moduleHandler->moduleExists('commerce_product')) {
+                $product = Product::load($item);
+                $product_fields = $product->getFieldDefinitions();
+                $product = ImagefieldDefaultAltAndTitleBatch::changeValue($product_fields, $product, $config);
+                $results[] = $product->save();
+              }
+              break;
+          }
+
+          $counter++;
+          $context['sandbox']['progress']++;
+          $context['message'] = t('Now processing node %progress of %count', array(
+            '%progress' => $context['sandbox']['progress'],
+            '%count' => $context['sandbox']['max'],
+          ));
+          $context['results']['processed'] = $context['sandbox']['progress'];
+        }
+      }
+    }
+
+    if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
+      $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
+    }
+  }
+
+  /**
+   * Finished callback for batch.
+   */
+  function addedDataFinishedCallback($success, $results, $operations) {
+    if ($success) {
+      $message = \Drupal::translation()
+                        ->formatPlural($results['processed'], 'One post processed.', '@count posts processed.');
+    }
+    else {
+      $message = t('Finished with an error.');
+    }
+    drupal_set_message($message);
+  }
+
+  /**
+   * Change value for image field.
+   */
+  function changeValue($fields = [], $data, $config) {
+    $result = [];
+    if (!empty($fields) && !empty($data) && !empty($config)) {
+      foreach ($fields as $key => $value) {
+        $change_enable = FALSE;
+        if ($value->getType() == 'image') {
+          if (!empty($data->get($key)->getValue())) {
+            $field_value = $data->get($key)->getValue();
+            foreach ($field_value as $fv_key => $fv_data) {
+              if (empty($field_value[$fv_key]['alt'])) {
+                $field_value[$fv_key]['alt'] = $config['alt'];
+                $change_enable = TRUE;
+              }
+              if (empty($field_value[$fv_key]['title'])) {
+                $field_value[$fv_key]['title'] = $config['title'];
+                $change_enable = TRUE;
+              }
+            }
+            if ($change_enable) {
+              $data->set($key, $field_value);
+            }
+          }
+        }
+      }
+      $result = $data;
+    }
+
+    return $result;
+  }
+}
