refactored internal object creation