Quick Recipe Version (TL;DR)
Quick Ingredients
- 1.2 kg floury potatoes, peeled and chopped
- 800 g mixed fish: 300 g cod, 250 g smoked haddock, 250 g salmon (skinless, boneless)
- 600 ml whole milk (for poaching and sauce)
- 110 g unsalted butter (60 g for mash, 50 g for sauce)
- 50–100 ml whole milk or cream for mash
- 50 g plain flour
- 2–3 tbsp chopped fresh parsley
- 100 g mature cheddar, grated (75 g for mash, 25 g on top)
- 100 g frozen peas (optional)
- 1 small onion, 1 bay leaf, 6 peppercorns
- 1 tsp Dijon mustard, 1 tbsp lemon juice, salt and black pepper
Do This
- 1. Heat oven to 200°C / 180°C fan / 400°F. Boil potatoes in salted water for 15–20 minutes until tender.
- 2. Meanwhile, gently poach fish in 600 ml milk with onion, bay leaf, and peppercorns for 6–8 minutes. Lift out fish, flake into chunks, and reserve strained milk.
- 3. Make a roux with 50 g butter and 50 g flour, then whisk in the warm reserved milk to make a smooth white sauce. Add mustard, lemon juice, parsley, peas (if using), salt, and pepper.
- 4. Fold flaked fish into the sauce and spread into a 2-litre baking dish.
- 5. Drain potatoes and mash with 60 g butter and 50–100 ml milk or cream. Season well, then stir in 75 g cheddar.
- 6. Spoon or pipe mash over the fish, rough up the top, sprinkle with remaining cheddar, and bake 25–30 minutes until golden and bubbling. Rest 10 minutes before serving.
Why You’ll Love This Recipe
- A truly classic British comfort dish with a luxurious mix of cod, smoked haddock, and salmon.
- Rich, homemade parsley-white sauce that feels restaurant-worthy but is very achievable at home.
- Golden, cheesy mashed potato topping that turns irresistibly crisp at the edges and creamy underneath.
- Great for feeding a family or guests; can be made ahead and baked when needed.
Grocery List
- Produce: Floury potatoes, 1 small onion, fresh parsley, optional fresh chives, optional lemon.
- Dairy: Whole milk, unsalted butter, mature cheddar cheese, optional double cream.
- Pantry: Plain flour, Dijon mustard, frozen peas (optional), bay leaf, whole peppercorns, salt, black pepper, olive oil or extra butter for greasing.
Full Ingredients
For the Potato Topping
- 1.2 kg floury potatoes (such as Maris Piper, King Edward, or Russet), peeled and cut into chunks
- 60 g unsalted butter
- 50–100 ml whole milk or double cream (start with 50 ml and add as needed)
- 75 g mature cheddar, grated
- Salt and freshly ground black pepper, to taste
For the Fish and Poaching Milk
- 300 g cod fillet, skinless and boneless
- 250 g smoked haddock fillet, skinless and boneless
- 250 g salmon fillet, skinless and boneless
- 600 ml whole milk
- 1 small onion, peeled and halved
- 1 bay leaf
- 6 whole black peppercorns
- Pinch of salt
For the Parsley-White Sauce and Filling
- 50 g unsalted butter
- 50 g plain flour
- 1 tsp Dijon mustard (optional but recommended)
- 1 tbsp fresh lemon juice (about half a lemon), or to taste
- 2–3 tbsp finely chopped fresh flat-leaf parsley
- 1 tbsp finely chopped fresh chives (optional)
- 100 g frozen peas (no need to defrost)
- Salt and freshly ground black pepper, to taste
To Finish
- 25 g mature cheddar, grated (for sprinkling on top)
- Olive oil or a little butter, for greasing the baking dish
- Extra chopped parsley, for garnish (optional)

