Em uma frigideira coloque o azeite e refogue a cebola e o alho juntos. Reserve.
Corte as batatas em rodelas não muito grossas e cozinhe em água e sal até ficarem macias. Reserve.
Dê uma rápida fervura no bacalhau, retire a água e reserve.
Em um pirex coloque a primeira camada de cebola, a segunda de batata e a terceira de bacalhau (para quem gosta, coloque o coentro picado junto).
Regue com o molho bechamel e acrescente a pimenta-do-reino.
Repita as 3 camadas novamente.
Finalize com o bechamel e os queijo por cima para gratinar.
Coloque no forno até que o queijo fique dourado e gratinado.
Derreta a manteiga, acrescente a farinha e mexa até formar um creme. (tudo em fogo baixo para não empelotar).
Acrescente o leite aos pouco e vá mexendo até o molho engrossar por volta de 5 minutos.
Nota: em Portugal coloca-se creme de leite antes dos queijos. Particularmente eu não acho necessário.