To reduce the amount of code duplication, I think it makes sense to make a BaseCD class has all the code in common between CD and PCD.