public boolean load( int type,BitBuffer bitBuffer, TileFeature tileMap, TileFeatureArg prevArg, boolean save ) {
        // Check if the previous coords last coordinate can be used as reference.
        if ( prevArg != null ) {
            // Use previous feature's last coordinate as reference.
            latitude = ((CoordsArg)prevArg).getEndLat();
            longitude = ((CoordsArg)prevArg).getEndLon();
        }
        else {
            latitude = 0;
            longitude = 0;
        }
        
        // Write the number of coordinates.
        int nbrBitsCoordSize = bitBuffer.nextBits( 4 );
        int nbrCoords = bitBuffer.nextBits( nbrBitsCoordSize );
              
        if ( nbrCoords == 0 ) {
            return true;
        }
               
        // Nbr bits needed for start diff.
        int nbrStartDiffBits = bitBuffer.nextBits( 4 );
        // Read startLatDiff.
        int startLatDiff = bitBuffer.nextSignedBits( nbrStartDiffBits );
        // Read startLonDiff.
        int startLonDiff = bitBuffer.nextSignedBits( nbrStartDiffBits );
                
        // Read bitsPerLatDiff.
        int bitsPerLatDiff = bitBuffer.nextBits(4);
        // Read bitsPerLonDiff.
        int bitsPerLonDiff = bitBuffer.nextBits(4);
        
        length = (nbrCoords << 1);        
        iCoords = new IntVector(length);
        
        // Calculate the starting coordinate.
        int prevLat = startLatDiff  + this.latitude;
        int prevLon = startLonDiff  + this.longitude;
        
        iCoords.add(prevLat);
        iCoords.add(prevLon);
        maxLat = minLat = prevLat;
        maxLon = minLon = prevLon;
        
        // Read the rest of the coords.
        for ( int i = 1; i < nbrCoords; i++ ) {
            // Lat
            int latDiff = bitBuffer.nextSignedBits( bitsPerLatDiff );
            int curLat = latDiff + prevLat;
            
            // Lon
            int lonDiff = bitBuffer.nextSignedBits( bitsPerLonDiff );
            int curLon = lonDiff + prevLon;
            // Update prev coordinates.
            prevLat = curLat;
            prevLon = curLon;
            
            /* Update the max Lat/Lon and min Lat/Lon coordinates */
            if(curLat > maxLat){ 
                maxLat = curLat; 
            } else if(curLat < minLat){ 
                minLat = curLat; 
            }                     
            if(curLon > maxLon){ 
                maxLon = curLon; 
            } else if(curLon < minLon){ 
                minLon = curLon; 
            }
            
            /* Add the coordinates to the vector */            
            iCoords.add(curLat);
            iCoords.add(curLon);
        }
        
        if(save) {          
            tileMap.addArgs(new CoordsArg(type, iCoords, length, maxLat, minLat, maxLon, minLon));
        }
        
        return true;
    }