add many things, but not fully tested