diff --git a/src/Plugin/Field/FieldFormatter/TaarikhDefaultFormatter.php b/src/Plugin/Field/FieldFormatter/TaarikhDefaultFormatter.php
new file mode 100644
index 0000000..8e23187
--- /dev/null
+++ b/src/Plugin/Field/FieldFormatter/TaarikhDefaultFormatter.php
@@ -0,0 +1,143 @@
+<?php
+
+namespace Drupal\taarikh\Plugin\Field\FieldFormatter;
+
+use Drupal\Core\Datetime\DateFormatterInterface;
+use Drupal\Core\Datetime\DrupalDateTime;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Field\FieldDefinitionInterface;
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\datetime\Plugin\Field\FieldFormatter\DateTimeFormatterBase;
+use Drupal\taarikh\Plugin\AlgorithmPluginManager;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Plugin implementation of the 'taarikh_date' formatter.
+ *
+ * @FieldFormatter(
+ *   id = "taarikh_default",
+ *   label = @Translation("Taarikh date and time"),
+ *   field_types = {
+ *     "datetime"
+ *   }
+ * )
+ */
+class TaarikhDefaultFormatter extends DateTimeFormatterBase {
+
+  /**
+   * @var \Drupal\taarikh\Plugin\AlgorithmPluginManager
+   */
+  protected $taarikhAlgorithmManager;
+
+  /**
+   * Constructs a new DateTimeDefaultFormatter.
+   *
+   * @param string $plugin_id
+   *   The plugin_id for the formatter.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
+   *   The definition of the field to which the formatter is associated.
+   * @param array $settings
+   *   The formatter settings.
+   * @param string $label
+   *   The formatter label display setting.
+   * @param string $view_mode
+   *   The view mode.
+   * @param array $third_party_settings
+   *   Third party settings.
+   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
+   *   The date formatter service.
+   * @param \Drupal\Core\Entity\EntityStorageInterface $date_format_storage
+   *   The date format entity storage.
+   * @param \Drupal\taarikh\Plugin\AlgorithmPluginManager $algorithm_plugin_manager
+   *  The taarikh algorithm plugin manager.
+   */
+  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, DateFormatterInterface $date_formatter, EntityStorageInterface $date_format_storage, AlgorithmPluginManager $algorithm_plugin_manager) {
+    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $date_formatter, $date_format_storage);
+
+    $this->taarikhAlgorithmManager = $algorithm_plugin_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $plugin_id,
+      $plugin_definition,
+      $configuration['field_definition'],
+      $configuration['settings'],
+      $configuration['label'],
+      $configuration['view_mode'],
+      $configuration['third_party_settings'],
+      $container->get('date.formatter'),
+      $container->get('entity.manager')->getStorage('date_format'),
+      $container->get('plugin.manager.taarikh_algorithm')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function defaultSettings() {
+    // @todo: Build settings form.
+    return [
+        'format_type' => 'medium',
+        'algorithm' => 'fatimid_astronomical',
+      ] + parent::defaultSettings();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function viewElements(FieldItemListInterface $items, $langcode) {
+    $elements = [];
+
+    foreach ($items as $delta => $item) {
+      if (!empty($item->date)) {
+        /** @var \Drupal\Core\Datetime\DrupalDateTime $date */
+        $date = $item->date;
+        $elements[$delta] = [
+          '#markup' => $this->formatDate($this->convertDate($date)),
+          '#cache' => [
+            'contexts' => [
+              'timezone',
+            ],
+          ],
+        ];
+      }
+    }
+
+    return $elements;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function formatDate($date) {
+    $format_type = $this->getSetting('format_type');
+    // @todo: Figure out timezone support.
+//    $timezone = $this->getSetting('timezone_override') ?: $date->getTimezone()->getName();
+
+    $format = $this->dateFormatStorage->load($format_type)->getPattern();
+    return $date->getFormatter()->format($format);
+  }
+
+  /**
+   * Convert date according to the algorithm.
+   *
+   * @param \Drupal\Core\Datetime\DrupalDateTime $date
+   *   The date to be converted.
+   *
+   * @return \Hussainweb\DateConverter\Value\DateInterface
+   *   The converted date object.
+   */
+  protected function convertDate(DrupalDateTime $date) {
+    // @todo: See if we can create the instance safely in the constructor itself.
+    /** @var \Drupal\taarikh\TaarikhAlgorithmPluginInterface $algorithm */
+    $algorithm = $this->taarikhAlgorithmManager->createInstance($this->getSetting('algorithm'));
+    return $algorithm->convertFromDrupalDateTime($date);
+  }
+
+}
diff --git a/taarikh.module b/taarikh.module
index c8a12b6..a86e4d3 100644
--- a/taarikh.module
+++ b/taarikh.module
@@ -17,15 +17,3 @@ function taarikh_help($route_name, RouteMatchInterface $route_match) {
     default:
   }
 }
-
-/**
- * Implements hook_theme().
- */
-function taarikh_theme() {
-  return [
-    'taarikh' => [
-      'template' => 'taarikh',
-      'render element' => 'children',
-    ],
-  ];
-}
diff --git a/templates/taarikh.html.twig b/templates/taarikh.html.twig
deleted file mode 100644
index 91e43c8..0000000
--- a/templates/taarikh.html.twig
+++ /dev/null
@@ -1 +0,0 @@
-<!-- Add you custom twig html here -->
\ No newline at end of file
