add storage support
refine merge