removed the array_diff comparison in _reindex_segments().  That conditional and use of those functions is probably slower than looping through both arrays, even if someone went crazy with dozens of URI segments.
diff --git a/system/libraries/URI.php b/system/libraries/URI.php
index 8de26f9..aecf051 100644
--- a/system/libraries/URI.php
+++ b/system/libraries/URI.php
@@ -245,30 +245,23 @@
 	 */	

 	function _reindex_segments()

 	{

-		// Is the routed segment array different then the main segment array?

-		// have to compute the diff both ways since PHP returns only values in $arr1 that are not in $arr2.

-		$diff = (array_diff($this->rsegments, $this->segments) != array_diff($this->segments, $this->rsegments)) ? TRUE : FALSE;

-

 		$i = 1;

+

 		foreach ($this->segments as $val)

 		{

 			$this->segments[$i++] = $val;

 		}

+

 		unset($this->segments[0]);

 		

-		if ($diff == FALSE)

+		$i = 1;

+		

+		foreach ($this->rsegments as $val)

 		{

-			$this->rsegments = $this->segments;

+			$this->rsegments[$i++] = $val;

 		}

-		else

-		{

-			$i = 1;

-			foreach ($this->rsegments as $val)

-			{

-				$this->rsegments[$i++] = $val;

-			}

-			unset($this->rsegments[0]);

-		}

+		

+		unset($this->rsegments[0]);

 	}	

 	

 	// --------------------------------------------------------------------

diff --git a/user_guide/changelog.html b/user_guide/changelog.html
index dc3cabc..78a3d98 100644
--- a/user_guide/changelog.html
+++ b/user_guide/changelog.html
@@ -78,6 +78,7 @@
 			<li>Modified xss_clean() to be more intelligent with its handling of URL encoded strings.</li>

 			<li>Added $_SERVER, $_FILES, $_ENV, and $_SESSION to sanitization of globals.</li>

 		    <li>Added a <a href="./helpers/path_helper.html">Path Helper</a>.</li>

+			<li>Simplified _reindex_segments() in the URI class</li>

 		</ul>

 	</li>

 </ul>