QoS-aware service composition is the generation of a business process to fulfill functional goals and optimize the QoS criteria at the same time. People may focus on the optimization of a single QoS criterion or a set of QoS criteria. We find that though many composition algorithms can get the optimal QoS values, the solutions obtained can possibly contain redundant services, the removal of which does not worsen the QoS value of the solution. In the literatures using Web Service Challenge (WSC) open data sets, the removable services can be over 30% of the services in the solutions. This common problem has been ignored so far. The fundamental reason is that execution cost is not one of the criteria to optimize. Even in the cases when execution costs are not explicitly given for each service, we are still motivated to reduce the number of services in the final solution by assuming each service takes unit cost. In this paper, we study the redundancy removal problem to further optimize the QoS optimal solutions obtained by QoS-aware service composition algorithms. We model the redundancy removal problem as an integer programming problem. Though solvable using a standard solver, we present an algorithm to solve the problem in this specific context and it proves to have better performance than a standard integer programming solver. We also present the results of our data experiments.