Lets have a smart pointer memory management (more C++ natural, than "parent" hierarchy)