internal methods