diff --git a/src/Encoder/CsvEncoder.php b/src/Encoder/CsvEncoder.php
index 5b5d396..769b9ea 100644
--- a/src/Encoder/CsvEncoder.php
+++ b/src/Encoder/CsvEncoder.php
@@ -45,16 +45,21 @@ class CsvEncoder implements EncoderInterface, DecoderInterface {
   protected static $format = 'csv';
 
   /**
+   * Indicates usage of UTF-8 signature in generated CSV file.
+   *
+   * @var bool
+   */
+  protected $useBom = FALSE;
+
+  /**
    * Constructs the class.
    *
    * @param string $delimiter
    *   Indicates the character used to delimit fields. Defaults to ",".
-   *
    * @param string $enclosure
    *   Indicates the character used for field enclosure. Defaults to '"'.
-   *
    * @param string $escape_char
-   *   Indicates the character used for escaping. Defaults to "\"
+   *   Indicates the character used for escaping. Defaults to "\".
    */
   public function __construct($delimiter = ",", $enclosure = '"', $escape_char = "\\") {
     $this->delimiter = $delimiter;
@@ -112,6 +117,9 @@ class CsvEncoder implements EncoderInterface, DecoderInterface {
       $csv->setEscape($this->escapeChar);
 
       // Set data.
+      if ($this->useBom) {
+        $csv->setOutputBOM(Writer::BOM_UTF8);
+      }
       $headers = $this->extractHeaders($data);
       $csv->insertOne($headers);
       $csv->addFormatter(array($this, 'formatRow'));
@@ -299,6 +307,7 @@ class CsvEncoder implements EncoderInterface, DecoderInterface {
     $this->delimiter = str_replace('\t', "\t", $settings['delimiter']);
     $this->enclosure = $settings['enclosure'];
     $this->escapeChar = $settings['escape_char'];
+    $this->useBom = ($settings['encoding'] === 'utf8' && !empty($settings['utf8_bom']));
   }
 
 }
