close #17
close #16
Merge branch 'trunk' into optimize