added capture variable self