public void addElement(Object obj) {
        int index = delegate.size();
        delegate.addElement(obj);
        fireIntervalAdded(this, index, index);
        if (Sorted)
            Collections.sort(delegate, new Comparator() {
            public int compare(Object o1, Object o2) {
                
                if (!(o1 instanceof String && o2 instanceof String)) return 1;
                return goodify((String)o1).compareTo(goodify((String)o2));
            }
            
            public String goodify(String x) {
                // No more unix sorting!
                x = x.toLowerCase();
                
                if (Character.isLetterOrDigit(x.charAt(0)))
                    return x;
                
                // Traverse the letters finding the first real comparable letter. 
                int firstGood = 1;
                for(int i = 1; i < x.length(); i++) {
                    if(Character.isLetterOrDigit(x.charAt(i))) {
                        firstGood = i;
                        break;
                    }
                }
                
                return x.substring(firstGood);
            }
        });
    }