improve design #3