using 'self' instead of 'this'