added extensive example