inner class functionlity with smart ptr.