diff -Naur a/blocks/search/lang/en/block_search.php b/blocks/search/lang/en/block_search.php
--- a/blocks/search/lang/en/block_search.php	2011-01-23 19:04:08.000000000 -0800
+++ b/blocks/search/lang/en/block_search.php	2011-01-23 19:05:25.000000000 -0800
@@ -38,6 +38,7 @@
 $string['enableindexinginmodule'] = 'Allow indexing of the {$a} module';
 $string['enableindexinginblock'] = 'Allow indexing of the {$a} block';
 $string['envforcmdtotextfor'] = 'Environment for {$a} conversion command to text';
+$string['errormbstringindex'] = 'Indexing requires the mbstring extension.';
 $string['go'] = 'Go!';
 $string['handlingfor'] = 'Extra handling for';
 $string['indexbodylimit'] = 'The limit of indexing the body';
diff -Naur a/blocks/search/settings.php b/blocks/search/settings.php
--- a/blocks/search/settings.php	2011-01-23 19:03:50.000000000 -0800
+++ b/blocks/search/settings.php	2011-01-23 19:07:43.000000000 -0800
@@ -5,9 +5,8 @@
 if ($ADMIN->fulltree) {
 
     //Enable file indexing (y/n)
-    $settings->add(new admin_setting_configcheckbox('block_search_enable_file_indexing', get_string('configenablefileindexing', 'block_search'),
-                       get_string('enablefileindexing', 'block_search'), 0, 1, 0));
-
+    $settings->add(new admin_setting_var_configcheckbox('block_search_enable_file_indexing', get_string('configenablefileindexing', 'block_search'),
+                       get_string('enablefileindexing', 'block_search'), 0, 'mbstring_is_available', get_string('errormbstringindex', 'block_search'), 1, 0));
     //file types
     $defaultfiletypes = 'PDF,TXT,HTML,PPT,XML,DOC,HTM';
     $settings->add(new admin_setting_configtext('block_search_filetypes', get_string('configfiletypes', 'block_search'),
diff -Naur a/lib/adminlib.php b/lib/adminlib.php
--- a/lib/adminlib.php	2011-01-23 19:04:30.000000000 -0800
+++ b/lib/adminlib.php	2011-01-23 19:05:39.000000000 -0800
@@ -108,6 +108,7 @@
 /// Add libraries
 require_once($CFG->libdir.'/ddllib.php');
 require_once($CFG->libdir.'/xmlize.php');
+require_once($CFG->libdir.'/searchlib.php');
 
 define('INSECURE_DATAROOT_WARNING', 1);
 define('INSECURE_DATAROOT_ERROR', 2);
@@ -2042,6 +2043,67 @@
 }
 
 /**
+ * Checkbox with callback to determine availability
+ */
+class admin_setting_var_configcheckbox extends admin_setting_configcheckbox {
+
+    var $callback;
+    var $failure;
+    
+    /**
+     * Constructor
+     * @param string $name unique ascii name, either 'mysetting' for settings that in config, or 'myplugin/mysetting' for ones in config_plugins.
+     * @param string $visiblename localised
+     * @param string $description long localised info
+     * @param string $defaultsetting
+     * @param string $callback function
+     * @param string $failure long localised info
+     * @param string $yes value used when checked
+     * @param string $no value used when not checked
+     */
+    public function __construct($name, $visiblename, $description, $defaultsetting, $callback, $failure, $yes='1', $no='0') {
+        parent::__construct($name, $visiblename, $description, $defaultsetting, $yes, $no);
+        $this->callback = $callback;
+        $this->failure = $failure;
+    }
+    
+    function output_html($data, $query='') {
+        $default = $this->get_defaultsetting();
+        if (!is_null($default)) {
+            if ((string)$default === $this->yes) {
+                $defaultinfo = get_string('checkboxyes', 'admin');
+            } else {
+                $defaultinfo = get_string('checkboxno', 'admin');
+            }
+        } else {
+            $defaultinfo = NULL;
+        }
+
+        if ((string)$data === $this->yes) { // convert to strings before comparison
+            $checked = 'checked="checked"';
+        } else {
+            $checked = '';
+        }
+
+	// Test whether this option is enabled
+	$callback = $this->callback;
+	if ($callback($this)) {
+	    $disabled = '';
+	    $failure = '';
+	} else {
+	    $disabled = 'disabled="disabled"';
+	    $failure = $this->failure;
+	}
+
+        return format_admin_setting($this, $this->visiblename,
+                '<div class="form-checkbox defaultsnext" ><input type="hidden" name="'.$this->get_full_name().'" value="'.s($this->no).'" /> '
+                .'<input type="checkbox" id="'.$this->get_id().'" name="'.$this->get_full_name().'" value="'.s($this->yes).'" '.$checked.' '.$disabled.' /></div>',
+                $this->description, true, $failure, $defaultinfo, $query);
+    }
+    
+}
+
+/**
  * Multiple checkboxes, each represents different value, stored in csv format
  *
  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
diff -Naur a/lib/searchlib.php b/lib/searchlib.php
--- a/lib/searchlib.php	2011-01-23 19:04:41.000000000 -0800
+++ b/lib/searchlib.php	2011-01-23 19:07:36.000000000 -0800
@@ -582,3 +582,11 @@
     }
     return array($SQLString, $params);
 }
+
+/**
+ * Function used for admin setting callback
+ * @param $setting admin setting; unused
+ */
+function mbstring_is_available($setting) {
+    return extension_loaded('mbstring');
+}
\ No newline at end of file
