This recipe comes from Mexican Kitchen by Rick Bayless.
1 pound (about 2 1/2 cups) dry beans (kidney, pinto, pink, kidney or navy)
3 T. vegetable oil
1 medium white onion, diced
1 1/2 teaspoons salt
(I like to add a ham bone with meat to give it extra flavor - and then I don't add the oil because it comes from the meat).
Directions: Rinse the beans. Then in large pot (5-6 qt.) and the oil and warm over medium heat. Add the onion and cook, stirring regularly, until deep golden, about 10 minutes (this gives a roasty flavor to the beans). Add the beans, measure 2 qts. of water, and remove any beans that float.
Bring to boil, then reduce the heat to medium-low and simmer partially covered, until the beans are thoroughly tender about 2 hours (there should be no chalkiness at all when you break the bean open). Hint: mine took longer to cook than the recommended two hours, it depends on the freshness of the beans.
You need to gently stir the beans regularly and add water as necessary to keep the liquid a generous 1/2 inch above the level of the beans.
Finally when beans are done, season with salt and simmer another 10-15 minutes for the beans to asorb the seasoning.