based on beangle commons 4.0.5