add programmatic usage