based on scala 2.11.1