public function listClasses($classType, $paths, $nameMethod = 'getName')
    {
        $results   = array();
        
        foreach ($paths as $prefix => $path) {
            $parts = explode('_', $prefix, 2);
            if ($name = reset($parts)) {
                $name = ' (' . $name . ')';
            }
            
            try {
                $globIter = new \GlobIterator($path . DIRECTORY_SEPARATOR . '*.php');
            } catch (\RuntimeException $e) {
                // We skip invalid dirs
                continue;
            }
            
            foreach($globIter as $fileinfo) {
                $filename    = $fileinfo->getFilename();
                $className   = $prefix . substr($filename, 0, -4);
                $classNsName = '\\' . strtr($className, '_', '\\');

                // Take care of double definitions
                if (isset($results[$className])) {
                    continue;
                }
                
                if (! (class_exists($className, false) || class_exists($classNsName, false))) {
                    include($path . DIRECTORY_SEPARATOR . $filename);
                }

                if ((! class_exists($className, false)) && class_exists($classNsName, false)) {
                    $className = $classNsName;
                }
                $class = new $className();

                if ($class instanceof $classType) {
                    if ($class instanceof \MUtil_Registry_TargetInterface) {
                        $this->applySource($class);
                    }

                    $results[$className] = trim($class->$nameMethod()) . $name;
                }
                // \MUtil_Echo::track($eventName);
            }
            
        }
        natcasesort($results);
        return $results;
    }