use this.type to work around Scala 2.9.2