Index: options.php
===================================================================
--- options.php	(revision 3657)
+++ options.php	(working copy)
@@ -50,13 +50,17 @@
 		foreach ($options as $option) {
 			$option = trim($option);
 			$value = trim(stripslashes($_POST[$option]));
+			$type = trim(stripslashes($_POST['type'][$option]));
 				if( in_array($option, $nonbools) && ( $value == '0' || $value == '') )
 				$value = 'closed';
 
 			if( $option == 'blogdescription' || $option == 'blogname' )
 				if (current_user_can('unfiltered_html') == false)
 					$value = wp_filter_post_kses( $value );
-
+			
+			if ('array' != $type && 'object' != $type)
+				$value = serialize($value);
+			
 			if (update_option($option, $value) ) {
 				$any_changed++;
 			}
@@ -95,11 +99,20 @@
 $options = $wpdb->get_results("SELECT * FROM $wpdb->options ORDER BY option_name");
 
 foreach ($options as $option) :
-	$value = wp_specialchars($option->option_value);
+	$value = maybe_unserialize($option->option_value);
+	$type = gettype($value);
+	
+	if ('array' == $type || 'object' == $type)
+		$value = $option->option_value;
+	
+	$value = wp_specialchars($value);
 	echo "
 <tr>
 	<th scope='row'><label for='$option->option_name'>$option->option_name</label></th>
-	<td><input type='text' name='$option->option_name' id='$option->option_name' size='30' value='" . $value . "' /></td>
+	<td>
+		<input type='text' name='$option->option_name' id='$option->option_name' size='30' value='" . $value . "' />
+		<input type='hidden' name='type[$option->option_name]' id='type[$option->option_name]' size='30' value='" . $type . "' />
+	</td>
 	<td>$option->option_description</td>
 </tr>";
 endforeach;

