complete refactoring, can now tell the difference between different descriptors