based on beangle 4.1.0