In the 3GPP technical specification, OVSF codes are used as channelization codes. The use of OVSF codes can provide variable data rates to flexibly support applications with different bandwidth requirements. Most works in the literature assume that only one signal OVSF code is used to support one connection. This may sometimes waste the scarce wireless bandwidth since the allocated bandwidth will increase exponentially as the spreading factor decreases, i.e., a user may be "over-served". In this paper, we consider the possibility of using multiple OVSF codes to support a connection. We show how using multiple codes can reduce internal fragmentation and external fragmentation of a OVSF code tree. The tradeoff between bandwidth utilization and hardware complexity of a multi-code system is analyzed. The result shows that using 2 or 3 codes will be quite cost-effective. Several multi-code assignment and reassignment strategies, namely random, left-most, crowded-first-space, and crowded-first-code, are proposed based on such environment. Our simulation results show significant increase in code tree utilization and significant reduction in code blocking probability by using the crowded-first-space and crowded-first-code schemes.