abstract create methods