Need to do some more brainstorming before any more code refactoring