merge impl