fixed #12 #21 #4 rewrite builder