rough implementation + TODOs added