break down very complex save method - should probably move all of the indexing to a concern