#1 #2 #3 model changes

now implements Parcelable
#3 minor changes

to tidy up the code
#2 minor changes

to tidy up the code
#1 minor changes