state parameter should be non-optional