v2 with cleanup