public function getOrganizedCompilers() {
        if(NULL === $this->orderedCompilers) {
            $depCollection = new DependencyCollection(false);
            $depCollection->setAcceptsDuplicates(false);

            foreach($this->compilers as $compiler) {
                if($compiler instanceof CompilerInterface) {
                    $id = $compiler->getCompilerID();
                    $deps = $compiler->getDependsOnCompilerIDs();
                    if($deps)
                        $depCollection->add($id, $compiler, $deps);
                    else
                        $depCollection->add($id, $compiler);
                }
                elseif($compiler instanceof CompilerFactoryInterface) {
                    $compiler->registerCompilerInstances($depCollection, $this);
                }
            }

            $this->orderedCompilers = $depCollection->getOrderedElements();
        }
        return $this->orderedCompilers;
    }