private String getLeastLoadedGSNode()
    {
        // Initially assume we have the lowest load
        int minLoad = calculateLoad();
        String minGSNode = getId();

        try {
            for (String node : registry.list()) {
                if (node.equals(id) || !node.substring(0, 2).equals("GS"))
                    continue;

                IGSNode gsNode = (IGSNode) registry.lookup(node);
                int load = gsNode.calculateLoad();

                if (load < minLoad || load <= minLoad && minGSNode.compareTo(node) == -1) {
                    minLoad = load;
                    minGSNode = node;
                }
            }
        } catch (RemoteException e) {
            e.printStackTrace();
        }

        return minGSNode;
    }