There are only a couple of things I would like to say: - You might wanna create a new folder `public` / `public_html` (or whatever you want to call it) where you store all your application's public files for the web (javascripts, stylesheets, images, front-end controller). Then you set this folder as your web root so that the rest of your application code remains private. Also, when the PHP module for some reason fails to load, only the front-end controller's code will be exposed. The rest of will remain hidden. - I highly suggest you make use of a namespace based auto loader (e.g. the [PSR-0 autoloader][1]). [1]: http://www.php-fig.org/psr/psr-0/ This way you don't have to keep adding new folders in your auto loader (referring to the long chain of `else if`s for additional folders to check for classes). Instead you declare them via namespaces in your classes, which makes it more efficient and handy. It also prevents clashing of duplicate class names from different namespaces. - Why not merge your `config.php` with `index.php`? They essentially do the same thing; bootstrapping the "framework". - Your controllers are tightly coupled to their dependencies. I suggest you make use of Dependency Injection to couple them loosely. It also makes for easier testing. - Your `Registry` class introduces global state. Which goes against the principles of OOP. --- HTML in your `index.php` bootstrap file is a big no no. <a href="index.php?route=login">Login</a> <a href="index.php?route=register">Register</a> In the MVC pattern all View related logic goes in the View class and HTML in the template. --- In your View's `show()` method you're doing: foreach ($this->vars as $key => $value) { $$key = $value; } Fortunately `extract($this->vars);` gets the job done with less code. :)