fairly complete example