public void makeReactions(final SquirmChemistry chemistry, int n_x, int n_y, SquirmCellSlot cell_grid[][]) {
        // collect the unbonded neighbours of this cell (up to 8)
        final Vector<SquirmCell> neighbours = new Vector<SquirmCell>();
        int tx, ty;
        SquirmCellSlot slot;
        SquirmCell cell;
        for (int i = 0; i < 8; i++) {
            tx = x + EIGHT_x[i];
            ty = y + EIGHT_y[i];
            if (tx >= 0 && tx < n_x && ty >= 0 && ty < n_y) {
                slot = cell_grid[tx][ty];
                // does this cell slot contain a cell?
                if (!slot.queryEmpty()) {
                    cell = slot.getOccupant();
                    // is this cell unbonded with us?                    
                    if (!bonds.contains(cell)) {                        
                        neighbours.addElement(cell);
                    }
                }
            }
        }

        // see if this situation causes a reaction in the current chemistry
        chemistry.react(cell_grid, this, neighbours);
    }