diff --git a/README.md b/README.md
index 1218f07..c236057 100644
--- a/README.md
+++ b/README.md
@@ -67,8 +67,8 @@ Configurable parameters:
  * Use menu title as fallback instead of raw path component.
  * Remove segments of the breadcrumb that are identical.
  * Use a custom separator between the breadcrumb's segments. (TODO)
- * Choose a transformation mode for the segments' title.(TODO)
- * Make the 'capitalizator' ignore some words. (TODO)
+ * Choose a transformation mode for the segments' title.
+ * Make the 'capitalizator' ignore some words.
 
 
 MAINTAINERS
diff --git a/config/install/easy_breadcrumb.settings.yml b/config/install/easy_breadcrumb.settings.yml
index 77b66b1..690db15 100644
--- a/config/install/easy_breadcrumb.settings.yml
+++ b/config/install/easy_breadcrumb.settings.yml
@@ -11,3 +11,14 @@ term_hierarchy: FALSE
 absolute_paths: FALSE
 hide_single_home_item: FALSE
 title_from_page_when_available: TRUE
+capitalizator_mode: 'ucwords'
+capitalizator_ignored_words:
+  - of
+  - and
+  - or
+  - de
+  - del
+  - y
+  - o
+capitalizator_forced_words_first_letter: FALSE
+capitalizator_forced_words_case_sensitivity: TRUE
diff --git a/src/EasyBreadcrumbBuilder.php b/src/EasyBreadcrumbBuilder.php
index 097f9e1..bb3e353 100755
--- a/src/EasyBreadcrumbBuilder.php
+++ b/src/EasyBreadcrumbBuilder.php
@@ -378,7 +378,7 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface {
         // the access result's cacheability metadata.
         if ($access->isAllowed()) {
           if ($this->config->get(EasyBreadcrumbConstants::TITLE_FROM_PAGE_WHEN_AVAILABLE)) {
-            $title = $this->getTitleString($route_request, $route_match, $replacedTitles);
+            $title = $this->normalizeText($this->getTitleString($route_request, $route_match, $replacedTitles));
             if (empty($title)) {
               unset($title);
             }
@@ -408,7 +408,7 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface {
               }
               else {
                 $menu_link = reset($menu_links);
-                $title = $menu_link->getTitle();
+                $title = $this->normalizeText($menu_link->getTitle());
                 if (array_key_exists($title, $replacedTitles)) {
                   $title = $replacedTitles[$title];
                 }
@@ -418,7 +418,7 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface {
             // Fallback to using the raw path component as the title if the
             // route is missing a _title or _title_callback attribute.
             if (!isset($title)) {
-              $title = str_replace(['-', '_'], ' ', Unicode::ucfirst(end($path_elements)));
+              $title = $this->normalizeText(end($path_elements));
               if (array_key_exists($title, $replacedTitles)) {
                 $title = $replacedTitles[$title];
               }
@@ -457,7 +457,7 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface {
         }
       }
       elseif ($this->config->get(EasyBreadcrumbConstants::INCLUDE_INVALID_PATHS) && empty($exclude[implode('/', $path_elements)])) {
-        $title = str_replace(['-', '_'], ' ', Unicode::ucfirst(end($path_elements)));
+        $title = $this->normalizeText(end($path_elements));
         $this->applyTitleReplacement($title, $replacedTitles);
         $links[] = Link::createFromRoute($title, '<none>');
         unset($title);
@@ -468,7 +468,7 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface {
     // Add the home link, if desired.
     if ($this->config->get(EasyBreadcrumbConstants::INCLUDE_HOME_SEGMENT)) {
       if ($path && '/' . $path != $front && $path != $curr_lang) {
-        $links[] = Link::createFromRoute($this->config->get(EasyBreadcrumbConstants::HOME_SEGMENT_TITLE), '<front>');
+        $links[] = Link::createFromRoute($this->normalizeText($this->config->get(EasyBreadcrumbConstants::HOME_SEGMENT_TITLE)), '<front>');
       }
       if ($this->config->get(EasyBreadcrumbConstants::HIDE_SINGLE_HOME_ITEM) && count($links) === 1) {
         return $breadcrumb->setLinks([]);
@@ -684,4 +684,93 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface {
     }
   }
 
+  /**
+   * Normalizes a text.
+   *
+   * E.g., transforms "about-us" to "About Us" or "About us", according to
+   * parameters.
+   *
+   * @param string $raw_text
+   *   Text to be normalized.
+   *
+   * @return string
+   *   Normalized title.
+   */
+  private function normalizeText($raw_text) {
+
+    // Transform '-hello--world_javascript-' to 'hello world javascript'.
+    $normalized_text = str_replace(['-', '_'], ' ', $raw_text);
+    $normalized_text = trim($normalized_text);
+    $normalized_text = preg_replace('/\s{2,}/', ' ', $normalized_text);
+
+    // Gets the flag saying the capitalizator mode.
+    $capitalizator_mode = $this->config->get(EasyBreadcrumbConstants::CAPITALIZATOR_MODE);
+    if ($capitalizator_mode === 'ucwords') {
+
+      // Transforms the text 'once a time' to 'Once a Time'.
+      // List of words to be ignored by the capitalizator.
+      $ignored_words = $this->config->get(EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS);
+      $words = explode(' ', $normalized_text);
+
+      // Transforms the non-ignored words of the segment.
+      $words[0] = Unicode::ucfirst($words[0]);
+      $words_quantity = count($words);
+      for ($i = 1; $i < $words_quantity; ++$i) {
+
+        // Transforms this word only if it is not in the list of ignored words.
+        if (!isset($ignored_words[$words[$i]])) {
+          $words[$i] = Unicode::ucfirst($words[$i]);
+
+        }
+      }
+      $normalized_text = implode(' ', $words);
+    }
+    elseif ($capitalizator_mode === 'ucall') {
+
+      // Transforms the text 'once a time' to 'ONCE A TIME'.
+      $normalized_text = mb_strtoupper($normalized_text);
+    }
+    elseif ($capitalizator_mode === 'ucforce') {
+
+      // Transforms the text 'once a time' to 'once a TIME'.
+      // List of words to be forced by the capitalizator.
+      $forced_words = $this->config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS);
+
+      // If case sensitivity is false make all the forced words uncapitalized by default.
+      if (!$this->config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_CASE_SENSITIVITY)) {
+        $forced_words = array_map('drupal_strtolower', $forced_words);
+      }
+      $words = explode(' ', $normalized_text);
+
+      // Transforms the non-ignored words of the segment.
+      if ($this->config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_FIRST_LETTER)) {
+        $words[0] = Unicode::ucfirst($words[0]);
+      }
+      $words_quantity = count($words);
+      for ($i = 0;  $i < $words_quantity; ++$i) {
+
+        // If case sensitivity is false make the compared word uncapitalized in
+        // order to allow the comparison well.
+        if (!$this->config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_CASE_SENSITIVITY)) {
+          $selected_word = mb_strtolower($words[$i]);
+        }
+        else {
+          $selected_word = $words[$i];
+        }
+
+        // Transforms this word only if it is in the list of forced words.
+        if (in_array($selected_word, $forced_words)) {
+          $words[$i] = mb_strtoupper($selected_word);
+        }
+      }
+      $normalized_text = implode(' ', $words);
+    }
+    else {
+
+      // Transforms the text 'once a time' to 'Once a time' (ucfirst).
+      $normalized_text = Unicode::ucfirst($normalized_text);
+    }
+
+    return $normalized_text;
+  }
 }
diff --git a/src/EasyBreadcrumbConstants.php b/src/EasyBreadcrumbConstants.php
index d3e448f..14f2003 100644
--- a/src/EasyBreadcrumbConstants.php
+++ b/src/EasyBreadcrumbConstants.php
@@ -82,6 +82,21 @@ class EasyBreadcrumbConstants {
    */
   const CAPITALIZATOR_IGNORED_WORDS = 'capitalizator_ignored_words';
 
+  /**
+   * List of words to be forced by the 'capitalizator'. E.g.: your brand's name.
+   */
+  const CAPITALIZATOR_FORCED_WORDS = 'capitalizator_forced_words';
+
+  /**
+   * List of words to be forced by the 'capitalizator'. E.g.: your brand's name.
+   */
+  const CAPITALIZATOR_FORCED_WORDS_FIRST_LETTER = 'capitalizator_forced_words_first_letter';
+
+  /**
+   * Logical value to 'Make the first letters of each segment capitalized'.
+   */
+  const CAPITALIZATOR_FORCED_WORDS_CASE_SENSITIVITY = 'capitalizator_forced_words_case_sensitivity';
+
   /**
    * Flag for showing the language prefix as its own segment.
    */
@@ -156,24 +171,4 @@ class EasyBreadcrumbConstants {
     return $default_custom_paths;
   }
 
-  /**
-   * Default list of ignored words.
-   *
-   * @return array
-   *   Default list of ignored words.
-   */
-  public static function defaultIgnoredWords() {
-    static $default_ignored_words = [
-      'of',
-      'and',
-      'or',
-      'de',
-      'del',
-      'y',
-      'o',
-    ];
-
-    return $default_ignored_words;
-  }
-
 }
diff --git a/src/Form/EasyBreadcrumbGeneralSettingsForm.php b/src/Form/EasyBreadcrumbGeneralSettingsForm.php
index 2980945..d1b63b6 100644
--- a/src/Form/EasyBreadcrumbGeneralSettingsForm.php
+++ b/src/Form/EasyBreadcrumbGeneralSettingsForm.php
@@ -194,6 +194,91 @@ class EasyBreadcrumbGeneralSettingsForm extends ConfigFormBase {
       '#default_value' => $config->get(EasyBreadcrumbConstants::TERM_HIERARCHY),
     ];
 
+    $fieldset_general[EasyBreadcrumbConstants::CAPITALIZATOR_MODE] = [
+      '#type' => 'select',
+      '#title' => $this->t("Transformation mode for the segments' titles"),
+      '#options' => [
+        'none' => $this->t('None'),
+        'ucwords' => $this->t("Capitalize the first letter of each word in the segment"),
+        'ucfirst' => $this->t("Only capitalize the first letter of each segment"),
+        'ucall' => $this->t("Capitalize all the letters of each word in the segment"),
+        'ucforce' => $this->t("Capitalize only the words that are set below"),
+      ],
+      '#description' => $this->t("Choose the transformation mode you want to apply to the segments' titles. E.g.: 'blog/once-a-time' -> 'Home >> Blog >> Once a Time'."),
+      '#default_value' => $config->get(EasyBreadcrumbConstants::CAPITALIZATOR_MODE),
+    ];
+
+    // Formats the ignored-words array as space separated list of words
+    // (word1 word2 wordN) before displaying them.
+    $capitalizator_ignored_words_arr = $config->get(EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS);
+    $capitalizator_ignored_words = @implode(' ', $capitalizator_ignored_words_arr);
+
+    $fieldset_general[EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS] = [
+      '#type' => 'textarea',
+      '#rows' => 3,
+      '#title' => $this->t("Words to be ignored by the 'capitalizator'"),
+      '#description' => $this->t("Enter a space separated list of words to be ignored by the 'capitalizator'. This will be applied only to the words not at the beginning of each segment. E.g.: of and."),
+      '#default_value' => $capitalizator_ignored_words,
+      '#states' => [
+        'visible' => [
+          ':input[name="' . EasyBreadcrumbConstants::CAPITALIZATOR_MODE . '"]' => ['value' => 'ucwords'],
+        ],
+        'invisible' => [
+          ':input[name="' . EasyBreadcrumbConstants::CAPITALIZATOR_MODE . '"]' => ['!value' => 'ucwords'],
+        ],
+      ],
+    ];
+
+    // Formats the forced-words array as space separated list of words
+    // (word1 word2 wordN) before displaying them.
+    $capitalizator_forced_words_arr = $config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS);
+    $capitalizator_forced_words = @implode(' ', $capitalizator_forced_words_arr);
+
+    $fieldset_general[EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS] = [
+      '#type' => 'textarea',
+      '#rows' => 3,
+      '#title' => $this->t("Words to be forced to capitalized by the 'capitalizator'"),
+      '#description' => $this->t("Enter a space separated list of words to be forced by the 'capitalizator'. This will be applied only to the words that are listed. E.g.: if you want to capitalize your brand's name."),
+      '#default_value' => $capitalizator_forced_words,
+      '#states' => [
+        'visible' => [
+          ':input[name="' . EasyBreadcrumbConstants::CAPITALIZATOR_MODE . '"]' => ['value' => 'ucforce'],
+        ],
+        'invisible' => [
+          ':input[name="' . EasyBreadcrumbConstants::CAPITALIZATOR_MODE . '"]' => ['!value' => 'ucforce'],
+        ],
+      ],
+    ];
+
+    $fieldset_general[EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_CASE_SENSITIVITY] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t("Use case sensitivity when matching words to be forced to capitalization."),
+      '#default_value' => $config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_CASE_SENSITIVITY),
+      '#states' => [
+        'visible' => [
+          ':input[name="' . EasyBreadcrumbConstants::CAPITALIZATOR_MODE . '"]' => ['value' => 'ucforce'],
+        ],
+        'invisible' => [
+          ':input[name="' . EasyBreadcrumbConstants::CAPITALIZATOR_MODE . '"]' => ['!value' => 'ucforce'],
+        ],
+      ],
+      '#description' => $this->t("If checked, it matches drupal with drupal, druPAL with druPAL. Unchecked, it matches drupal with Drupal, drupal with druPAL."),
+    ];
+
+    $fieldset_general[EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_FIRST_LETTER] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t("Make the first letters of each segment capitalized."),
+      '#default_value' => $config->get(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_FIRST_LETTER),
+      '#states' => [
+        'visible' => [
+          ':input[name="' . EasyBreadcrumbConstants::CAPITALIZATOR_MODE . '"]' => ['value' => 'ucforce'],
+        ],
+        'invisible' => [
+          ':input[name="' . EasyBreadcrumbConstants::CAPITALIZATOR_MODE . '"]' => ['!value' => 'ucforce'],
+        ],
+      ],
+    ];
+
     $form = [];
 
     // Inserts the details for grouping general settings fields.
