In a deep, heavy-based saucepan, melt the butter over medium to low heat.
Turn up the heat slightly and stir in the flour to make a roux. Allow to cook for 1-2 minutes.
Gradually stir the milk and stock into the roux, whisking little bits at a time, making sure to get rid of all the lumps. Bring to the boil, stirring continuously. This will take 5-10 minutes.
Simmer, stirring well for another 5 minutes. During this time keep stirring to ensure it does not catch on the base of the pot. Season to taste.
Serve with cooked pasta of your choice and top with fresh herbs and grated cheese!