add observer, gesture