update TODO: make ktap reentrant