support multiple start points, implement branch