return false, not throw