diff --git a/src/GeshiFilter.php b/src/GeshiFilter.php
index c6f04bb..1ada1e9 100644
--- a/src/GeshiFilter.php
+++ b/src/GeshiFilter.php
@@ -59,6 +59,11 @@ class GeshiFilter {
    * Attributes valid to set title.
    */
   const ATTRIBUTE_TITLE = 'title';
+  
+  /**
+   * Attributes valid to set special lines(lines to highlight).
+   */
+  const ATTRIBUTE_SPECIAL_LINES = 'special';
 
   /**
    * Parse code with tags inside <>, example, <code>.
diff --git a/src/GeshiFilterProcess.php b/src/GeshiFilterProcess.php
index d3ebd26..a826d6c 100644
--- a/src/GeshiFilterProcess.php
+++ b/src/GeshiFilterProcess.php
@@ -55,11 +55,13 @@ class GeshiFilterProcess {
    *   When to write all styles inline or from a css.
    * @param string $title
    *   The title to use in code.
+   * @param array $special_lines
+   *   Special lines to highlight.
    *
    * @return string
    *   The sourcecode after process by Geshi.
    */
-  public static function geshiProcess($source_code, $lang, $line_numbering = 0, $linenumbers_start = 1, $inline_mode = FALSE, $title = NULL) {
+  public static function geshiProcess($source_code, $lang, $line_numbering = 0, $linenumbers_start = 1, $inline_mode = FALSE, $title = NULL, $special_lines = array()) {
     $config = \Drupal::config('geshifilter.settings');
     // Load GeSHi library (if not already).
     $geshi_library = GeshiFilter::loadGeshi();
@@ -97,6 +99,8 @@ class GeshiFilterProcess {
         . '><code class="' . $code_class . '">' . $geshi->parse_code() . '</code></span>';
     }
     else {
+      $geshi->highlight_lines_extra($special_lines);
+      
       // Block source code mode.
       $geshi->set_header_type((int) $config->get('code_container', GESHI_HEADER_PRE));
       if ($line_numbering == 1) {
@@ -154,16 +158,13 @@ class GeshiFilterProcess {
    *   When to write all styles inline or from a css.
    * @param string $title
    *   The title to use in code.
+   * @paran array $special_lines
+   *   Lines to highlight.
    *
    * @return string
    *   The sourcecode after process by Geshi.
    */
-  public static function processSourceCode($source_code,
-  $lang,
-  $line_numbering = 0,
-                                          $linenumbers_start = 1,
-  $inline_mode = FALSE,
-  $title = NULL) {
+  public static function processSourceCode($source_code, $lang, $line_numbering = 0, $linenumbers_start = 1, $inline_mode = FALSE, $title = NULL, $special_lines = array()) {
     $config = \Drupal::config('geshifilter.settings');
     // Process.
     if ($lang == 'php' && $config->get('use_highlight_string_for_php', FALSE)) {
@@ -171,7 +172,7 @@ class GeshiFilterProcess {
     }
     else {
       // Process with GeSHi.
-      return self::geshiProcess($source_code, $lang, $line_numbering, $linenumbers_start, $inline_mode, $title);
+      return self::geshiProcess($source_code, $lang, $line_numbering, $linenumbers_start, $inline_mode, $title, $special_lines);
     }
   }
 
diff --git a/src/Plugin/Filter/GeshiFilterFilter.php b/src/Plugin/Filter/GeshiFilterFilter.php
index 6d3c4f8..b5d19f0 100644
--- a/src/Plugin/Filter/GeshiFilterFilter.php
+++ b/src/Plugin/Filter/GeshiFilterFilter.php
@@ -726,6 +726,9 @@ class GeshiFilterFilter extends FilterBase {
     if (isset($settings['title'])) {
       $title = $settings['title'];
     }
+    if (isset($settings['special_lines'])) {
+      $special_lines = $settings['special_lines'];
+    }
 
     if ($lang == GeshiFilter::DEFAULT_DONOTHING) {
       // Do nothing, and return the original.
@@ -737,7 +740,7 @@ class GeshiFilterFilter extends FilterBase {
     }
     $inline_mode = (strpos($source_code, "\n") === FALSE);
     // Process and return.
-    return GeshiFilterProcess::processSourceCode($source_code, $lang, $line_numbering, $linenumbers_start, $inline_mode, $title);
+    return GeshiFilterProcess::processSourceCode($source_code, $lang, $line_numbering, $linenumbers_start, $inline_mode, $title, $special_lines);
   }
 
   /**
@@ -758,6 +761,7 @@ class GeshiFilterFilter extends FilterBase {
     $line_numbering = NULL;
     $linenumbers_start = NULL;
     $title = NULL;
+    $special_lines = [];
 
     // Get the possible tags and languages.
     list($generic_code_tags, $language_tags, $tag_to_lang) = $this->getTags();
@@ -769,6 +773,7 @@ class GeshiFilterFilter extends FilterBase {
         GeshiFilter::ATTRIBUTE_LINE_NUMBERING_START,
         GeshiFilter::ATTRIBUTE_FANCY_N,
         GeshiFilter::ATTRIBUTE_TITLE,
+        GeshiFilter::ATTRIBUTE_SPECIAL_LINES,
       )
     ));
     $enabled_languages = GeshiFilter::getEnabledLanguages();
@@ -830,6 +835,9 @@ class GeshiFilterFilter extends FilterBase {
       elseif ($att_name == GeshiFilter::ATTRIBUTE_TITLE) {
         $title = $att_value;
       }
+      elseif ($att_name == GeshiFilter::ATTRIBUTE_SPECIAL_LINES) {
+        $special_lines = explode(',', $att_value);
+      }
     }
     // Return parsed results.
     return array(
@@ -837,6 +845,7 @@ class GeshiFilterFilter extends FilterBase {
       'line_numbering' => $line_numbering,
       'linenumbers_start' => $linenumbers_start,
       'title' => $title,
+      'special_lines' => $special_lines,
     );
   }
 
