implement imonitorfactory and related changes