With faster delivery times, fewer carrier bags and most delivering almost the full complement of 33 items, the standard of online grocery retailing has improved to such a degree it was difficult to identify an outright winner in the latest The Grocer 33 Online survey.

Ocado's chances of winning the quarterly online delivery survey again were scuppered by its £6 delivery charge - £1 more expensive than last time. Tesco, despite charging almost as much at £5.99, just pipped Ocado to the post thanks mainly to the quickest log-in time, next-day delivery, almost full basket, joint lowest substitutions and second-lowest basket price.

But it was a close call and all have significantly raised their games this time, particularly when it comes to plastic bag use. Forty one were used in total compared with 48 last time.

The message that there's no need to pack just one or two items in each bag appears to be getting through - at least to Waitrose, which once again used just five bags, and Ocado and Tesco, which lowered their totals by four and an impressive nine bags respectively. Tesco helped keep its total low by packing the products in plastic crates, which the driver took back with him.

However, Asda, which delivered 14 bags in the previous survey, put on a poor show again. Our Asda.com shopper counted a total of 15 bags, many containing one or two items. The retailer fared better when it came to delivery times, offering next-day delivery, like Ocado and Tesco. Indeed, only Waitrose and Sainsbury's failed to guarantee a next-day delivery.

All five of the deliveries generally arrived within the specified time slots, an improvement from the last survey, though the Sainsbury's driver turned up 15 minutes early with no warning.

It was also thumbs up all round for the receipts, which were all 100% accurate. As for delivery charges, other than Tesco's, they remain unchanged, with Asda still providing the cheapest rate at £4.75.

The retailers delivered 158 products in total - exactly the same number as last time. Asda delivered 32 items and our shopper spent a good while scouring the website for the long French baguette - but to no avail.

It substituted the beef braising steak with two smaller packs of sliced braising steak coming to an equivalent weight.

Ocado also provided 32 items but at some point forgot to add the Kleenex tissues to the delivery, despite our shopper paying for them. A Waitrose own label chicken curry was substituted for the Birds Eye equivalent, which was not stocked.

A sizeable five substitutions were made in the Sainsbury's order, including chicken liver pâté for Brussels pâté, two packs of thin beef braising steak for the larger variety, Sainsbury's normal own label cornflakes for its Basics kind, own label sausages for the Wall's brand and Birds Eye beef curry for the Birds Eye chicken curry.

After the driver had departed, our shopper noticed the glass strawberry jam jar was damaged.

Our chocoholic Tesco shopper was disappointed to find the 250g Cadbury Dairy Milk was not stocked. The retailer also delivered a stonebaked loaf instead of the baguette.

With three out-of-stock items, Waitrose made three substitutions. These included Waitrose own label sausages for the Wall's variety, bagged new potatoes for the loose kind and a 400g Cadbury Dairy Milk for the requested 250g variant.

Our online shoppers were impressed by the cheeriness and professionalism of the drivers. The Ocado driver had delivered to our shopper before and carried her shopping into the house because she had an injured foot.

This quarter's survey provided some comedy value too. The arrival of the Sainsbury's driver created a chaotic scene as a black spaniel dashed through our shopper's doorway as he let the driver in. The delivery driver instantly leapt into action and helped our shopper chase the dog from the house.

All the retailers stepped up to the plate this time - but that's what I call real customer service.