TODO: split, remove kludges, todos.