move generic workflow functionality to base