First take at strongly-typed request model