better dealings with error and optional components