internal interface