rewrite blocking decorator to play well with other preconditions