This is yet another huge commit and we are not over. I apoligize for the mess, my laptop's HD died and I had to recover the code and keep working on another computer. I will include all the details of everything from last two commits on the next commit.