Code fixes in line with suggestions
diff --git a/system/core/Input.php b/system/core/Input.php
index d707fe2..1e21886 100644
--- a/system/core/Input.php
+++ b/system/core/Input.php
@@ -157,19 +157,20 @@
 		{
 			$value = $array[$index];
 		}
-		elseif (($count = preg_match_all('/(?:^[^\[]+)|\[[^]]*\]/', $index, $matches)) > 1)		// Does the index contain array notation
+		elseif (($count = preg_match_all('/(?:^[^\[]+)|\[[^]]*\]/', $index, $matches)) > 1) // Does the index contain array notation
 		{
-			$container = $array;
+			$value = $array;
 			for ($i = 0; $i < $count; $i++)
 			{
 				$key = trim($matches[0][$i], '[]');
-				if($key === '')			// The array notation will return the value as array
+				if($key === '') // Empty notation will return the value as array
 				{
 					break;
 				}
-				if (isset($container[$key]))
+
+				if (isset($value[$key]))
 				{
-					$value = $container = $container[$key];
+					$value = $value[$key];
 				}
 				else
 				{
diff --git a/system/helpers/form_helper.php b/system/helpers/form_helper.php
index 443a06a..e2c0cc4 100644
--- a/system/helpers/form_helper.php
+++ b/system/helpers/form_helper.php
@@ -642,18 +642,13 @@
 	 */
 	function set_value($field = '', $default = '', $is_textarea = FALSE)
 	{
-		if (FALSE !== ($OBJ =& _get_validation_object()) && $OBJ->has_rule($field))
-		{
-			return form_prep($OBJ->set_value($field, $default), $is_textarea);
-		}
-
 		$CI =& get_instance();
-		if (NULL !== ($value = $CI->input->post($field, FALSE)))
-		{
-			return form_prep($value, $is_textarea);
-		}
 
-		return form_prep($default, $is_textarea);
+		$value = (isset($CI->form_validation) && is_object($CI->form_validation) && $CI->form_validation->has_rule($field))
+			? $CI->form_validation->set_value($field, $default)
+			: $CI->input->post($field, FALSE);
+
+		return form_prep($value === NULL ? $default : $value, $is_textarea);
 	}
 }