add invokeLater method