added null handling
added KVO but not done