need to figure out state and concurrency