basic implementations almost ready