change to block instead of returning channel