use boost signals
refactoring