fix zoom, add API, change logic