make everything optional and provide a clear usage example