added isValid and canUse to the the interface