On Behalf Of 7stud --: # 1) When the Test module isn't included in order to avoid # potential name # clashes of Test's methods with other methods having the same # name, being # able to call all the methods using the syntax: Test.name. # # 2) When the Test module is included in order to avoid having # to to type # the module name in front of the method names and name clashes # aren't a # concern, being able to call all the methods using the syntax: name. do not forget third use of module_function since it's one of the nifty features.. 3) being able to change the module methods (or module "functions" so to speak) independently of the original methods. Remember, module functions are copies of the original, ergo you can just modify the copies... irb(main):050:0> module Test irb(main):051:1> def show irb(main):052:2> puts "This is a new show" irb(main):053:2> end irb(main):054:1> def f irb(main):055:2> puts "This is a new goodbye" irb(main):056:2> end irb(main):057:1> end => nil let's test the original first... irb(main):058:0> Test.show testing => nil irb(main):059:0> Test.f goodbye => nil ok, no change in original now, see the change of the copy... irb(main):060:0> show This is a new show => nil irb(main):061:0> f This is a new goodbye => nil kind regards -botp