diff --git a/css/datatables.css b/css/datatables.css
new file mode 100644
index 0000000..d3e520a
--- /dev/null
+++ b/css/datatables.css
@@ -0,0 +1,3 @@
+.filterMatches {
+  background: #FCCF65;
+}
\ No newline at end of file
diff --git a/datatables.module b/datatables.module
index bdc62e3..8591ffe 100644
--- a/datatables.module
+++ b/datatables.module
@@ -173,6 +173,8 @@ function theme_datatable($variables) {
     }
 
     drupal_add_library('datatables', 'datatables');
+    drupal_add_js(drupal_get_path('module', 'datatables') . '/js/datatables.plugins.js');
+    drupal_add_css(drupal_get_path('module', 'datatables') . '/css/datatables.css');
     drupal_add_js(array('datatables' => array('#' . $attributes['id'] => $datatable_options)), 'setting');
     unset($attributes['datatable_options']);
   }
@@ -287,6 +289,8 @@ function template_preprocess_datatables_view(&$vars) {
   $vars['id'] = _datatables_get_id();
 
   drupal_add_library('datatables', 'datatables');
+  drupal_add_css(drupal_get_path('module', 'datatables') . '/css/datatables.css');
+  drupal_add_js(drupal_get_path('module', 'datatables') . '/js/datatables.plugins.js');
   drupal_add_js(array('datatables' => array('#' . $vars['id'] => $datatable_options)), array('type' => 'setting', 'scope' => JS_DEFAULT));
 }
 
diff --git a/js/datatables.plugins.js b/js/datatables.plugins.js
new file mode 100644
index 0000000..799af88
--- /dev/null
+++ b/js/datatables.plugins.js
@@ -0,0 +1,64 @@
+// HIGHLIGHT FCT
+jQuery.fn.dataTableExt.oApi.fnSearchHighlighting = function(oSettings) {
+    // Initialize regex cache
+    oSettings.oPreviousSearch.oSearchCaches = {};
+      
+    oSettings.oApi._fnCallbackReg( oSettings, 'aoRowCallback', function( nRow, aData, iDisplayIndex, iDisplayIndexFull) {
+        // Initialize search string array
+        var searchStrings = [];
+        var oApi = this.oApi;
+        var cache = oSettings.oPreviousSearch.oSearchCaches;
+        // Global search string
+        // If there is a global search string, add it to the search string array
+        if (oSettings.oPreviousSearch.sSearch) {
+            searchStrings.push(oSettings.oPreviousSearch.sSearch);
+        }
+        // Individual column search option object
+        // If there are individual column search strings, add them to the search string array
+        if ((oSettings.aoPreSearchCols) && (oSettings.aoPreSearchCols.length > 0)) {
+            for (var i in oSettings.aoPreSearchCols) {
+                if (oSettings.aoPreSearchCols[i].sSearch) {
+                searchStrings.push(oSettings.aoPreSearchCols[i].sSearch);
+                }
+            }
+        }
+        // Create the regex built from one or more search string and cache as necessary
+        if (searchStrings.length > 0) {
+            var sSregex = searchStrings.join("|");
+            if (!cache[sSregex]) {
+                var regRules = "("
+                ,   regRulesSplit = sSregex.split(' ');
+                
+                regRules += "("+ sSregex +")";
+                for(var i=0; i<regRulesSplit.length; i++) {
+                  regRules += "|("+ regRulesSplit[i] +")";
+                }
+                regRules += ")";
+            
+                // This regex will avoid in HTML matches
+                cache[sSregex] = new RegExp(regRules+"(?!([^<]+)?>)", 'ig');
+            }
+            var regex = cache[sSregex];
+        }
+        // Loop through the rows/fields for matches
+        jQuery('td', nRow).each( function(i) {
+            // Take into account that ColVis may be in use
+            var j = oApi._fnVisibleToColumnIndex( oSettings,i);
+            // Only try to highlight if the cell is not empty or null
+            if (aData[j]) {          
+                // If there is a search string try to match
+                if ((typeof sSregex !== 'undefined') && (sSregex)) {
+                    this.innerHTML = aData[j].replace( regex, function(matched) {
+                        return "<span class='filterMatches'>"+matched+"</span>";
+                    });
+                }
+                // Otherwise reset to a clean string
+                else {
+                    this.innerHTML = aData[j];
+                }
+            }
+        });
+        return nRow;
+    }, 'row-highlight');
+    return this;
+};
\ No newline at end of file
