diff --git a/lib/Doctrine/Hydrate.php b/lib/Doctrine/Hydrate.php
index 695e6c4c096d972700e4de7b3cb109ee0734607a..9f1976937130a5cab537bc5393160759e2aa962e 100644
--- a/lib/Doctrine/Hydrate.php
+++ b/lib/Doctrine/Hydrate.php
@@ -273,112 +273,82 @@ abstract class Doctrine_Hydrate extends Doctrine_Access {
         if($this->aggregate) 
             return $stmt->fetchAll(PDO::FETCH_ASSOC);
 
-        switch(count($this->tables)):
-            case 0:
-                throw new Doctrine_Exception("No tables selected");
-            break;
-
-            case 1:
-                $keys  = array_keys($this->tables);
-
-                $name  = $this->tables[$keys[0]]->getComponentName();
-
+        if(count($this->tables) == 0)
+            throw new Doctrine_Exception("No tables selected");
 
-                while($data = $stmt->fetch(PDO::FETCH_ASSOC)):
+        $keys  = array_keys($this->tables);
+        $root  = $keys[0];
 
-                    foreach($data as $key => $value):
-                        $e = explode("__",$key);
-                        if(count($e) > 1) {
+        $previd = array();
 
-                            $data[end($e)] = $value;
-                        } else {
-                            $data[$e[0]] = $value;
-                        }
-                        unset($data[$key]);
-                    endforeach;
-                    $this->data[$name][] = $data;
-                endwhile;
+        $coll        = $this->getCollection($root);
+        $prev[$root] = $coll;
 
 
-                return $this->getCollection($keys[0]);
-            break;
-
-            default:
+        if($this->aggregate)
+            $return = Doctrine::FETCH_ARRAY;
 
-                $keys  = array_keys($this->tables);
-                $root  = $keys[0];
+        $array = $this->parseData($stmt);
 
-                $previd = array();
 
-                $coll        = $this->getCollection($root);
-                $prev[$root] = $coll;
-
-
-                if($this->aggregate)
-                    $return = Doctrine::FETCH_ARRAY;
-
-                $array = $this->parseData($stmt);
-
-
-                if($return == Doctrine::FETCH_ARRAY)
-                    return $array;
+        if($return == Doctrine::FETCH_ARRAY)
+            return $array;
                 
 
 
-                foreach($array as $data) {
-                    /**
-                     * remove duplicated data rows and map data into objects
-                     */
-                    foreach($data as $key => $row) {
-                        if(empty($row))
-                            continue;
+        foreach($array as $data) {
+            /**
+             * remove duplicated data rows and map data into objects
+             */
+            foreach($data as $key => $row) {
+                if(empty($row))
+                    continue;
 
-                        $ids     = $this->tables[$key]->getIdentifier();
-                        $name    = $key;
+                $ids     = $this->tables[$key]->getIdentifier();
+                $name    = $key;
 
-                        if($this->isIdentifiable($row, $ids)) {
+                if($this->isIdentifiable($row, $ids)) {
 
-                            $prev = $this->initRelated($prev, $name);
-                            continue;
-                        }
+                    $prev = $this->initRelated($prev, $name);
+                    continue;
+                }
 
 
-                        if( ! isset($previd[$name]))
+                if( ! isset($previd[$name]))
                             $previd[$name] = array();
 
-                        if($previd[$name] !== $row) {
-                            // set internal data
-
-                            $this->tables[$name]->setData($row);
+                if($previd[$name] !== $row) {
+                        // set internal data
 
-                            // initialize a new record
-                            $record = $this->tables[$name]->getRecord();
+                        $this->tables[$name]->setData($row);
 
+                        // initialize a new record
+                        $record = $this->tables[$name]->getRecord();
 
-                            if($name == $root) {
 
-                                // add record into root collection
-                                $coll->add($record);
-                                unset($previd);
+                    if($name == $root) {
 
-                            } else {
-                                $prev = $this->addRelated($prev, $name, $record);
-                            }
+                        // add record into root collection
+                        $coll->add($record);
+                        unset($previd);
 
-                            // following statement is needed to ensure that mappings 
-                            // are being done properly when the result set doesn't 
-                            // contain the rows in 'right order'
-
-                            if($prev[$name] !== $record)
-                                $prev[$name] = $record;
-                        }
-
-                        $previd[$name] = $row;
+                    } else {
+                        $prev = $this->addRelated($prev, $name, $record);
                     }
+    
+                    // following statement is needed to ensure that mappings
+                    // are being done properly when the result set doesn't
+                    // contain the rows in 'right order'
+    
+                    if($prev[$name] !== $record)
+                        $prev[$name] = $record;
                 }
 
-                return $coll;
-        endswitch;
+                $previd[$name] = $row;
+            }
+        }
+
+        return $coll;
     }
     /** 
      * initRelation