Make better api but impl is bad.