merge
better implementation
better implementation