> are you saying this PR won't merge until all DeviceCapabilities are refactor? If so, I'm okay, otherwise, please refactor base on current code base.

No, the idea is to merge this as soon as possible. Refactoring the current implementation was turning out to be too difficult to be done incrementally. I found it easier to write a new implementation inspired by the current one.