Refactor and redesign domains

Lets just keep it for now, Its a one of the finer code! I tested it several time. it works.  Later if we choose to use JodaTime, we'll refactor it.