remove implicits that are not used anymore
make use of Scala's context bounds