object oriented programming faq refactored a bit