public function getList()
    {
        $modules = &gplcart_static('module.list');

        if (isset($modules)) {
            return $modules;
        }

        $installed = $this->getInstalled();

        $modules = array();

        foreach ($this->scan() as $module_id => $info) {
            $modules[$module_id] = $this->prepareInfo($module_id, $info, $installed);
        }

        gplcart_array_sort($modules);

        return $modules;
    }