Copied Dr. Woodfield's code and added Broadcast and BroadcastVisitor classes