manually manage empty value state