Preheat the oven to 200 C / Gas 6. Grease an ovenproof casserole dish.
Cut fish into large pieces and put them in a pan. Pour over milk. Bring slowly to the boil, cover and remove from heat. Poach for 10 minutes.
Melt 30g (1 oz) butter in a frying pan and cook onion for 5 to 7 minutes until soft but not brown. Add garlic and cook for another minute.
Lift fish from milk and set aside. Reserve the milk. Grate lemon rind and squeeze juice.
Add flour to the onions and cook and stir for 1 minute. Take off the heat, add reserved milk and whisk until smooth. Return to heat and cook for 3 minutes. Gradually add cream, bring to the boil and cook for 1 to 2 minutes.
Remove from the heat, allow to cool slightly and stir in mayonnaise, gherkin, herbs, lemon rind and juice. Mix thoroughly.
Arrange the fish in the prepared ovenproof dish and cover with the sauce.
Boil the potatoes in a saucepan with lightly salted water for 10 to 12 minutes, until almost tender. Drain well and grate. Melt the remaining butter and mix into the potatoes. Season to taste.
Spoon potatoes over the fish. (If you want to serve the dish later, you can chill in the fridge at this point for up to 8 hours).
Bake in the preheated oven for 30 to 35 minutes. (Allow extra 10 to 15 minutes of cooking time, if you had the dish in the fridge first.)