An important problem in communication networks is to be able to efficiently multicast information to a group of network sites. Multicasting reduces the transmission overhead of the network and the time it takes for all the nodes in the subset to receive the information. Recent advances in network speed, switching technology, and the Asynchronous Transfer Mode (ATM) networks have introduced new applications and provided new services which were not feasible before. Today's network applications such as multimedia, video, audio, resource discovery, teleconferencing, distributed/replicated database management can benefit immensely from efficient multicasting techniques. In this paper, we discuss methods of establishing efficient multicasting in a communication network. We discuss an efficient implementation of a widely used multicasting method that produces a solution no greater than twice of an optimal solution. We also present two efficient multicast tree constructions for a general version of the multicasting problem in which a network consists of different classes of nodes.