@cpelley you seem to only have picked up on one point that I raised with my previously suggested refactor i.e. making sure to copy the coordinate.

My other point was that it is possible for a scalar coordinate to be an `AuxCoord`. If you promote such a scalar coordinate as the current implementation stands, then the followgin will happen:
```
>>> import iris
>>> cube = iris.cube.Cube(None)
>>> coord = iris.coords.AuxCoord(None, 'latitude')
>>> cube.add_aux_coord(coord)
>>> print cube
unknown / (unknown)                 (scalar cube)
     Scalar coordinates:
          latitude: None
>>> from iris.util import newaxis
>>> newaxis(cube, 'latitude')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/net/home/h05/itwl/projects/git/iris/lib/iris/util.py", line 1075, in newaxis
    new_cube.add_dim_coord(coord.copy(), coord_dims)
  File "/net/home/h05/itwl/projects/git/iris/lib/iris/cube.py", line 800, in add_dim_coord
    self._add_unique_dim_coord(dim_coord, data_dim)
  File "/net/home/h05/itwl/projects/git/iris/lib/iris/cube.py", line 804, in _add_unique_dim_coord
    raise ValueError('The dim_coord may not be an AuxCoord instance.')
ValueError: The dim_coord may not be an AuxCoord instance.
```
My suggestion (as before) is:
```
for coord in src_cube.aux_coords:
    if scalar_coord == coord:
        dim_coord = iris.coords.AuxCoord.from_coord(coord)
        new_cube.add_dim_coord(dim_coord, 0)
    else:
        dims = np.array(src_cube.coord_dims(coord)) + 1
        new_cube.add_aux_coord(coord.copy(), dims)
```