based on beangle commons 4.1.0