this is damn difficult.