> From: Matthew, Graeme [mailto:Graeme.Matthew / mercer.com] > If I create reader and writer attributes > > eg > attr_reader :code, :name, :telephone > attr_writer :name, :telephone > On accessors: if you define, for example, class Obj attr_accessor :foo end and the object client use obj.foo and obj.foo= extensively, and you later want to add side effects to changing/looking at @foo, you can just get rid of the accessor and go for functions: class Obj #attr_accessor :foo (not needed anymore) def foo call_side_effect(:foo_looked_at) return @foo end def foo=(newFoo) call_side_effect(:foo_changed) @foo = newFoo end end Happily, no client code needs to change. You've transparently changed behaviour, preserving contracts. You are a happy little vegemite. Similarly, for private, just throw private in above the two functions in the last example. You break the client code, but thats the nature of privacy. David, the Other.