Using information about the channel at the transmitter can improve the performance of multi-input multi-output (MIMO) communication systems. When perfect channel state information (CSI) is available, data can be multiplexed and optimized over independent spatial channels. When the available channel information is imperfect or partial, crosstalk between the spatial channels is inevitable complicating the design since the performance of the spatial streams has to be considered jointly. In this paper an efficient algorithm for bit and power loading on the spatial channels is presented. Focus is on maximizing the data rate at fixed bit error rate and reasonable computational complexity.