complete ring impl