Added new example, made more semantic, used explicit protocols