based on beangle-scala16