wrapping wth invokeLater