improve signal implementation