protected $keys moved to abstract method getProperties() to ease inheritance development