@Override
    public int compareTo(Version o)
    {
        if (o == null)
        {
            throw new NullPointerException();
        }
        
        if (super.compareTo(o) != 0)
        {
            return super.compareTo(o);
        }
        
        if (!(o instanceof BigVersion))
        {
            // TODO Is this necessary?
        }
        
        if (patch != ((BigVersion) o).patch)
        {
            return patch < ((BigVersion) o).patch ? -1 : 1;
        }
        
        if (build != ((BigVersion) o).build)
        {
            return build < ((BigVersion) o).build ? -1 : 1;
        }
        
        return 0;
    }