Initial commit. Overall code structure will most likely change.