diff --git a/media/js/jquery.dataTables.js b/media/js/jquery.dataTables.js
index b13d9c9e..cc3cae4e 100644
--- a/media/js/jquery.dataTables.js
+++ b/media/js/jquery.dataTables.js
@@ -2393,11 +2393,13 @@
 		}
 		else
 		{
+			var invalidated = _fnBuildSearchArray( oSettings, 1 );
+	
 			/*
 			 * We are starting a new search or the new search string is smaller
 			 * then the old one (i.e. delete). Search from the master array
 			 */
-			if ( oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length ||
+			if ( invalidated || oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length ||
 				   oPrevSearch.sSearch.length > sInput.length || iForce == 1 ||
 				   sInput.indexOf(oPrevSearch.sSearch) !== 0 )
 			{
@@ -2450,22 +2452,27 @@
 	{
 		var searchData = [];
 		var i, ien, rows;
+		var wasInvalidated = false;
 	
 		if ( !settings.oFeatures.bServerSide ) {
 			// Resolve any invalidated rows
-			_fnFilterData( settings );
+			wasInvalidated = _fnFilterData( settings );
 	
-			// Build the search array from the display arrays
-			rows = master===1 ?
-				settings.aiDisplayMaster :
-				settings.aiDisplay;
+			if ( wasInvalidated ) {
+				// Build the search array from the display arrays
+				rows = master===1 ?
+					settings.aiDisplayMaster :
+					settings.aiDisplay;
 	
-			for ( i=0, ien=rows.length ; i<ien ; i++ ) {
-				searchData.push( settings.aoData[ rows[i] ]._aFilterData.join('  ') );
+				for ( i=0, ien=rows.length ; i<ien ; i++ ) {
+					searchData.push( settings.aoData[ rows[i] ]._aFilterData.join('  ') );
+				}
+	
+				settings.asDataSearch = searchData;
 			}
-	
-			settings.asDataSearch = searchData;
 		}
+	
+		return wasInvalidated;
 	}
 	
 	
@@ -2520,6 +2527,7 @@
 		var column;
 		var i, j, ien, jen, filterData, cellData, row;
 		var fomatters = DataTable.ext.ofnSearch;
+		var wasInvalidated = false;
 	
 		for ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
 			row = settings.aoData[i];
@@ -2553,8 +2561,11 @@
 				}
 	
 				row._aFilterData = filterData;
+				wasInvalidated = true;
 			}
 		}
+	
+		return wasInvalidated;
 	}
 	
 	/**