general merge