@@ -229,9 +314,37 @@ class EasyBreadcrumbGeneralSettingsForm extends ConfigFormBase {
       ->set(EasyBreadcrumbConstants::ABSOLUTE_PATHS, $form_state->getValue(EasyBreadcrumbConstants::ABSOLUTE_PATHS))
       ->set(EasyBreadcrumbConstants::HIDE_SINGLE_HOME_ITEM, $form_state->getValue(EasyBreadcrumbConstants::HIDE_SINGLE_HOME_ITEM))
       ->set(EasyBreadcrumbConstants::TERM_HIERARCHY, $form_state->getValue(EasyBreadcrumbConstants::TERM_HIERARCHY))
+      ->set(EasyBreadcrumbConstants::CAPITALIZATOR_MODE, $form_state->getValue(EasyBreadcrumbConstants::CAPITALIZATOR_MODE))
+      ->set(EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS, $this->processValuesToArray($form_state->getValue(EasyBreadcrumbConstants::CAPITALIZATOR_IGNORED_WORDS)))
+      ->set(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS, $this->processValuesToArray($form_state->getValue(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS)))
+      ->set(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_CASE_SENSITIVITY, $form_state->getValue(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_CASE_SENSITIVITY))
+      ->set(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_FIRST_LETTER, $form_state->getValue(EasyBreadcrumbConstants::CAPITALIZATOR_FORCED_WORDS_FIRST_LETTER))
       ->save();
 
     parent::submitForm($form, $form_state);
   }
 
+  /**
+   * Pre-processes the list of words for storing them as an array.
+   *
+   * Replaces line-endings by spaces and splits words by spaces.
+   * E.g.: array('of','and').
+   *
+   * @param string $words
+   *   A string of words.
+   *
+   * @return array
+   *   An array of processed words.
+   */
+  private function processValuesToArray($words) {
+    $words_arr = [];
+    $words = preg_replace('/\r*\n+/', ' ', $words);
+    $words = trim($words);
+    $words_arr_aux = $words === '' ? [] : preg_split('/\s+/', $words);
+    foreach ($words_arr_aux as $word) {
+      $words_arr[$word] = $word;
+    }
+    return $words_arr;
+  }
+
 }
