implement the whole thang