example of how a simple implementation can get complicated by changing requirements a couple of times