public function getSource($sourceData)
    {
        if (is_array($sourceData)) {
            $sourceId = $sourceData['gso_id_source'];
        } else {
            $sourceId   = $sourceData;
            $sourceData = false;
        }

        if (! isset($this->_sources[$sourceId])) {
            if (! $sourceData) {

                $sourceData = $this->db->fetchRow("SELECT * FROM gems__sources WHERE gso_id_source = ?", $sourceId);
            }

            if (! isset($sourceData['gso_ls_class'])) {
                throw new \Gems_Exception_Coding('Missing source class for source ID: ' . $sourceId);
            }

            $this->_sources[$sourceId] = $this->_loadClass('source_' . $sourceData['gso_ls_class'], true, array($sourceData, $this->db));
        }

        return $this->_sources[$sourceId];
    }