pass root object as 'this' as this is more natural
use camel-case for variables and fix ordering of parameters in factory method