add signal functions
add cancellation functions