use different message structs
move code to pool.go