part way through changing the behaviour of the crates controller. In the next iteration the cratesIndex will hold the requested model state. a $watch on this will then update the URL and the model when the requested model state changes to make the model match the request.
Behaviour changes complete. Reloads only happen when crateIndex changes and UI interactions only affect the crateIndex. This is kept seperate from the model itself so that the cratesData factory can tell if the requested crateIndex is different from the index in the model. Also implemented the logic in the cratesData factory such that it won't reload anything it already has. This could be improved event further with more intelligent caching.