almost fully working...