Step-by-Step Instructions
Step 1: Preheat the oven and start the potatoes
Preheat your oven to 200°C / 180°C fan / 400°F. Lightly grease a 2-litre ovenproof baking dish (about 30 x 20 cm) with a little olive oil or butter.
Place the peeled, chopped potatoes into a large saucepan and cover with cold water by about 2 cm. Add a good pinch of salt. Bring to the boil over high heat, then reduce the heat to a gentle boil and cook for 15–20 minutes, until the potatoes are very tender when pierced with a knife. While the potatoes cook, move on to poaching the fish.
Step 2: Poach the fish in milk
Cut the cod, smoked haddock, and salmon into large bite-sized pieces (about 3–4 cm). Place the fish in a wide, deep frying pan or shallow saucepan in an even layer. Pour over the 600 ml whole milk. Add the halved onion, bay leaf, whole peppercorns, and a small pinch of salt.
Set the pan over medium heat. As soon as small bubbles appear around the edges, reduce the heat to low and gently poach the fish for 6–8 minutes. The fish should be just cooked and starting to flake, but not falling apart. Use a slotted spoon to carefully lift the fish into a bowl, leaving as many large flakes intact as possible. Discard any skin or bones if you spot them. Strain the poaching milk through a fine sieve into a jug and discard the onion, bay leaf, and peppercorns. Set the milk aside; this will form the base of your parsley-white sauce.
Step 3: Make the parsley-white sauce
In a medium saucepan, melt 50 g butter over medium heat. Once melted and slightly foaming, add the 50 g plain flour. Stir continuously with a wooden spoon or whisk for 1–2 minutes to form a smooth paste (roux); it should look sandy and smell slightly nutty but not browned.
Gradually add the warm reserved poaching milk, a ladleful at a time, whisking constantly to avoid lumps. Continue whisking and adding milk until it is all incorporated. Bring the sauce to a gentle simmer and cook for 3–4 minutes, stirring often, until it has thickened to a smooth, velvety consistency that lightly coats the back of a spoon.
Stir in the Dijon mustard (if using), lemon juice, chopped parsley, and chives (if using). Taste and season generously with salt and freshly ground black pepper. The sauce should be well seasoned and full of flavour, as it will be spread through all the fish. Stir in the frozen peas; they will start to thaw in the hot sauce. Remove from the heat.
Step 4: Combine the fish filling
Tip the poached fish into the parsley-white sauce. Using a spatula or large spoon, gently fold the fish through the sauce. Try not to break the pieces up too much; a mix of large flakes and smaller bits gives the fish pie a lovely texture.
Pour or spoon the fish filling into the greased baking dish, spreading it into an even layer. If any thick edges of fish are sticking out, tuck them under so they do not dry out in the oven. Set the dish aside while you finish the mashed potato topping.
Step 5: Make the cheesy mashed potato
By now, your potatoes should be tender. Drain them well in a colander and let them steam for a minute to drive off excess moisture. Return the potatoes to the warm saucepan.
Add 60 g butter and 50 ml of the milk or cream. Mash thoroughly until smooth and fluffy, adding more milk or cream a splash at a time if needed to reach a soft, spreadable consistency. Do not make it too loose or it will sink into the filling.
Season generously with salt and freshly ground black pepper. Stir in 75 g grated cheddar until melted and evenly distributed. Taste and adjust seasoning if needed; the mash should be well seasoned and richly cheesy.
Step 6: Top and bake the pie
Spoon the cheesy mash over the fish filling in dollops, starting from the edges and working towards the centre. Once the surface is covered, use the back of a spoon or a fork to gently spread and seal the potato right to the edges of the dish. This helps prevent the filling from bubbling up and spilling over.
Use a fork to lightly rough up the surface of the mash; the ridges will crisp and brown beautifully in the oven. Sprinkle the remaining 25 g grated cheddar evenly over the top.
Place the dish on a baking tray (in case of any bubbling over) and bake in the preheated oven for 25–30 minutes, until the top is golden and slightly crisp and the filling is bubbling around the edges.
Step 7: Rest and serve
Once baked, remove the fish pie from the oven and let it rest for about 10 minutes. This allows the filling to settle slightly, making it easier to serve neat portions.
Scatter a little extra chopped parsley over the top for freshness, if you like. Serve generous scoops of fish pie with simple green vegetables such as steamed peas, green beans, or buttered cabbage for a classic British comfort meal.
Pro Tips
- Do not overcook the fish: The fish finishes cooking in the oven, so keep the poaching gentle and brief to avoid dry, crumbly fish.
- Season in layers: Lightly season the milk, the sauce, and the mash. This ensures every bite is flavourful without being overly salty.
- Keep fish in big flakes: Fold the fish into the sauce very gently. Larger chunks give the finished pie a luxurious, restaurant-style texture.
- Floury potatoes are essential: Waxy potatoes will make gluey mash. Choose floury varieties like Maris Piper, King Edward, or Russet for a fluffy topping.
- Prevent boil-overs: Baking the dish on a tray catches any bubbly overflow and keeps your oven clean.
Variations
- Add boiled eggs: For an old-fashioned British touch, nestle 2–3 hard-boiled eggs (quartered) into the fish filling before adding the mash.
- All-smoked version: Use more smoked haddock and omit the salmon for a deeper, smokier flavour. Just balance with a little extra lemon juice and parsley to keep it bright.
- Extra veg boost: Stir in lightly cooked chopped leeks, spinach, or finely diced carrots along with the peas for a more vegetable-packed pie.
Storage & Make-Ahead
To make ahead, assemble the fish pie up to the point of baking, then let it cool completely, cover tightly, and refrigerate for up to 24 hours. Bake from chilled at 190°C / 170°C fan / 375°F for 35–40 minutes, until piping hot in the centre and golden on top. Leftover cooked fish pie keeps well in the fridge for up to 2 days; reheat individual portions in a moderate oven or microwave until steaming hot all the way through. For freezing, assemble but do not bake, cool completely, wrap well, and freeze for up to 2 months. Thaw overnight in the fridge before baking as above, adding 5–10 extra minutes if needed.
Nutrition (per serving)
Approximate values per serving (1 of 6): about 580 kcal; 34 g protein; 30 g fat; 12 g saturated fat; 42 g carbohydrates; 4 g fibre; 7 g sugar; 1.4 g salt. Actual values will vary depending on exact ingredients and brands used.
