move perform into an instance method