Added controller abstraction layer. Break files down into smaller chunks.