Heat the oven to 160C/fan 140C/gas 3. Heat the olive oil and butter in a large casserole or frying pan and brown the lamb on all sides. Remove and set aside. Add the onions to the pan and cook for a minute, then add the garlic, spices and seasoning (go easy on the salt as the preserved lemons might make it salty later on) and cook for another minute.
Transfer the onions, garlic, spices and browned lamb shanks to a large roasting tin. Pour over the stock or water. Cover with foil and cook in the oven for 1¾ hours, stirring from time to time and turning the shanks over.