start to merge two approaches
merge two approaches