public function getAvailableLists()
    {
        if (self::$cache !== null) {
            return array_keys(self::$cache);
        }

        $lists = array();
        foreach (self::$paths as $path) {
            $files = scandir($path);
            foreach ($files as $file) {
                if (substr($file, -7) == '.sqlite') {
                    $name = strtolower(substr($file, 0, -7));
                    if (isset($lists[$name])) {
                        ; /// @TODO: log a warning
                    } else {
                        $lists[$name] = $path . DIRECTORY_SEPARATOR . $file;
                    }
                }
            }
        }

        // Create a regexp pattern for the policy
        // and filter the lists according to that policy.
        $policy = self::compilePolicy(
            explode(' ', $this->parseString('policy', ''))
        );
        $lists = self::filterLists($lists, $policy);

        self::$cache = $lists;
        return array_keys($lists);
    }