Preheat the oven to 180C/350F/Gas 4. Place the pieces of fish in a wide pan, add the quartered onion and bay leaf and pour over 450ml/16floz of the milk.
Bring the milk up to the boil, reduce the heat and simmer for about eight minutes, or until the fish is just cooked.
Using a fish slice or slotted spoon, carefully remove the fish from the milk and place it on a plate.
Using a fork, flake the fish into chunky pieces. Spread the pieces out in an ovenproof dish (about 22cm/9in square) or into smaller individual dishes.
Pour the poaching milk through a sieve into a jug and set aside.
Place the potatoes into a saucepan and cover with water and a pinch of salt.
Bring the potatoes to the boil and simmer for 10 minutes.
Pour out nearly all of the water, leaving about 4cm/1½in of water, and continue to cook for about 20 minutes on a very low heat.
Test the potatoes with a skewer to see if they are tender - if they aren't soft, then return to the heat for a further five minutes.
When the potatoes are soft, drain any remaining water and peel them, using a tea towel to hold them if they're too hot to handle.
Place the potatoes in a bowl and mash until smooth, adding the butter as you mash.
Place the remaining cold milk (NOT the set-aside poaching milk) into a saucepan and bring to a simmer. Add this milk to the potatoes and beat in. Season with salt and freshly ground black pepper.
Set the potato topping aside and bring a small pan of water to a gentle boil to boil the eggs. Carefully lower the eggs into the water and boil for eight minutes.
Drain and cool the eggs under cold water. Peel the eggs, cut into chunks of about 2cm/¾in and place on top of the fish. Sprinkle with the chopped parsley.
For the white sauce, melt the butter in a pan, stir in the flour and cook for one minute over a moderate heat.
Gradually add all the set-aside fish poaching milk, whisking all the time, and simmer for 1-2 minutes, stirring, until you have a smooth, slightly thick sauce.
Remove the sauce from the heat, season with salt, freshly ground black pepper and nutmeg. Pour the sauce over the fish and eggs in the dish.
Arrange the mashed potato over the top of the sauce, score with a fork to make a pretty pattern and sprinkle with the grated cheese.
Place in the oven and cook for about 30 minutes, until bubbling and golden-brown on top. Serve straightaway.