public function getTables()
    {
        if (!$this->_allTablesFetched) { // Fetch only once
            $tables = $this->getTableNames();
            // Fetch missing tables
            foreach ($tables as $table) {
                $this->getTable($table); // Discard result, still available in cache
            }
            // Sort cache
            ksort($this->_tables);
            // Set flag for subsequent invocations
            $this->_allTablesFetched = true;
        }
        return $this->_tables;
    }