rewrote the proxy class to use the sibling function and a custom iterator