nitpick: sometime you use self.respond_to? and sometimes without