I think the messages are being sent properly in TinkerMessenger, but when I call messenger.receiveMessages(), the vertex is getting messages from the outVertex of their edges regardless of the edge direction. This is due to line 71 of TinkerMessenger (linked below) which calls Edge.vertices(direction).next(), thus getting the first result out of the Vertex iterator. For IN or OUT, this isn't a problem. But for BOTH, following line 124 of TinkerEdge (linked below), the outVertex is always returned first. TinkerMessenger needs to be modified to return the correct vertex (I think it's the one that != this.vertex).