private boolean _cleanupSpikes() {
    boolean bModified = false;
    for (int path = m_shape.getFirstPath(m_geometry); path != -1; ) {
      int vertex = m_shape.getFirstVertex(path);
      for (int vindex = 0, n = m_shape.getPathSize(path); vindex < n && n > 1; ) {
        int prev = m_shape.getPrevVertex(vertex);
        int next = m_shape.getNextVertex(vertex);
        if (m_shape.isEqualXY(prev, next)) {
          bModified = true;
          _beforeRemoveVertex(vertex, false);
          m_shape.removeVertex(vertex, true); // not internal, because
          // path is valid at this
          // point
          _beforeRemoveVertex(next, false);
          m_shape.removeVertex(next, true);
          vertex = prev;
          vindex = 0;
          n = m_shape.getPathSize(path);
        } else {
          vertex = next;
          vindex++;
        }
      }

      if (m_shape.getPathSize(path) < 2) {
        int vertexL = m_shape.getFirstVertex(path);
        for (int vindex = 0, n = m_shape.getPathSize(path); vindex < n; vindex++) {
          _beforeRemoveVertex(vertexL, false);
          vertexL = m_shape.getNextVertex(vertexL);
        }

        path = m_shape.removePath(path);
        bModified = true;
      } else path = m_shape.getNextPath(path);
    }

    return bModified;
  }