added smart-pointer