remove dependency on signal, provide Close method