You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@toree.apache.org by lr...@apache.org on 2020/08/02 04:34:44 UTC

[incubator-toree] branch master updated: Add support for Spark 3.0 and Scala 2.12 (#179)

This is an automated email from the ASF dual-hosted git repository.

lresende pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-toree.git


The following commit(s) were added to refs/heads/master by this push:
     new 9bc5790  Add support for Spark 3.0 and Scala 2.12 (#179)
9bc5790 is described below

commit 9bc5790af4645d3eeaf7ad273ec456844006b723
Author: Adam Davidson <Ad...@users.noreply.github.com>
AuthorDate: Sun Aug 2 05:34:35 2020 +0100

    Add support for Spark 3.0 and Scala 2.12 (#179)
---
 Makefile                                           |   4 +-
 build.sbt                                          |  21 +-
 .../kernel/protocol/v5/client/Utilities.scala      |   7 +-
 .../scala/examples/ScalaSparkClientUsage.scala     |  14 +-
 .../ClientToHeartbeatSpecForIntegration.scala      |   2 +-
 .../ClientToIOPubSpecForIntegration.scala          |   2 +-
 .../ClientToShellSpecForIntegration.scala          |   2 +-
 .../apache/toree/comm/ClientCommManagerSpec.scala  |   2 +-
 .../apache/toree/comm/ClientCommWriterSpec.scala   |   2 +-
 .../protocol/v5/client/SparkKernelClientSpec.scala |   2 +-
 .../v5/client/socket/HeartbeatClientSpec.scala     |   2 +-
 .../v5/client/socket/IOPubClientSpec.scala         |   4 +-
 .../v5/client/socket/ShellClientSpec.scala         |   2 +-
 .../v5/client/socket/StdinClientSpec.scala         |   2 +-
 .../communication/socket/JeroMQSocketSpec.scala    |   2 +-
 .../socket/ZeroMQSocketRunnableSpec.scala          |   2 +-
 .../communication/utils/OrderedSupportSpec.scala   |   2 +-
 .../org/apache/toree/interpreter/Interpreter.scala |   4 +-
 .../interpreter/broker/BrokerBridgeSpec.scala      |   2 +-
 .../broker/BrokerProcessHandlerSpec.scala          |   2 +-
 .../interpreter/broker/BrokerProcessSpec.scala     |   2 +-
 .../toree/magic/InternalClassLoaderSpec.scala      |   2 +-
 .../org/apache/toree/magic/MagicManagerSpec.scala  |   2 +-
 .../toree/utils/ArgumentParsingSupportSpec.scala   |   2 +-
 .../toree/utils/ConditionalOutputStreamSpec.scala  |   2 +-
 .../toree/utils/DynamicReflectionSupportSpec.scala |   2 +-
 .../apache/toree/utils/MultiOutputStreamSpec.scala |   2 +-
 .../org/apache/toree/utils/TaskManagerSpec.scala   |   8 +-
 .../protocol/v5/handler/CodeCompleteHandler.scala  |   2 +-
 .../protocol/v5/handler/CommCloseHandler.scala     |   4 +-
 .../protocol/v5/handler/CommMsgHandler.scala       |   4 +-
 .../protocol/v5/handler/CommOpenHandler.scala      |   4 +-
 .../v5/handler/ExecuteRequestHandler.scala         |   4 +-
 .../protocol/v5/handler/IsCompleteHandler.scala    |   2 +-
 .../protocol/v5/handler/ShutdownHandler.scala      |   2 +-
 .../kernel/protocol/v5/kernel/Utilities.scala      |   6 +-
 .../protocol/v5/relay/KernelMessageRelay.scala     |   4 +-
 .../apache/toree/magic/builtin/BuiltinLoader.scala |   4 +-
 .../InterpreterActorSpecForIntegration.scala       |   2 +-
 .../apache/toree/comm/KernelCommManagerSpec.scala  |   2 +-
 .../apache/toree/comm/KernelCommWriterSpec.scala   |   2 +-
 .../toree/kernel/api/DisplayMethodsSpec.scala      |   2 +-
 .../org/apache/toree/kernel/api/KernelSpec.scala   |   2 +-
 .../toree/kernel/api/StreamMethodsSpec.scala       |   2 +-
 .../protocol/v5/dispatch/StatusDispatchSpec.scala  |   2 +-
 .../v5/handler/CodeCompleteHandlerSpec.scala       |   2 +-
 .../protocol/v5/handler/CommCloseHandlerSpec.scala |   2 +-
 .../v5/handler/CommInfoRequestHandlerSpec.scala    |   2 +-
 .../protocol/v5/handler/CommMsgHandlerSpec.scala   |   2 +-
 .../protocol/v5/handler/CommOpenHandlerSpec.scala  |   2 +-
 .../v5/handler/ExecuteRequestHandlerSpec.scala     |   2 +-
 .../handler/GenericSocketMessageHandlerSpec.scala  |   2 +-
 .../v5/handler/InputRequestReplyHandlerSpec.scala  |   2 +-
 .../v5/handler/KernelInfoRequestHandlerSpec.scala  |   2 +-
 .../tasks/ExecuteRequestTaskActorSpec.scala        |   2 +-
 .../protocol/v5/kernel/ActorLoaderSpec.scala       |   2 +-
 .../protocol/v5/kernel/socket/HeartbeatSpec.scala  |   2 +-
 .../protocol/v5/kernel/socket/IOPubSpec.scala      |   2 +-
 .../protocol/v5/kernel/socket/ShellSpec.scala      |   2 +-
 .../v5/kernel/socket/SocketConfigSpec.scala        |   4 +-
 .../protocol/v5/kernel/socket/StdinSpec.scala      |   2 +-
 .../kernel/protocol/v5/magic/MagicParserSpec.scala |   2 +-
 .../v5/relay/ExecuteRequestRelaySpec.scala         |   2 +-
 .../protocol/v5/relay/KernelMessageRelaySpec.scala |   2 +-
 .../protocol/v5/stream/KernelInputStreamSpec.scala |   2 +-
 .../protocol/v5/stream/KernelOuputStreamSpec.scala |   2 +-
 .../apache/toree/magic/builtin/AddDepsSpec.scala   |   2 +-
 .../apache/toree/magic/builtin/AddJarSpec.scala    |   2 +-
 .../toree/magic/builtin/BuiltinLoaderSpec.scala    |   2 +-
 .../apache/toree/magic/builtin/DataFrameSpec.scala |   2 +-
 .../org/apache/toree/magic/builtin/HtmlSpec.scala  |   2 +-
 .../toree/magic/builtin/JavaScriptSpec.scala       |   2 +-
 .../apache/toree/magic/builtin/LSMagicSpec.scala   |   2 +-
 .../toree/utils/DataFrameConverterSpec.scala       |  12 +-
 kernel/src/test/scala/test/utils/StackActor.scala  |  12 +-
 .../plugins/dependencies/ClassLoaderHelper.scala   |   6 +-
 .../plugins/dependencies/ClassLoaderHelper.scala   |   6 +-
 .../apache/toree/plugins/PluginManagerSpec.scala   |   4 +-
 .../toree/plugins/PluginMethodResultSpec.scala     |   2 +-
 .../apache/toree/plugins/PluginSearcherSpec.scala  |   2 +-
 .../org/apache/toree/plugins/PluginSpec.scala      |   2 +-
 project/Dependencies.scala                         |   6 +-
 protocol/build.sbt                                 |   1 +
 .../org/apache/toree/comm/CommManagerSpec.scala    |   2 +-
 .../org/apache/toree/comm/CommRegistrarSpec.scala  |   2 +-
 .../org/apache/toree/comm/CommStorageSpec.scala    |   2 +-
 .../org/apache/toree/comm/CommWriterSpec.scala     |   7 +-
 .../toree/kernel/protocol/v5/HeaderSpec.scala      |   7 +-
 .../protocol/v5/content/ClearOutputSpec.scala      |   3 +-
 .../kernel/protocol/v5/content/CommCloseSpec.scala |   3 +-
 .../kernel/protocol/v5/content/CommMsgSpec.scala   |   4 +-
 .../kernel/protocol/v5/content/CommOpenSpec.scala  |   3 +-
 .../v5/content/CompleteReplyErrorSpec.scala        |   4 +-
 .../protocol/v5/content/CompleteReplyOkSpec.scala  |   3 +-
 .../protocol/v5/content/CompleteReplySpec.scala    |   7 +-
 .../protocol/v5/content/CompleteRequestSpec.scala  |   4 +-
 .../protocol/v5/content/ConnectReplySpec.scala     |   4 +-
 .../protocol/v5/content/ConnectRequestSpec.scala   |   4 +-
 .../protocol/v5/content/DisplayDataSpec.scala      |   4 +-
 .../protocol/v5/content/ErrorContentSpec.scala     |   3 +-
 .../protocol/v5/content/ExecuteInputSpec.scala     |   4 +-
 .../v5/content/ExecuteReplyAbortSpec.scala         |   4 +-
 .../v5/content/ExecuteReplyErrorSpec.scala         |   4 +-
 .../protocol/v5/content/ExecuteReplyOkSpec.scala   |   4 +-
 .../protocol/v5/content/ExecuteReplySpec.scala     |   4 +-
 .../protocol/v5/content/ExecuteRequestSpec.scala   |   4 +-
 .../protocol/v5/content/ExecuteResultSpec.scala    |   4 +-
 .../protocol/v5/content/HistoryReplySpec.scala     |   4 +-
 .../protocol/v5/content/HistoryRequestSpec.scala   |   4 +-
 .../protocol/v5/content/InputReplySpec.scala       |   4 +-
 .../protocol/v5/content/InputRequestSpec.scala     |   4 +-
 .../v5/content/InspectReplyErrorSpec.scala         |   4 +-
 .../protocol/v5/content/InspectReplyOkSpec.scala   |   4 +-
 .../protocol/v5/content/InspectReplySpec.scala     |   4 +-
 .../protocol/v5/content/InspectRequestSpec.scala   |   4 +-
 .../protocol/v5/content/KernelInfoReplySpec.scala  |   4 +-
 .../v5/content/KernelInfoRequestSpec.scala         |   4 +-
 .../protocol/v5/content/KernelStatusSpec.scala     |   4 +-
 .../protocol/v5/content/ShutdownReplySpec.scala    |   4 +-
 .../protocol/v5/content/ShutdownRequestSpec.scala  |   4 +-
 .../protocol/v5/content/StreamContentSpec.scala    |   4 +-
 .../scala/ScalaInterpreterSpecific.scala           | 452 +++++++++++++++++++++
 .../interpreter/scala/ScalaInterpreter.scala       |   4 +-
 .../AddExternalJarMagicSpecForIntegration.scala    |   2 +-
 .../interpreter/scala/JVMReprSpec.scala            |   2 +-
 .../scala/org/apache/toree/magic/builtin/Sql.scala |   6 +-
 126 files changed, 668 insertions(+), 213 deletions(-)

diff --git a/Makefile b/Makefile
index 01b805d..3b77a6e 100644
--- a/Makefile
+++ b/Makefile
@@ -30,8 +30,8 @@ IS_SNAPSHOT?=true
 SNAPSHOT:=-SNAPSHOT
 endif
 
-APACHE_SPARK_VERSION?=2.3.4
-SCALA_VERSION?=2.11
+APACHE_SPARK_VERSION?=3.0.0
+SCALA_VERSION?=2.12
 IMAGE?=jupyter/all-spark-notebook:latest
 EXAMPLE_IMAGE?=apache/toree-examples
 TOREE_DEV_IMAGE?=apache/toree-dev
diff --git a/build.sbt b/build.sbt
index f42b750..8c27c20 100644
--- a/build.sbt
+++ b/build.sbt
@@ -22,11 +22,11 @@ version in ThisBuild := Properties.envOrElse("VERSION", "0.0.0-dev") +
   (if ((isSnapshot in ThisBuild).value) "-SNAPSHOT" else "")
 isSnapshot in ThisBuild := Properties.envOrElse("IS_SNAPSHOT","true").toBoolean
 organization in ThisBuild := "org.apache.toree.kernel"
-crossScalaVersions in ThisBuild := Seq("2.11.12")
+crossScalaVersions in ThisBuild := Seq("2.12.12")
 scalaVersion in ThisBuild := (crossScalaVersions in ThisBuild).value.head
 Dependencies.sparkVersion in ThisBuild := {
   val envVar = "APACHE_SPARK_VERSION"
-  val defaultVersion = "2.3.4"
+  val defaultVersion = "3.0.0"
 
   Properties.envOrNone(envVar) match {
     case None =>
@@ -44,9 +44,9 @@ scalacOptions in ThisBuild ++= Seq(
   "-unchecked",
   "-feature",
   "-Xfatal-warnings",
-  "-language:reflectiveCalls",
-  "-target:jvm-1.6",
-  "-Xlint" // Scala 2.11.x only
+  "-language:reflectiveCalls"
+//  "-target:jvm-1.6",
+//  "-Xlint" // Scala 2.11.x only
 )
 // Java-based options for compilation (all tasks)
 // NOTE: Providing a blank flag causes failures, only uncomment with options
@@ -65,7 +65,7 @@ javacOptions in ThisBuild ++= Seq(
 javaOptions in ThisBuild ++= Seq(
   "-Xms1024M", "-Xmx4096M", "-Xss2m", "-XX:MaxPermSize=1024M",
   "-XX:ReservedCodeCacheSize=256M", "-XX:+TieredCompilation",
-  "-XX:+CMSPermGenSweepingEnabled", "-XX:+CMSClassUnloadingEnabled",
+  "-XX:+CMSClassUnloadingEnabled",
   "-XX:+UseConcMarkSweepGC", "-XX:+HeapDumpOnOutOfMemoryError"
 )
 // Add additional test option to show time taken per test
@@ -119,7 +119,7 @@ credentials in ThisBuild+= Credentials(Path.userHome / ".ivy2" / ".credentials")
 
 /** Root Toree project. */
 lazy val root = (project in file("."))
-  .settings(name := "toree")
+  .settings(name := "toree", crossScalaVersions := Nil)
   .aggregate(
     macros,protocol,plugins,communication,kernelApi,client,scalaInterpreter,sqlInterpreter,kernel
   )
@@ -219,6 +219,13 @@ assemblyShadeRules in assembly := Seq(
   ShadeRule.rename("org.objectweb.asm.**" -> "shadeasm.@0").inAll
 )
 
+assemblyMergeStrategy in assembly := {
+  case "module-info.class" => MergeStrategy.discard
+  case x =>
+    val oldStrategy = (assemblyMergeStrategy in assembly).value
+    oldStrategy(x)
+}
+
 test in assembly := {}
 assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)
 aggregate in assembly := false
diff --git a/client/src/main/scala/org/apache/toree/kernel/protocol/v5/client/Utilities.scala b/client/src/main/scala/org/apache/toree/kernel/protocol/v5/client/Utilities.scala
index 6e653c4..2d63d5e 100644
--- a/client/src/main/scala/org/apache/toree/kernel/protocol/v5/client/Utilities.scala
+++ b/client/src/main/scala/org/apache/toree/kernel/protocol/v5/client/Utilities.scala
@@ -24,8 +24,7 @@ import org.apache.toree.communication.ZMQMessage
 import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.content.ExecuteRequest
 import org.apache.toree.utils.LogLike
-import play.api.data.validation.ValidationError
-import play.api.libs.json.{JsPath, Json, Reads}
+import play.api.libs.json.{JsPath, Json, JsonValidationError, Reads}
 
 import scala.concurrent.duration._
 
@@ -65,7 +64,7 @@ object Utilities extends LogLike {
     val header = Json.parse(message.frames(delimiterIndex + 2)).as[Header]
     val parentHeader = Json.parse(message.frames(delimiterIndex + 3)).validate[ParentHeader].fold[ParentHeader](
       // TODO: Investigate better solution than setting parentHeader to null for {}
-      (invalid: Seq[(JsPath, Seq[ValidationError])]) => null, //HeaderBuilder.empty,
+      (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => null, //HeaderBuilder.empty,
       (valid: ParentHeader) => valid
     )
     val metadata = Json.parse(message.frames(delimiterIndex + 4)).as[Metadata]
@@ -92,7 +91,7 @@ object Utilities extends LogLike {
 
   def parseAndHandle[T](json: String, reads: Reads[T], handler: T => Unit) : Unit = {
     Json.parse(json).validate[T](reads).fold(
-      (invalid: Seq[(JsPath, Seq[ValidationError])]) =>
+      (invalid: Seq[(JsPath, Seq[JsonValidationError])]) =>
         logger.error(s"Could not parse JSON, ${json}"),
       (content: T) => handler(content)
     )
diff --git a/client/src/test/scala/examples/ScalaSparkClientUsage.scala b/client/src/test/scala/examples/ScalaSparkClientUsage.scala
index 5f5e15f..d6175ae 100644
--- a/client/src/test/scala/examples/ScalaSparkClientUsage.scala
+++ b/client/src/test/scala/examples/ScalaSparkClientUsage.scala
@@ -17,13 +17,12 @@
 
 package examples
 
-import java.io.File
+import com.typesafe.config.{Config, ConfigFactory}
 import org.apache.toree.kernel.protocol.v5.MIMEType
 import org.apache.toree.kernel.protocol.v5.client.boot.ClientBootstrap
 import org.apache.toree.kernel.protocol.v5.client.boot.layers.{StandardHandlerInitialization, StandardSystemInitialization}
-import org.apache.toree.kernel.protocol.v5.content.{ExecuteResult}
 import org.apache.toree.kernel.protocol.v5.content._
-import com.typesafe.config.{ConfigFactory, Config}
+
 import scala.concurrent.ExecutionContext.Implicits.global
 import scala.concurrent.Promise
 
@@ -32,8 +31,7 @@ import scala.concurrent.Promise
  * Use this class as a playground.
  */
 object ScalaSparkClientUsage extends App {
-  val profile: File = new File(getClass.getResource("/kernel-profiles/IOPubIntegrationProfile.json").toURI)
-  val config: Config = ConfigFactory.parseFile(profile)
+  val config: Config = ConfigFactory.load(getClass.getClassLoader, "/kernel-profiles/IOPubIntegrationProfile.json")
   //  Setup
   val client = (new ClientBootstrap(config)
     with StandardSystemInitialization
@@ -44,7 +42,7 @@ object ScalaSparkClientUsage extends App {
   }
 
   def printTextResult(result:ExecuteResult) = {
-    println(s"ExecuteResult data was: ${result.data.get(MIMEType.PlainText).get}")
+    println(s"ExecuteResult data was: ${result.data(MIMEType.PlainText)}")
   }
 
   def printError(reply:ExecuteReplyError) = {
@@ -140,9 +138,9 @@ object ScalaSparkClientUsage extends App {
   val resultPromise = for {
     x <- xPromise.future
     y <- yPromise.future
-  } yield (complexMath(x, y))
+  } yield complexMath(x, y)
 
-  resultPromise.onSuccess {case x => println(s"Added result is ${x}") }
+  resultPromise.onComplete { x => println(s"Added result is $x") }
   //  Added result is 24
 
   //  Sleep so output does not overlap
diff --git a/client/src/test/scala/integration/unused.integration.socket/ClientToHeartbeatSpecForIntegration.scala b/client/src/test/scala/integration/unused.integration.socket/ClientToHeartbeatSpecForIntegration.scala
index ea7f1ac..7f1baa1 100644
--- a/client/src/test/scala/integration/unused.integration.socket/ClientToHeartbeatSpecForIntegration.scala
+++ b/client/src/test/scala/integration/unused.integration.socket/ClientToHeartbeatSpecForIntegration.scala
@@ -33,7 +33,7 @@ import org.apache.toree.kernel.protocol.v5.socket.SocketConfig
 import com.typesafe.config.ConfigFactory
 import org.mockito.Matchers._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, Matchers}
 import scala.concurrent.duration._
 
diff --git a/client/src/test/scala/integration/unused.integration.socket/ClientToIOPubSpecForIntegration.scala b/client/src/test/scala/integration/unused.integration.socket/ClientToIOPubSpecForIntegration.scala
index 3ca125e..3934142 100644
--- a/client/src/test/scala/integration/unused.integration.socket/ClientToIOPubSpecForIntegration.scala
+++ b/client/src/test/scala/integration/unused.integration.socket/ClientToIOPubSpecForIntegration.scala
@@ -29,7 +29,7 @@ import org.apache.toree.kernel.protocol.v5.content.ExecuteResult
 import org.apache.toree.kernel.protocol.v5.socket._
 import org.mockito.Matchers._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, Matchers}
 import play.api.libs.json.Json
 
diff --git a/client/src/test/scala/integration/unused.integration.socket/ClientToShellSpecForIntegration.scala b/client/src/test/scala/integration/unused.integration.socket/ClientToShellSpecForIntegration.scala
index 52d08fa..1b1033b 100644
--- a/client/src/test/scala/integration/unused.integration.socket/ClientToShellSpecForIntegration.scala
+++ b/client/src/test/scala/integration/unused.integration.socket/ClientToShellSpecForIntegration.scala
@@ -30,7 +30,7 @@ import org.apache.toree.kernel.protocol.v5.content.ExecuteRequest
 import org.apache.toree.kernel.protocol.v5.socket._
 import org.mockito.Matchers._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, Matchers}
 import play.api.libs.json.Json
 
diff --git a/client/src/test/scala/org/apache/toree/comm/ClientCommManagerSpec.scala b/client/src/test/scala/org/apache/toree/comm/ClientCommManagerSpec.scala
index 85b8f67..f784d8b 100644
--- a/client/src/test/scala/org/apache/toree/comm/ClientCommManagerSpec.scala
+++ b/client/src/test/scala/org/apache/toree/comm/ClientCommManagerSpec.scala
@@ -21,7 +21,7 @@ import org.apache.toree.kernel.protocol.v5
 import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.client.ActorLoader
 import org.apache.toree.kernel.protocol.v5.content.CommContent
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.mockito.Mockito._
 import org.mockito.Matchers._
 import org.scalatest.{BeforeAndAfter, FunSpec, Matchers}
diff --git a/client/src/test/scala/org/apache/toree/comm/ClientCommWriterSpec.scala b/client/src/test/scala/org/apache/toree/comm/ClientCommWriterSpec.scala
index 0470390..4018b19 100644
--- a/client/src/test/scala/org/apache/toree/comm/ClientCommWriterSpec.scala
+++ b/client/src/test/scala/org/apache/toree/comm/ClientCommWriterSpec.scala
@@ -27,7 +27,7 @@ import org.apache.toree.kernel.protocol.v5.content._
 import com.typesafe.config.ConfigFactory
 import org.mockito.Matchers._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import play.api.libs.json.Json
 
diff --git a/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/SparkKernelClientSpec.scala b/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/SparkKernelClientSpec.scala
index f9e910b..f533018 100644
--- a/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/SparkKernelClientSpec.scala
+++ b/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/SparkKernelClientSpec.scala
@@ -26,7 +26,7 @@ import org.apache.toree.kernel.protocol.v5.client.execution.ExecuteRequestTuple
 import scala.concurrent.duration._
 import org.mockito.Mockito._
 import org.mockito.Matchers.{eq => mockEq, _}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 
 class SparkKernelClientSpec
diff --git a/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/HeartbeatClientSpec.scala b/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/HeartbeatClientSpec.scala
index 6e09c7f..0e5d804 100644
--- a/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/HeartbeatClientSpec.scala
+++ b/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/HeartbeatClientSpec.scala
@@ -21,7 +21,7 @@ import akka.actor.{ActorRef, ActorSystem, Props}
 import akka.testkit.{TestProbe, ImplicitSender, TestKit}
 import org.apache.toree.communication.ZMQMessage
 import org.apache.toree.kernel.protocol.v5.client.ActorLoader
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{Matchers, FunSpecLike}
 import org.mockito.Matchers._
 import org.mockito.Mockito._
diff --git a/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/IOPubClientSpec.scala b/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/IOPubClientSpec.scala
index 98db662..36aacfa 100644
--- a/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/IOPubClientSpec.scala
+++ b/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/IOPubClientSpec.scala
@@ -35,7 +35,7 @@ import com.typesafe.config.ConfigFactory
 import org.mockito.Matchers.{eq => mockEq, _}
 import org.mockito.Mockito._
 import org.scalatest.concurrent.{Eventually, ScalaFutures}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.time.{Milliseconds, Span}
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import play.api.libs.json.Json
@@ -259,7 +259,7 @@ class IOPubClientSpec extends TestKit(ActorSystem(
 
         whenReady(promise.future) {
           case res: String =>
-            res should be eq("bar")
+            res shouldBe "bar"
           case _ =>
             fail(s"Received failure when asking IOPubClient")
         }
diff --git a/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/ShellClientSpec.scala b/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/ShellClientSpec.scala
index 72cc9ee..f8a5a5c 100644
--- a/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/ShellClientSpec.scala
+++ b/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/ShellClientSpec.scala
@@ -26,7 +26,7 @@ import org.apache.toree.communication.security.SecurityActorType
 import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.client.ActorLoader
 import org.apache.toree.kernel.protocol.v5.content.ExecuteRequest
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{Matchers, FunSpecLike}
 import org.mockito.Mockito._
 import org.mockito.Matchers._
diff --git a/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/StdinClientSpec.scala b/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/StdinClientSpec.scala
index e517bc3..2c97fc6 100644
--- a/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/StdinClientSpec.scala
+++ b/client/src/test/scala/org/apache/toree/kernel/protocol/v5/client/socket/StdinClientSpec.scala
@@ -25,7 +25,7 @@ import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.client.ActorLoader
 import org.apache.toree.kernel.protocol.v5.client.socket.StdinClient.{ResponseFunctionMessage, ResponseFunction}
 import org.apache.toree.kernel.protocol.v5.content.{InputReply, InputRequest, ClearOutput, ExecuteRequest}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import org.apache.toree.kernel.protocol.v5.client.Utilities._
 import play.api.libs.json.Json
diff --git a/communication/src/test/scala/org/apache/toree/communication/socket/JeroMQSocketSpec.scala b/communication/src/test/scala/org/apache/toree/communication/socket/JeroMQSocketSpec.scala
index 078a282..fa9d19b 100644
--- a/communication/src/test/scala/org/apache/toree/communication/socket/JeroMQSocketSpec.scala
+++ b/communication/src/test/scala/org/apache/toree/communication/socket/JeroMQSocketSpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.communication.socket
 import org.mockito.invocation.InvocationOnMock
 import org.mockito.stubbing.Answer
 import org.scalatest.{Matchers, BeforeAndAfter, OneInstancePerTest, FunSpec}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.mockito.Mockito._
 import org.zeromq.ZMsg
 
diff --git a/communication/src/test/scala/org/apache/toree/communication/socket/ZeroMQSocketRunnableSpec.scala b/communication/src/test/scala/org/apache/toree/communication/socket/ZeroMQSocketRunnableSpec.scala
index 1ab3bf5..605fa29 100644
--- a/communication/src/test/scala/org/apache/toree/communication/socket/ZeroMQSocketRunnableSpec.scala
+++ b/communication/src/test/scala/org/apache/toree/communication/socket/ZeroMQSocketRunnableSpec.scala
@@ -17,7 +17,7 @@
 package org.apache.toree.communication.socket
 
 import org.scalatest.concurrent.Eventually
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.time.{Milliseconds, Seconds, Span}
 import org.scalatest.{BeforeAndAfter, FunSpec, Matchers}
 import org.zeromq.ZMQ
diff --git a/communication/src/test/scala/org/apache/toree/communication/utils/OrderedSupportSpec.scala b/communication/src/test/scala/org/apache/toree/communication/utils/OrderedSupportSpec.scala
index e7539dc..20e8f22 100644
--- a/communication/src/test/scala/org/apache/toree/communication/utils/OrderedSupportSpec.scala
+++ b/communication/src/test/scala/org/apache/toree/communication/utils/OrderedSupportSpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.communication.utils
 
 import akka.actor._
 import akka.testkit.{ImplicitSender, TestKit}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, Matchers}
 
 case class OrderedType()
diff --git a/kernel-api/src/main/scala/org/apache/toree/interpreter/Interpreter.scala b/kernel-api/src/main/scala/org/apache/toree/interpreter/Interpreter.scala
index 59696de..5a02f9d 100644
--- a/kernel-api/src/main/scala/org/apache/toree/interpreter/Interpreter.scala
+++ b/kernel-api/src/main/scala/org/apache/toree/interpreter/Interpreter.scala
@@ -99,7 +99,7 @@ trait Interpreter {
    * @return An option containing the variable contents or None if the
    *         variable does not exist
    */
-  def read(variableName: String): Option[AnyRef]
+  def read(variableName: String): Option[Any]
 
   /**
    * Mask the Console and System objects with our wrapper implementations
@@ -146,5 +146,5 @@ trait Interpreter {
    * Initialization done after all other Toree initialization done.
    */
 
-   def postInit () = {}
+   def postInit (): Unit = {}
 }
diff --git a/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerBridgeSpec.scala b/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerBridgeSpec.scala
index 26cfca8..de30960 100644
--- a/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerBridgeSpec.scala
+++ b/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerBridgeSpec.scala
@@ -17,7 +17,7 @@
 package org.apache.toree.interpreter.broker
 
 import org.apache.toree.kernel.api.KernelLike
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpec, Matchers, OneInstancePerTest}
 
 class BrokerBridgeSpec extends FunSpec with Matchers with OneInstancePerTest
diff --git a/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerProcessHandlerSpec.scala b/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerProcessHandlerSpec.scala
index a48ed00..657fdec 100644
--- a/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerProcessHandlerSpec.scala
+++ b/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerProcessHandlerSpec.scala
@@ -17,7 +17,7 @@
 package org.apache.toree.interpreter.broker
 
 import org.apache.commons.exec.ExecuteException
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpec, Matchers, OneInstancePerTest}
 import org.mockito.Mockito._
 import org.mockito.Matchers._
diff --git a/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerProcessSpec.scala b/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerProcessSpec.scala
index 6564c46..f7a055d 100644
--- a/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerProcessSpec.scala
+++ b/kernel-api/src/test/scala/org/apache/toree/interpreter/broker/BrokerProcessSpec.scala
@@ -21,7 +21,7 @@ import java.io.{OutputStream, InputStream, File}
 import org.apache.commons.exec._
 import org.apache.commons.io.FilenameUtils
 import org.mockito.ArgumentCaptor
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpec, Matchers, OneInstancePerTest}
 
 import org.mockito.Mockito._
diff --git a/kernel-api/src/test/scala/org/apache/toree/magic/InternalClassLoaderSpec.scala b/kernel-api/src/test/scala/org/apache/toree/magic/InternalClassLoaderSpec.scala
index 39e2c75..b1f251b 100644
--- a/kernel-api/src/test/scala/org/apache/toree/magic/InternalClassLoaderSpec.scala
+++ b/kernel-api/src/test/scala/org/apache/toree/magic/InternalClassLoaderSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.magic
 
 import org.scalatest.{Matchers, FunSpec}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 
 class InternalClassLoaderSpec extends FunSpec with Matchers with MockitoSugar {
 
diff --git a/kernel-api/src/test/scala/org/apache/toree/magic/MagicManagerSpec.scala b/kernel-api/src/test/scala/org/apache/toree/magic/MagicManagerSpec.scala
index 8d445cf..2bbd585 100644
--- a/kernel-api/src/test/scala/org/apache/toree/magic/MagicManagerSpec.scala
+++ b/kernel-api/src/test/scala/org/apache/toree/magic/MagicManagerSpec.scala
@@ -21,7 +21,7 @@ import org.apache.toree.plugins.dependencies.Dependency
 import org.apache.toree.plugins._
 import org.mockito.Mockito._
 import org.mockito.Matchers.{eq => mockEq, _}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpec, Matchers, OneInstancePerTest}
 import test.utils
 
diff --git a/kernel-api/src/test/scala/org/apache/toree/utils/ArgumentParsingSupportSpec.scala b/kernel-api/src/test/scala/org/apache/toree/utils/ArgumentParsingSupportSpec.scala
index 7746ed8..9be90a2 100644
--- a/kernel-api/src/test/scala/org/apache/toree/utils/ArgumentParsingSupportSpec.scala
+++ b/kernel-api/src/test/scala/org/apache/toree/utils/ArgumentParsingSupportSpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.utils
 
 import org.scalatest.{BeforeAndAfter, Matchers, FunSpec}
 import joptsimple.{OptionSet, OptionSpec, OptionParser}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 
 import org.mockito.Mockito._
 import org.mockito.Matchers._
diff --git a/kernel-api/src/test/scala/org/apache/toree/utils/ConditionalOutputStreamSpec.scala b/kernel-api/src/test/scala/org/apache/toree/utils/ConditionalOutputStreamSpec.scala
index 701ed16..84ec8a5 100644
--- a/kernel-api/src/test/scala/org/apache/toree/utils/ConditionalOutputStreamSpec.scala
+++ b/kernel-api/src/test/scala/org/apache/toree/utils/ConditionalOutputStreamSpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.utils
 
 import java.io.OutputStream
 
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.mockito.Mockito._
 import org.mockito.Matchers._
 import org.scalatest.{Matchers, FunSpec}
diff --git a/kernel-api/src/test/scala/org/apache/toree/utils/DynamicReflectionSupportSpec.scala b/kernel-api/src/test/scala/org/apache/toree/utils/DynamicReflectionSupportSpec.scala
index a20fb12..dd9bf5c 100644
--- a/kernel-api/src/test/scala/org/apache/toree/utils/DynamicReflectionSupportSpec.scala
+++ b/kernel-api/src/test/scala/org/apache/toree/utils/DynamicReflectionSupportSpec.scala
@@ -21,7 +21,7 @@ import java.io.OutputStream
 
 import org.mockito.Matchers._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{GivenWhenThen, BeforeAndAfter, FunSpec, Matchers}
 
 class DynamicReflectionSupportSpec
diff --git a/kernel-api/src/test/scala/org/apache/toree/utils/MultiOutputStreamSpec.scala b/kernel-api/src/test/scala/org/apache/toree/utils/MultiOutputStreamSpec.scala
index a3e2153..53ff6c0 100644
--- a/kernel-api/src/test/scala/org/apache/toree/utils/MultiOutputStreamSpec.scala
+++ b/kernel-api/src/test/scala/org/apache/toree/utils/MultiOutputStreamSpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.utils
 
 import java.io.OutputStream
 
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, Matchers, FunSpec}
 import org.mockito.Matchers._
 import org.mockito.Mockito._
diff --git a/kernel-api/src/test/scala/org/apache/toree/utils/TaskManagerSpec.scala b/kernel-api/src/test/scala/org/apache/toree/utils/TaskManagerSpec.scala
index 61ae715..602900d 100644
--- a/kernel-api/src/test/scala/org/apache/toree/utils/TaskManagerSpec.scala
+++ b/kernel-api/src/test/scala/org/apache/toree/utils/TaskManagerSpec.scala
@@ -17,13 +17,13 @@
 
 package org.apache.toree.utils
 
-import java.util.concurrent.{RejectedExecutionException, ExecutionException}
+import java.util.concurrent.{ExecutionException, RejectedExecutionException}
 
 import org.scalatest.concurrent.PatienceConfiguration.Timeout
-import org.scalatest.concurrent.{Timeouts, Eventually, ScalaFutures}
-import org.scalatest.mock.MockitoSugar
+import org.scalatest.concurrent.{Eventually, ScalaFutures, TimeLimits}
 import org.scalatest.time.{Milliseconds, Seconds, Span}
 import org.scalatest.{BeforeAndAfter, FunSpec, Matchers}
+import org.scalatestplus.mockito.MockitoSugar
 import test.utils.UncaughtExceptionSuppression
 
 import scala.concurrent.Future
@@ -31,7 +31,7 @@ import scala.runtime.BoxedUnit
 
 class TaskManagerSpec extends FunSpec with Matchers with MockitoSugar
   with BeforeAndAfter with ScalaFutures with UncaughtExceptionSuppression
-  with Eventually with Timeouts
+  with Eventually with TimeLimits
 {
   implicit override val patienceConfig = PatienceConfig(
     timeout = scaled(Span(30, Seconds)),
diff --git a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CodeCompleteHandler.scala b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CodeCompleteHandler.scala
index 78a7a48..4008ca1 100644
--- a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CodeCompleteHandler.scala
+++ b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CodeCompleteHandler.scala
@@ -23,7 +23,7 @@ import org.apache.toree.kernel.protocol.v5.content._
 import org.apache.toree.kernel.protocol.v5.kernel.{ActorLoader, Utilities}
 import Utilities._
 import org.apache.toree.utils.{MessageLogSupport, LogLike}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json.{JsPath, Json}
 
 import scala.concurrent.ExecutionContext.Implicits.global
diff --git a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommCloseHandler.scala b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommCloseHandler.scala
index 65e15cd..7f27177 100644
--- a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommCloseHandler.scala
+++ b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommCloseHandler.scala
@@ -23,7 +23,7 @@ import org.apache.toree.kernel.protocol.v5.content.CommClose
 import org.apache.toree.kernel.protocol.v5.kernel.{Utilities, ActorLoader}
 import org.apache.toree.kernel.protocol.v5.{KMBuilder, KernelMessage}
 import org.apache.toree.utils.MessageLogSupport
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json.JsPath
 
 import scala.concurrent.Future
@@ -78,7 +78,7 @@ class CommCloseHandler(
     }
   }
 
-  private def handleParseError(invalid: Seq[(JsPath, Seq[ValidationError])]) = {
+  private def handleParseError(invalid: Seq[(JsPath, Seq[JsonValidationError])]) = {
     // TODO: Determine proper response for a parse failure
     logger.warn("Parse error for Comm Close! Not responding!")
   }
diff --git a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommMsgHandler.scala b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommMsgHandler.scala
index 13bff32..37e9589 100644
--- a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommMsgHandler.scala
+++ b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommMsgHandler.scala
@@ -23,7 +23,7 @@ import org.apache.toree.kernel.protocol.v5.content.CommMsg
 import org.apache.toree.kernel.protocol.v5.kernel.{Utilities, ActorLoader}
 import org.apache.toree.kernel.protocol.v5.{KMBuilder, KernelMessage}
 import org.apache.toree.utils.MessageLogSupport
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json.JsPath
 
 import scala.concurrent.Future
@@ -78,7 +78,7 @@ class CommMsgHandler(
     }
   }
 
-  private def handleParseError(invalid: Seq[(JsPath, Seq[ValidationError])]) = {
+  private def handleParseError(invalid: Seq[(JsPath, Seq[JsonValidationError])]) = {
     // TODO: Determine proper response for a parse failure
     logger.warn("Parse error for Comm Msg! Not responding!")
   }
diff --git a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommOpenHandler.scala b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommOpenHandler.scala
index 3b09110..6590eef 100644
--- a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommOpenHandler.scala
+++ b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/CommOpenHandler.scala
@@ -23,7 +23,7 @@ import org.apache.toree.kernel.protocol.v5.content.CommOpen
 import org.apache.toree.kernel.protocol.v5.kernel.{Utilities, ActorLoader}
 import org.apache.toree.kernel.protocol.v5.{KMBuilder, KernelMessage}
 import org.apache.toree.utils.MessageLogSupport
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json.JsPath
 
 import scala.concurrent.Future
@@ -82,7 +82,7 @@ class CommOpenHandler(
     }
   }
 
-  private def handleParseError(invalid: Seq[(JsPath, Seq[ValidationError])]) = {
+  private def handleParseError(invalid: Seq[(JsPath, Seq[JsonValidationError])]) = {
     // TODO: Determine proper response for a parse failure
     logger.warn("Parse error for Comm Open! Not responding!")
   }
diff --git a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandler.scala b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandler.scala
index 6f253e1..a83a026 100644
--- a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandler.scala
+++ b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandler.scala
@@ -28,7 +28,7 @@ import org.apache.toree.kernel.protocol.v5.stream.KernelOutputStream
 import org.apache.toree.{global => kernelGlobal}
 import Utilities._
 import org.apache.toree.utils._
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json.JsPath
 import scala.concurrent.ExecutionContext.Implicits.global
 import scala.concurrent._
@@ -125,7 +125,7 @@ class ExecuteRequestHandler(
       }
     }
 
-    def parseErrorHandler(invalid: Seq[(JsPath, Seq[ValidationError])]) = {
+    def parseErrorHandler(invalid: Seq[(JsPath, Seq[JsonValidationError])]) = {
       val errs = invalid.map (e => s"JSPath ${e._1} has error ${e._2}").toList
       logger.error(s"Validation errors when parsing ExecuteRequest: ${errs}")
       val replyError: ExecuteReply = ExecuteReplyError(
diff --git a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/IsCompleteHandler.scala b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/IsCompleteHandler.scala
index 15a42d5..da93b96 100644
--- a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/IsCompleteHandler.scala
+++ b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/IsCompleteHandler.scala
@@ -23,7 +23,7 @@ import org.apache.toree.kernel.protocol.v5.content._
 import org.apache.toree.kernel.protocol.v5.kernel.{ActorLoader, Utilities}
 import Utilities._
 import org.apache.toree.utils.{MessageLogSupport, LogLike}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json.{JsPath, Json}
 
 import scala.concurrent.ExecutionContext.Implicits.global
diff --git a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ShutdownHandler.scala b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ShutdownHandler.scala
index 4ef1565..ec08aa1 100644
--- a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ShutdownHandler.scala
+++ b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/handler/ShutdownHandler.scala
@@ -23,7 +23,7 @@ import org.apache.toree.kernel.protocol.v5.kernel.{ActorLoader, Utilities}
 import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.security.KernelSecurityManager
 import org.apache.toree.utils.MessageLogSupport
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json.JsPath
 
 import scala.concurrent.ExecutionContext.Implicits.global
diff --git a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/kernel/Utilities.scala b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/kernel/Utilities.scala
index 6f5d060..3df9830 100644
--- a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/kernel/Utilities.scala
+++ b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/kernel/Utilities.scala
@@ -23,7 +23,7 @@ import akka.util.{ByteString, Timeout}
 import org.apache.toree.communication.ZMQMessage
 import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.utils.LogLike
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json.{JsPath, Json, Reads}
 
 import scala.concurrent.duration._
@@ -91,7 +91,7 @@ object Utilities extends LogLike {
   def parseAndHandle[T, U](json: String, reads: Reads[T],
                            handler: T => U) : U = {
     parseAndHandle(json, reads, handler,
-      (invalid: Seq[(JsPath, Seq[ValidationError])]) => {
+      (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => {
         logger.error(s"Could not parse JSON, ${json}")
         throw new Throwable(s"Could not parse JSON, ${json}")
       }
@@ -100,7 +100,7 @@ object Utilities extends LogLike {
 
   def parseAndHandle[T, U](json: String, reads: Reads[T],
                            handler: T => U,
-                           errHandler: Seq[(JsPath, Seq[ValidationError])] => U) : U = {
+                           errHandler: Seq[(JsPath, Seq[JsonValidationError])] => U) : U = {
     Json.parse(json).validate[T](reads).fold(
       errHandler,
       (content: T) => handler(content)
diff --git a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/relay/KernelMessageRelay.scala b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/relay/KernelMessageRelay.scala
index e9a36c7..3ee5c7d 100644
--- a/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/relay/KernelMessageRelay.scala
+++ b/kernel/src/main/scala/org/apache/toree/kernel/protocol/v5/relay/KernelMessageRelay.scala
@@ -169,8 +169,8 @@ case class KernelMessageRelay(
         val signatureInsertFuture = signatureManager ? kernelMessage
 
         // TODO: Handle error case for mapTo and non-present onFailure
-        signatureInsertFuture.mapTo[KernelMessage] onSuccess {
-          case message =>
+        signatureInsertFuture.mapTo[KernelMessage] foreach {
+          message =>
             outgoingRelay(message)
             finishedProcessing()
         }
diff --git a/kernel/src/main/scala/org/apache/toree/magic/builtin/BuiltinLoader.scala b/kernel/src/main/scala/org/apache/toree/magic/builtin/BuiltinLoader.scala
index cffe702..927ed44 100644
--- a/kernel/src/main/scala/org/apache/toree/magic/builtin/BuiltinLoader.scala
+++ b/kernel/src/main/scala/org/apache/toree/magic/builtin/BuiltinLoader.scala
@@ -21,7 +21,7 @@ import com.google.common.reflect.ClassPath
 import com.google.common.reflect.ClassPath.ClassInfo
 import org.apache.toree.magic.InternalClassLoader
 import com.google.common.base.Strings._
-import scala.collection.JavaConversions._
+import scala.collection.JavaConverters._
 
 /**
  * Represents a class loader that loads classes from the builtin package.
@@ -44,7 +44,7 @@ class BuiltinLoader
       case false =>
         // TODO: Decide if this.getClass.getClassLoader should just be this
         val classPath = ClassPath.from(this.getClass.getClassLoader)
-        classPath.getTopLevelClasses(pkg).filter(
+        classPath.getTopLevelClasses(pkg).asScala.filter(
           _.getSimpleName != this.getClass.getSimpleName
         ).toList
     }
diff --git a/kernel/src/test/scala/integration/InterpreterActorSpecForIntegration.scala b/kernel/src/test/scala/integration/InterpreterActorSpecForIntegration.scala
index 8b53abb..159cbb4 100644
--- a/kernel/src/test/scala/integration/InterpreterActorSpecForIntegration.scala
+++ b/kernel/src/test/scala/integration/InterpreterActorSpecForIntegration.scala
@@ -31,7 +31,7 @@ import org.apache.toree.kernel.protocol.v5.interpreter.InterpreterActor
 import org.apache.toree.kernel.protocol.v5.interpreter.tasks.InterpreterTaskFactory
 import com.typesafe.config.ConfigFactory
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import test.utils.UncaughtExceptionSuppression
 import test.utils.MaxAkkaTestTimeout
diff --git a/kernel/src/test/scala/org/apache/toree/comm/KernelCommManagerSpec.scala b/kernel/src/test/scala/org/apache/toree/comm/KernelCommManagerSpec.scala
index e7ae22a..3d2c2a0 100644
--- a/kernel/src/test/scala/org/apache/toree/comm/KernelCommManagerSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/comm/KernelCommManagerSpec.scala
@@ -21,7 +21,7 @@ import org.apache.toree.kernel.protocol.v5
 import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.content.CommContent
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.mockito.Mockito._
 import org.mockito.Matchers._
 import org.scalatest.{BeforeAndAfter, FunSpec, Matchers}
diff --git a/kernel/src/test/scala/org/apache/toree/comm/KernelCommWriterSpec.scala b/kernel/src/test/scala/org/apache/toree/comm/KernelCommWriterSpec.scala
index 2677e39..ce81bef 100644
--- a/kernel/src/test/scala/org/apache/toree/comm/KernelCommWriterSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/comm/KernelCommWriterSpec.scala
@@ -26,7 +26,7 @@ import test.utils.MaxAkkaTestTimeout
 import akka.actor.{ActorSelection, ActorSystem}
 import akka.testkit.{TestProbe, TestKit}
 import com.typesafe.config.ConfigFactory
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import org.mockito.Mockito._
 import org.mockito.Matchers._
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/api/DisplayMethodsSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/api/DisplayMethodsSpec.scala
index 3be2f48..c3ded29 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/api/DisplayMethodsSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/api/DisplayMethodsSpec.scala
@@ -22,7 +22,7 @@ import akka.testkit.{ImplicitSender, TestKit, TestProbe}
 import org.apache.toree.kernel.protocol.v5
 import org.apache.toree.kernel.protocol.v5.KernelMessage
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import play.api.libs.json.Json
 import test.utils.MaxAkkaTestTimeout
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/api/KernelSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/api/KernelSpec.scala
index 8bedfe3..da953d9 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/api/KernelSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/api/KernelSpec.scala
@@ -30,7 +30,7 @@ import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.apache.toree.plugins.PluginManager
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpec, Matchers}
 
 class KernelSpec extends FunSpec with Matchers with MockitoSugar
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/api/StreamMethodsSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/api/StreamMethodsSpec.scala
index fcde596..9aec97d 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/api/StreamMethodsSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/api/StreamMethodsSpec.scala
@@ -21,7 +21,7 @@ import akka.actor.ActorSystem
 import akka.testkit.{ImplicitSender, TestKit, TestProbe}
 import org.apache.toree.kernel.protocol.v5
 import org.apache.toree.kernel.protocol.v5.KernelMessage
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, BeforeAndAfter, Matchers}
 import play.api.libs.json.Json
 import test.utils.MaxAkkaTestTimeout
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/dispatch/StatusDispatchSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/dispatch/StatusDispatchSpec.scala
index 80d27b6..ebc3574 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/dispatch/StatusDispatchSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/dispatch/StatusDispatchSpec.scala
@@ -23,7 +23,7 @@ import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.content.KernelStatus
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import play.api.libs.json.Json
 import test.utils.MaxAkkaTestTimeout
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CodeCompleteHandlerSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CodeCompleteHandlerSpec.scala
index 496cd55..8bfe70a 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CodeCompleteHandlerSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CodeCompleteHandlerSpec.scala
@@ -24,7 +24,7 @@ import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.content.CompleteRequest
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.apache.toree.kernel.protocol.v5Test._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, BeforeAndAfter, Matchers}
 import org.mockito.Mockito._
 import test.utils.MaxAkkaTestTimeout
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommCloseHandlerSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommCloseHandlerSpec.scala
index 81d5884..b39a0ce 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommCloseHandlerSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommCloseHandlerSpec.scala
@@ -26,7 +26,7 @@ import org.apache.toree.kernel.protocol.v5.content.{ClearOutput, CommClose}
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.apache.toree.kernel.protocol.v5.{KernelMessage, SystemActorType, KMBuilder}
 import org.apache.toree.comm.{CommRegistrar, CommWriter, CommCallbacks, CommStorage}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import org.mockito.Mockito._
 import org.mockito.Matchers._
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommInfoRequestHandlerSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommInfoRequestHandlerSpec.scala
index 50c7597..87bbe8c 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommInfoRequestHandlerSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommInfoRequestHandlerSpec.scala
@@ -27,7 +27,7 @@ import org.apache.toree.kernel.protocol.v5.{Header, KernelMessage, Metadata, Sys
 import org.mockito.AdditionalMatchers.{not => mockNot}
 import org.mockito.Matchers.{eq => mockEq}
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, Matchers}
 import play.api.libs.json.Json
 
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommMsgHandlerSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommMsgHandlerSpec.scala
index 085310f..ac6db52 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommMsgHandlerSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommMsgHandlerSpec.scala
@@ -28,7 +28,7 @@ import org.apache.toree.kernel.protocol.v5.content.{CommMsg, ClearOutput}
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.mockito.Matchers._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import test.utils.MaxAkkaTestTimeout
 
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommOpenHandlerSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommOpenHandlerSpec.scala
index 5180eb8..ba74458 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommOpenHandlerSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/CommOpenHandlerSpec.scala
@@ -30,7 +30,7 @@ import org.apache.toree.comm._
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.mockito.Mockito._
 import org.mockito.Matchers._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import test.utils.MaxAkkaTestTimeout
 
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandlerSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandlerSpec.scala
index 6aa95d6..6e6554b 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandlerSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/ExecuteRequestHandlerSpec.scala
@@ -27,7 +27,7 @@ import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.content._
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.apache.toree.kernel.protocol.v5Test._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import play.api.libs.json.Json
 
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/GenericSocketMessageHandlerSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/GenericSocketMessageHandlerSpec.scala
index 70a37ef..cfaa078 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/GenericSocketMessageHandlerSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/GenericSocketMessageHandlerSpec.scala
@@ -23,7 +23,7 @@ import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.apache.toree.kernel.protocol.v5Test._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{Matchers, FunSpecLike}
 import test.utils.MaxAkkaTestTimeout
 
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/InputRequestReplyHandlerSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/InputRequestReplyHandlerSpec.scala
index 5414b67..bf245d5 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/InputRequestReplyHandlerSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/InputRequestReplyHandlerSpec.scala
@@ -26,7 +26,7 @@ import org.apache.toree.kernel.protocol.v5.content.InputReply
 import org.apache.toree.kernel.protocol.v5.{HeaderBuilder, MessageType, KMBuilder, SystemActorType}
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.scalatest.concurrent.Eventually
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.time.{Milliseconds, Span}
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import test.utils.MaxAkkaTestTimeout
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/KernelInfoRequestHandlerSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/KernelInfoRequestHandlerSpec.scala
index 6a5d2ea..318ade0 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/KernelInfoRequestHandlerSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/handler/KernelInfoRequestHandlerSpec.scala
@@ -26,7 +26,7 @@ import org.mockito.AdditionalMatchers.{not => mockNot}
 import org.mockito.Matchers.{eq => mockEq}
 import com.typesafe.config.ConfigFactory
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, Matchers}
 import play.api.libs.json.Json
 import test.utils.MaxAkkaTestTimeout
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/interpreter/tasks/ExecuteRequestTaskActorSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/interpreter/tasks/ExecuteRequestTaskActorSpec.scala
index 4f1a032..278be0c 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/interpreter/tasks/ExecuteRequestTaskActorSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/interpreter/tasks/ExecuteRequestTaskActorSpec.scala
@@ -27,7 +27,7 @@ import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.content._
 import org.mockito.Matchers.{anyBoolean, anyString, anyObject}
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, Matchers}
 import test.utils.MaxAkkaTestTimeout
 
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/ActorLoaderSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/ActorLoaderSpec.scala
index 8091ab7..44a53b7 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/ActorLoaderSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/ActorLoaderSpec.scala
@@ -20,7 +20,7 @@ package org.apache.toree.kernel.protocol.v5.kernel
 import akka.actor.{ActorSystem, Props}
 import akka.testkit.{ImplicitSender, TestKit, TestProbe}
 import org.apache.toree.kernel.protocol.v5.{MessageType, SocketType}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, Matchers}
 import test.utils.TestProbeProxyActor
 import test.utils.MaxAkkaTestTimeout
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/HeartbeatSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/HeartbeatSpec.scala
index 8c1a695..09d24f8 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/HeartbeatSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/HeartbeatSpec.scala
@@ -24,7 +24,7 @@ import org.apache.toree.communication.ZMQMessage
 import com.typesafe.config.ConfigFactory
 import org.mockito.Matchers._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, Matchers}
 import test.utils.MaxAkkaTestTimeout
 
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/IOPubSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/IOPubSpec.scala
index 4a36b82..2fa56e5 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/IOPubSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/IOPubSpec.scala
@@ -26,7 +26,7 @@ import Utilities._
 import com.typesafe.config.ConfigFactory
 import org.mockito.Matchers._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, Matchers}
 import test.utils.MaxAkkaTestTimeout
 
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/ShellSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/ShellSpec.scala
index 0a3a696..e62d41e 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/ShellSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/ShellSpec.scala
@@ -30,7 +30,7 @@ import Utilities._
 import com.typesafe.config.ConfigFactory
 import org.mockito.Matchers._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpecLike, Matchers}
 import test.utils.MaxAkkaTestTimeout
 
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/SocketConfigSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/SocketConfigSpec.scala
index 895f5df..3af75f6 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/SocketConfigSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/SocketConfigSpec.scala
@@ -20,7 +20,7 @@ package org.apache.toree.kernel.protocol.v5.kernel.socket
 import com.typesafe.config.ConfigFactory
 import org.scalatest.{FunSpec, Matchers}
 import org.slf4j.LoggerFactory
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json.{JsPath, JsValue, Json}
 
 class SocketConfigSpec extends FunSpec with Matchers {
@@ -70,7 +70,7 @@ class SocketConfigSpec extends FunSpec with Matchers {
         val CompleteRequestResults = socketConfigJson.validate[SocketConfig]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: SocketConfig) => valid
         ) should be (socketConfig)
       }
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/StdinSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/StdinSpec.scala
index be6b360..cb15ec0 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/StdinSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/kernel/socket/StdinSpec.scala
@@ -28,7 +28,7 @@ import org.apache.toree.kernel.protocol.v5Test._
 import org.apache.toree.kernel.protocol.v5.{KernelMessage, SystemActorType}
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import com.typesafe.config.ConfigFactory
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{Matchers, FunSpecLike}
 import org.mockito.Mockito._
 import org.mockito.Matchers._
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/magic/MagicParserSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/magic/MagicParserSpec.scala
index 86d320c..2cbde5f 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/magic/MagicParserSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/magic/MagicParserSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.magic
 
 import org.apache.toree.magic.{CellMagic, Magic, MagicManager}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpec, Matchers}
 import org.mockito.Mockito._
 import org.mockito.Matchers._
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/relay/ExecuteRequestRelaySpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/relay/ExecuteRequestRelaySpec.scala
index 95dcb3a..f52eb9e 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/relay/ExecuteRequestRelaySpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/relay/ExecuteRequestRelaySpec.scala
@@ -30,7 +30,7 @@ import com.typesafe.config.ConfigFactory
 import org.apache.toree.plugins.PluginManager
 import org.apache.toree.plugins.dependencies.DependencyManager
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import test.utils.MaxAkkaTestTimeout
 import scala.concurrent.duration.Duration
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/relay/KernelMessageRelaySpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/relay/KernelMessageRelaySpec.scala
index bdce4ab..08075a1 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/relay/KernelMessageRelaySpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/relay/KernelMessageRelaySpec.scala
@@ -26,7 +26,7 @@ import org.apache.toree.kernel.protocol.v5.kernel.{ActorLoader, Utilities}
 import Utilities._
 import org.mockito.Mockito._
 import org.scalatest.concurrent.{PatienceConfiguration, ScalaFutures}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.time.{Millis, Seconds, Span}
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 import org.mockito.Matchers.{eq => mockEq}
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/stream/KernelInputStreamSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/stream/KernelInputStreamSpec.scala
index 072dc2d..9925225 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/stream/KernelInputStreamSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/stream/KernelInputStreamSpec.scala
@@ -25,7 +25,7 @@ import org.apache.toree.kernel.protocol.v5.content.InputRequest
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.mockito.Mockito._
 import org.scalatest._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import play.api.libs.json.Json
 import test.utils._
 
diff --git a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/stream/KernelOuputStreamSpec.scala b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/stream/KernelOuputStreamSpec.scala
index c801c0e..d669aa1 100644
--- a/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/stream/KernelOuputStreamSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/kernel/protocol/v5/stream/KernelOuputStreamSpec.scala
@@ -26,7 +26,7 @@ import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader
 import org.apache.toree.utils.ScheduledTaskManager
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest._
 import play.api.libs.json._
 import org.apache.toree.kernel.protocol.v5.content.StreamContent
diff --git a/kernel/src/test/scala/org/apache/toree/magic/builtin/AddDepsSpec.scala b/kernel/src/test/scala/org/apache/toree/magic/builtin/AddDepsSpec.scala
index a346805..c96f8d2 100644
--- a/kernel/src/test/scala/org/apache/toree/magic/builtin/AddDepsSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/magic/builtin/AddDepsSpec.scala
@@ -22,7 +22,7 @@ import java.net.{URI, URL}
 import org.apache.toree.dependencies.{Credentials, DependencyDownloader}
 import org.apache.toree.utils.ArgumentParsingSupport
 import org.apache.toree.kernel.api.KernelLike
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpec, GivenWhenThen, Matchers}
 import org.mockito.Mockito._
 import org.mockito.Matchers._
diff --git a/kernel/src/test/scala/org/apache/toree/magic/builtin/AddJarSpec.scala b/kernel/src/test/scala/org/apache/toree/magic/builtin/AddJarSpec.scala
index 5a14224..8117bcc 100644
--- a/kernel/src/test/scala/org/apache/toree/magic/builtin/AddJarSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/magic/builtin/AddJarSpec.scala
@@ -28,7 +28,7 @@ import org.apache.spark.SparkContext
 import org.apache.toree.kernel.api.KernelLike
 import org.apache.toree.plugins.PluginManager
 import org.scalatest.{FunSpec, Matchers}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.mockito.Mockito._
 import org.mockito.Matchers._
 
diff --git a/kernel/src/test/scala/org/apache/toree/magic/builtin/BuiltinLoaderSpec.scala b/kernel/src/test/scala/org/apache/toree/magic/builtin/BuiltinLoaderSpec.scala
index 079d525..b3192f1 100644
--- a/kernel/src/test/scala/org/apache/toree/magic/builtin/BuiltinLoaderSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/magic/builtin/BuiltinLoaderSpec.scala
@@ -17,7 +17,7 @@
 
 package org.apache.toree.magic.builtin
 
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{Matchers, FunSpec}
 
 class BuiltinLoaderSpec extends FunSpec with Matchers with MockitoSugar {
diff --git a/kernel/src/test/scala/org/apache/toree/magic/builtin/DataFrameSpec.scala b/kernel/src/test/scala/org/apache/toree/magic/builtin/DataFrameSpec.scala
index 38fde38..d3fdfdd 100644
--- a/kernel/src/test/scala/org/apache/toree/magic/builtin/DataFrameSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/magic/builtin/DataFrameSpec.scala
@@ -23,7 +23,7 @@ import org.apache.toree.magic.dependencies.IncludeKernelInterpreter
 import org.apache.toree.utils.DataFrameConverter
 import org.mockito.Matchers.{anyString, eq => mockEq, _}
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpec, Matchers}
 
 import scala.util.Success
diff --git a/kernel/src/test/scala/org/apache/toree/magic/builtin/HtmlSpec.scala b/kernel/src/test/scala/org/apache/toree/magic/builtin/HtmlSpec.scala
index 9ccfceb..5686ceb 100644
--- a/kernel/src/test/scala/org/apache/toree/magic/builtin/HtmlSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/magic/builtin/HtmlSpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.magic.builtin
 
 import org.apache.toree.kernel.protocol.v5.MIMEType
 import org.apache.toree.magic.CellMagicOutput
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpec, Matchers}
 
 class HtmlSpec extends FunSpec with Matchers with MockitoSugar {
diff --git a/kernel/src/test/scala/org/apache/toree/magic/builtin/JavaScriptSpec.scala b/kernel/src/test/scala/org/apache/toree/magic/builtin/JavaScriptSpec.scala
index b97fd51..939ca61 100644
--- a/kernel/src/test/scala/org/apache/toree/magic/builtin/JavaScriptSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/magic/builtin/JavaScriptSpec.scala
@@ -17,7 +17,7 @@
 
 package org.apache.toree.magic.builtin
 
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{FunSpec, Matchers}
 import org.apache.toree.magic.CellMagicOutput
 import org.apache.toree.kernel.protocol.v5.MIMEType
diff --git a/kernel/src/test/scala/org/apache/toree/magic/builtin/LSMagicSpec.scala b/kernel/src/test/scala/org/apache/toree/magic/builtin/LSMagicSpec.scala
index edd8979..283659b 100644
--- a/kernel/src/test/scala/org/apache/toree/magic/builtin/LSMagicSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/magic/builtin/LSMagicSpec.scala
@@ -25,7 +25,7 @@ import org.apache.toree.magic.dependencies.{IncludeOutputStream, IncludeInterpre
 import org.apache.toree.magic.{CellMagic, LineMagic}
 import org.apache.spark.SparkContext
 import org.scalatest.{Matchers, FunSpec}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 
 import org.mockito.Mockito._
 import org.mockito.Matchers._
diff --git a/kernel/src/test/scala/org/apache/toree/utils/DataFrameConverterSpec.scala b/kernel/src/test/scala/org/apache/toree/utils/DataFrameConverterSpec.scala
index 601a31c..eb5355a 100644
--- a/kernel/src/test/scala/org/apache/toree/utils/DataFrameConverterSpec.scala
+++ b/kernel/src/test/scala/org/apache/toree/utils/DataFrameConverterSpec.scala
@@ -20,9 +20,9 @@ package org.apache.toree.utils
 import org.apache.spark.sql.types.StructType
 import org.apache.spark.sql.{DataFrame, Row}
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfterAll, FunSpec, Matchers}
-import play.api.libs.json.{JsArray, JsString, Json}
+import play.api.libs.json.{JsArray, JsDefined, JsString, JsValue, Json}
 import test.utils.SparkContextProvider
 
 import scala.collection.mutable
@@ -40,7 +40,7 @@ class DataFrameConverterSpec extends FunSpec with MockitoSugar with Matchers wit
   val mockDataFrame = mock[DataFrame]
   val mockRdd = spark.parallelize(Seq(Row(new mutable.WrappedArray.ofRef(Array("test1", "test2")), 2, null)))
   val mockStruct = mock[StructType]
-  val columns = Seq("foo", "bar").toArray
+  val columns = Array("foo", "bar")
 
   doReturn(mockStruct).when(mockDataFrame).schema
   doReturn(columns).when(mockStruct).fieldNames
@@ -51,10 +51,10 @@ class DataFrameConverterSpec extends FunSpec with MockitoSugar with Matchers wit
       it("should convert to a valid JSON object") {
         val someJson = dataFrameConverter.convert(mockDataFrame, "json")
         val jsValue = Json.parse(someJson.get)
-        jsValue \ "columns" should be (JsArray(Seq(JsString("foo"), JsString("bar"))))
-        jsValue \ "rows" should be (JsArray(Seq(
+        (jsValue \ "columns").as[Array[JsValue]] should contain theSameElementsAs Array(JsString("foo"), JsString("bar"))
+        (jsValue \ "rows").as[Array[JsValue]] should contain theSameElementsAs Array(
           JsArray(Seq(JsString("[test1, test2]"), JsString("2"), JsString("null")))
-        )))
+        )
       }
       it("should convert to csv") {
         val csv = dataFrameConverter.convert(mockDataFrame, "csv").get
diff --git a/kernel/src/test/scala/test/utils/StackActor.scala b/kernel/src/test/scala/test/utils/StackActor.scala
index c343649..89483d7 100644
--- a/kernel/src/test/scala/test/utils/StackActor.scala
+++ b/kernel/src/test/scala/test/utils/StackActor.scala
@@ -23,15 +23,15 @@ import akka.actor.Actor
  * A stack which will block when popping items.
  */
 class BlockingStack {
-  private val items = new scala.collection.mutable.Stack[Any]
+  private var items = List[Any]()
 
   /**
    * Puts an item onto the stack
    * @param item The item to put on the stack
    */
   def put(item : Any) {
-    items.synchronized{
-      items push item
+    items.synchronized {
+      items = item +: items
     }
   }
 
@@ -48,12 +48,14 @@ class BlockingStack {
   private def popN(count: Int) : Any = {
     if(count == 0)
       Option.empty
-    else if( items.synchronized{ items.size == 0 }) {
+    else if( items.synchronized{ items.isEmpty }) {
       Thread.sleep(100)
       popN(count - 1)
     } else
       items.synchronized {
-        items.pop()
+        val value = items.head
+        items = items.tail
+        value
       }
     }
 }
diff --git a/plugins/src/test/scala-2.11/org/apache/toree/plugins/dependencies/ClassLoaderHelper.scala b/plugins/src/test/scala-2.11/org/apache/toree/plugins/dependencies/ClassLoaderHelper.scala
index 0bfb538..20e1856 100644
--- a/plugins/src/test/scala-2.11/org/apache/toree/plugins/dependencies/ClassLoaderHelper.scala
+++ b/plugins/src/test/scala-2.11/org/apache/toree/plugins/dependencies/ClassLoaderHelper.scala
@@ -17,11 +17,13 @@
 package org.apache.toree.plugins.dependencies
 
 import java.net.URL
-import java.lang.{ ClassLoader => JClassLoader }
+import java.lang.{ClassLoader => JClassLoader}
+
+import scala.reflect.internal.util.ScalaClassLoader
 
 object ClassLoaderHelper {
 
-  def URLClassLoader(urls: Seq[URL], parent: JClassLoader) = {
+  def URLClassLoader(urls: Seq[URL], parent: JClassLoader): ScalaClassLoader.URLClassLoader = {
     new scala.reflect.internal.util.ScalaClassLoader.URLClassLoader(urls, parent)
   }
 }
diff --git a/plugins/src/test/scala-2.11/org/apache/toree/plugins/dependencies/ClassLoaderHelper.scala b/plugins/src/test/scala-2.12/org/apache/toree/plugins/dependencies/ClassLoaderHelper.scala
similarity index 83%
copy from plugins/src/test/scala-2.11/org/apache/toree/plugins/dependencies/ClassLoaderHelper.scala
copy to plugins/src/test/scala-2.12/org/apache/toree/plugins/dependencies/ClassLoaderHelper.scala
index 0bfb538..20e1856 100644
--- a/plugins/src/test/scala-2.11/org/apache/toree/plugins/dependencies/ClassLoaderHelper.scala
+++ b/plugins/src/test/scala-2.12/org/apache/toree/plugins/dependencies/ClassLoaderHelper.scala
@@ -17,11 +17,13 @@
 package org.apache.toree.plugins.dependencies
 
 import java.net.URL
-import java.lang.{ ClassLoader => JClassLoader }
+import java.lang.{ClassLoader => JClassLoader}
+
+import scala.reflect.internal.util.ScalaClassLoader
 
 object ClassLoaderHelper {
 
-  def URLClassLoader(urls: Seq[URL], parent: JClassLoader) = {
+  def URLClassLoader(urls: Seq[URL], parent: JClassLoader): ScalaClassLoader.URLClassLoader = {
     new scala.reflect.internal.util.ScalaClassLoader.URLClassLoader(urls, parent)
   }
 }
diff --git a/plugins/src/test/scala/org/apache/toree/plugins/PluginManagerSpec.scala b/plugins/src/test/scala/org/apache/toree/plugins/PluginManagerSpec.scala
index 86097c8..aacba46 100644
--- a/plugins/src/test/scala/org/apache/toree/plugins/PluginManagerSpec.scala
+++ b/plugins/src/test/scala/org/apache/toree/plugins/PluginManagerSpec.scala
@@ -21,12 +21,10 @@ import java.io.File
 import org.apache.toree.plugins.dependencies.DependencyManager
 import org.mockito.Matchers._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
 import org.scalatest.{FunSpec, Matchers, OneInstancePerTest}
+import org.scalatestplus.mockito.MockitoSugar
 import test.utils._
 
-import scala.util.{Failure, Success}
-
 class PluginManagerSpec extends FunSpec with Matchers
   with OneInstancePerTest with MockitoSugar
 {
diff --git a/plugins/src/test/scala/org/apache/toree/plugins/PluginMethodResultSpec.scala b/plugins/src/test/scala/org/apache/toree/plugins/PluginMethodResultSpec.scala
index 0589aa7..2e2831a 100644
--- a/plugins/src/test/scala/org/apache/toree/plugins/PluginMethodResultSpec.scala
+++ b/plugins/src/test/scala/org/apache/toree/plugins/PluginMethodResultSpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.plugins
 import java.lang.reflect.Method
 
 import org.apache.toree.plugins.annotations.{Priority, Event}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{OneInstancePerTest, Matchers, FunSpec}
 import org.mockito.Mockito._
 
diff --git a/plugins/src/test/scala/org/apache/toree/plugins/PluginSearcherSpec.scala b/plugins/src/test/scala/org/apache/toree/plugins/PluginSearcherSpec.scala
index 690a40c..d93af27 100644
--- a/plugins/src/test/scala/org/apache/toree/plugins/PluginSearcherSpec.scala
+++ b/plugins/src/test/scala/org/apache/toree/plugins/PluginSearcherSpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.plugins
 import java.io.File
 
 import org.clapper.classutil.{Modifier, ClassFinder}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{OneInstancePerTest, Matchers, FunSpec}
 
 import org.mockito.Mockito._
diff --git a/plugins/src/test/scala/org/apache/toree/plugins/PluginSpec.scala b/plugins/src/test/scala/org/apache/toree/plugins/PluginSpec.scala
index 5ea58a7..4bee316 100644
--- a/plugins/src/test/scala/org/apache/toree/plugins/PluginSpec.scala
+++ b/plugins/src/test/scala/org/apache/toree/plugins/PluginSpec.scala
@@ -20,7 +20,7 @@ import java.lang.reflect.Method
 
 import org.apache.toree.plugins.annotations._
 import org.apache.toree.plugins.dependencies.DependencyManager
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{OneInstancePerTest, Matchers, FunSpec}
 import org.mockito.Mockito._
 import org.mockito.Matchers.{eq => mockEq, _}
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index 3e2f342..2baa731 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -26,7 +26,7 @@ object Dependencies {
   val akkaSlf4j = "com.typesafe.akka" %% "akka-slf4j" % "2.5.31" // Apache v2
   val akkaTestkit = "com.typesafe.akka" %% "akka-testkit" % "2.5.31" // Apache v2
 
-  val clapper = "org.clapper" %% "classutil" % "1.0.12" // BSD 3-clause license, used for detecting plugins
+  val clapper = "org.clapper" %% "classutil" % "1.5.1" // BSD 3-clause license, used for detecting plugins
 
   val commonsExec = "org.apache.commons" % "commons-exec" % "1.3" // Apache v2
 
@@ -47,13 +47,13 @@ object Dependencies {
 
   val mockito = "org.mockito" % "mockito-all" % "1.10.19" // MIT
 
-  val playJson = "com.typesafe.play" %% "play-json" % "2.3.10" // Apache v2
+  val playJson = "com.typesafe.play" %% "play-json" % "2.7.4" // Apache v2
 
   val scalaCompiler = Def.setting{ "org.scala-lang" % "scala-compiler" % scalaVersion.value } // BSD 3-clause
   val scalaLibrary = Def.setting{ "org.scala-lang" % "scala-library" % scalaVersion.value } // BSD 3-clause
   val scalaReflect = Def.setting{ "org.scala-lang" % "scala-reflect" % scalaVersion.value } // BSD 3-clause
 
-  val scalaTest = "org.scalatest" %% "scalatest" % "2.2.6" // Apache v2
+  val scalaTest = "org.scalatest" %% "scalatest" % "3.0.8" // Apache v2
 
   val slf4jApi = "org.slf4j" % "slf4j-api" % "1.7.21" // MIT
 
diff --git a/protocol/build.sbt b/protocol/build.sbt
index 0ed902e..f9da47c 100644
--- a/protocol/build.sbt
+++ b/protocol/build.sbt
@@ -22,6 +22,7 @@ libraryDependencies ++= Seq(
   Dependencies.playJson excludeAll(
     ExclusionRule(organization = "com.fasterxml.jackson.core")
   ),
+  Dependencies.jacksonDatabind,
   Dependencies.slf4jApi
 )
 
diff --git a/protocol/src/test/scala/org/apache/toree/comm/CommManagerSpec.scala b/protocol/src/test/scala/org/apache/toree/comm/CommManagerSpec.scala
index 28c91da..1bb6429 100644
--- a/protocol/src/test/scala/org/apache/toree/comm/CommManagerSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/comm/CommManagerSpec.scala
@@ -23,7 +23,7 @@ import org.apache.toree.kernel.protocol.v5.UUID
 import org.apache.toree.kernel.protocol.v5.content.{CommClose, CommOpen}
 import org.mockito.invocation.InvocationOnMock
 import org.mockito.stubbing.Answer
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, Matchers, FunSpec}
 import org.mockito.Mockito._
 import org.mockito.Matchers.{eq => mockEq, _}
diff --git a/protocol/src/test/scala/org/apache/toree/comm/CommRegistrarSpec.scala b/protocol/src/test/scala/org/apache/toree/comm/CommRegistrarSpec.scala
index 05e0c09..b8aa8cc 100644
--- a/protocol/src/test/scala/org/apache/toree/comm/CommRegistrarSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/comm/CommRegistrarSpec.scala
@@ -21,7 +21,7 @@ import java.util.UUID
 
 import org.apache.toree.comm.CommCallbacks.{CloseCallback, MsgCallback, OpenCallback}
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpec, Matchers}
 
 class CommRegistrarSpec extends FunSpec with Matchers with MockitoSugar
diff --git a/protocol/src/test/scala/org/apache/toree/comm/CommStorageSpec.scala b/protocol/src/test/scala/org/apache/toree/comm/CommStorageSpec.scala
index 2b90404..278590a 100644
--- a/protocol/src/test/scala/org/apache/toree/comm/CommStorageSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/comm/CommStorageSpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.comm
 
 import org.apache.toree.kernel.protocol.v5
 import org.apache.toree.kernel.protocol.v5.UUID
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.mockito.Mockito._
 import org.scalatest.{BeforeAndAfter, Matchers, FunSpec}
 
diff --git a/protocol/src/test/scala/org/apache/toree/comm/CommWriterSpec.scala b/protocol/src/test/scala/org/apache/toree/comm/CommWriterSpec.scala
index c804c7b..ac155f9 100644
--- a/protocol/src/test/scala/org/apache/toree/comm/CommWriterSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/comm/CommWriterSpec.scala
@@ -22,11 +22,10 @@ import java.util.UUID
 import org.apache.toree.kernel.protocol.v5
 import org.apache.toree.kernel.protocol.v5._
 import org.apache.toree.kernel.protocol.v5.content._
-import org.mockito.Matchers.{eq => mockEq, _}
+import org.mockito.Matchers._
 import org.mockito.Mockito._
-import org.scalatest.mock.MockitoSugar
-import org.scalatest.{FunSpec, BeforeAndAfter, Matchers}
-
+import org.scalatest.{BeforeAndAfter, FunSpec, Matchers}
+import org.scalatestplus.mockito.MockitoSugar
 
 class CommWriterSpec extends FunSpec with Matchers with BeforeAndAfter
   with MockitoSugar
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/HeaderSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/HeaderSpec.scala
index 2903948..3fd25b1 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/HeaderSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/HeaderSpec.scala
@@ -17,9 +17,8 @@
 
 package org.apache.toree.kernel.protocol.v5
 
-import org.scalatest.{Matchers, FunSpec}
-import play.api.data.validation.ValidationError
-import play.api.libs.json.{JsPath, Json, JsValue}
+import org.scalatest.{FunSpec, Matchers}
+import play.api.libs.json.{JsPath, JsValue, Json, JsonValidationError}
 
 class HeaderSpec extends FunSpec with Matchers {
   val headerJson: JsValue = Json.parse("""
@@ -63,7 +62,7 @@ class HeaderSpec extends FunSpec with Matchers {
         val headerResults = headerJson.validate[Header]
 
         headerResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: Header) => valid
         ) should be (header)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ClearOutputSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ClearOutputSpec.scala
index 6eeb509..c43ef74 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ClearOutputSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ClearOutputSpec.scala
@@ -19,7 +19,6 @@ package org.apache.toree.kernel.protocol.v5.content
 
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
 import play.api.libs.json._
 
 class ClearOutputSpec extends FunSpec with Matchers {
@@ -59,7 +58,7 @@ class ClearOutputSpec extends FunSpec with Matchers {
         val CompleteRequestResults = clearOutputJson.validate[ClearOutput]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ClearOutput) => valid
         ) should be (clearOutput)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommCloseSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommCloseSpec.scala
index 4d0ab4a..2cf0e40 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommCloseSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommCloseSpec.scala
@@ -19,7 +19,6 @@ package org.apache.toree.kernel.protocol.v5.content
 
 import org.apache.toree.kernel.protocol.v5._
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
 import play.api.libs.json._
 
 class CommCloseSpec extends FunSpec with Matchers {
@@ -60,7 +59,7 @@ class CommCloseSpec extends FunSpec with Matchers {
         val CompleteRequestResults = commCloseJson.validate[CommClose]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: CommClose) => valid
         ) should be (commClose)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommMsgSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommMsgSpec.scala
index 1beb0dc..dafd1b7 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommMsgSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommMsgSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 import org.apache.toree.kernel.protocol.v5._
 
@@ -87,7 +87,7 @@ class CommMsgSpec extends FunSpec with Matchers {
         val CompleteRequestResults = commMsgJson.validate[CommMsg]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: CommMsg) => valid
         ) should be (commMsg)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommOpenSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommOpenSpec.scala
index c74ec54..a604c41 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommOpenSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CommOpenSpec.scala
@@ -18,7 +18,6 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
 import play.api.libs.json._
 import org.apache.toree.kernel.protocol.v5.MsgData
 
@@ -61,7 +60,7 @@ class CommOpenSpec extends FunSpec with Matchers {
         val CompleteRequestResults = commOpenJson.validate[CommOpen]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: CommOpen) => valid
         ) should be (commOpen)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplyErrorSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplyErrorSpec.scala
index 2fb4dab..c24315d 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplyErrorSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplyErrorSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class CompleteReplyErrorSpec extends FunSpec with Matchers {
@@ -60,7 +60,7 @@ class CompleteReplyErrorSpec extends FunSpec with Matchers {
         val CompleteReplyOkResults = completeReplyErrorJson.validate[CompleteReplyError]
 
         CompleteReplyOkResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: CompleteReplyError) => valid
         ) should be (completeReplyError)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplyOkSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplyOkSpec.scala
index 45fc5a0..607ff5a 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplyOkSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplyOkSpec.scala
@@ -18,7 +18,6 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
 import play.api.libs.json._
 
 class CompleteReplyOkSpec extends FunSpec with Matchers {
@@ -57,7 +56,7 @@ class CompleteReplyOkSpec extends FunSpec with Matchers {
         val CompleteReplyOkResults = completeReplyOkJson.validate[CompleteReplyOk]
 
         CompleteReplyOkResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: CompleteReplyOk) => valid
         ) should be (completeReplyOk)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplySpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplySpec.scala
index 88fa0d3..6e942bf 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplySpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteReplySpec.scala
@@ -17,9 +17,8 @@
 
 package org.apache.toree.kernel.protocol.v5.content
 
-import org.scalatest.{Matchers, FunSpec}
-import play.api.data.validation.ValidationError
-import play.api.libs.json.{JsPath, JsValue, Json}
+import org.scalatest.{FunSpec, Matchers}
+import play.api.libs.json.{JsPath, JsValue, Json, JsonValidationError}
 
 class CompleteReplySpec extends FunSpec with Matchers {
 
@@ -64,7 +63,7 @@ class CompleteReplySpec extends FunSpec with Matchers {
         val CompleteReplyResults = completeReplyJson.validate[CompleteReply]
 
         CompleteReplyResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: CompleteReply) => valid
         ) should be (completeReply)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteRequestSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteRequestSpec.scala
index f4c30d9..fe19ed4 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteRequestSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/CompleteRequestSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class CompleteRequestSpec extends FunSpec with Matchers {
@@ -59,7 +59,7 @@ class CompleteRequestSpec extends FunSpec with Matchers {
         val CompleteRequestResults = completeRequestJson.validate[CompleteRequest]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: CompleteRequest) => valid
         ) should be (completeRequest)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ConnectReplySpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ConnectReplySpec.scala
index ceb8874..92b5577 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ConnectReplySpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ConnectReplySpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json.{JsPath, JsValue, Json}
 
 class ConnectReplySpec extends FunSpec with Matchers {
@@ -61,7 +61,7 @@ class ConnectReplySpec extends FunSpec with Matchers {
         val ConnectReplyResults = connectReplyJson.validate[ConnectReply]
 
         ConnectReplyResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ConnectReply) => valid
         ) should be (connectReply)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ConnectRequestSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ConnectRequestSpec.scala
index 2f341c4..580ea7d 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ConnectRequestSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ConnectRequestSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class ConnectRequestSpec extends FunSpec with Matchers {
@@ -54,7 +54,7 @@ class ConnectRequestSpec extends FunSpec with Matchers {
         val ConnectRequestResults = connectRequestJson.validate[ConnectRequest]
 
         ConnectRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ConnectRequest) => valid
         ) should be (connectRequest)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/DisplayDataSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/DisplayDataSpec.scala
index 309d5ac..49e426b 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/DisplayDataSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/DisplayDataSpec.scala
@@ -20,7 +20,7 @@ package org.apache.toree.kernel.protocol.v5.content
 import org.scalatest.FunSuite
 
 import org.scalatest.{Matchers, FunSpec}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 import org.apache.toree.kernel.protocol.v5._
 
@@ -63,7 +63,7 @@ class DisplayDataSpec extends FunSpec with Matchers {
         val displayDataResults = displayDataJson.validate[DisplayData]
 
         displayDataResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: DisplayData) => valid
         ) should be (displayData)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ErrorContentSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ErrorContentSpec.scala
index 278ef8a..5f54f77 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ErrorContentSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ErrorContentSpec.scala
@@ -18,7 +18,6 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{Matchers, FunSpec}
-import play.api.data.validation.ValidationError
 import play.api.libs.json._
 
 class ErrorContentSpec extends FunSpec with Matchers {
@@ -58,7 +57,7 @@ class ErrorContentSpec extends FunSpec with Matchers {
         val CompleteRequestResults = errorJson.validate[ErrorContent]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ErrorContent) => valid
         ) should be (error)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteInputSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteInputSpec.scala
index 58a383f..a1aed33 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteInputSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteInputSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class ExecuteInputSpec extends FunSpec with Matchers {
@@ -59,7 +59,7 @@ class ExecuteInputSpec extends FunSpec with Matchers {
         val executeInputResults = executeInputJson.validate[ExecuteInput]
 
         executeInputResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ExecuteInput) => valid
         ) should be (executeInput)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyAbortSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyAbortSpec.scala
index 9316c3d..c47f490 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyAbortSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyAbortSpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.kernel.protocol.v5.content
 
 import org.apache.toree.kernel.protocol.v5._
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class ExecuteReplyAbortSpec extends FunSpec with Matchers {
@@ -54,7 +54,7 @@ class ExecuteReplyAbortSpec extends FunSpec with Matchers {
         val ExecuteReplyAbortResults = executeReplyAbortJson.validate[ExecuteReplyAbort]
 
         ExecuteReplyAbortResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ExecuteReplyAbort) => valid
         ) should be (executeReplyAbort)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyErrorSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyErrorSpec.scala
index f67ed9a..f204e52 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyErrorSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyErrorSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 import org.apache.toree.kernel.protocol.v5._
@@ -58,7 +58,7 @@ class ExecuteReplyErrorSpec extends FunSpec with Matchers {
         val ExecuteReplyErrorResults = executeReplyErrorJson.validate[ExecuteReplyError]
 
         ExecuteReplyErrorResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ExecuteReplyError) => valid
         ) should be (executeReplyError)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyOkSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyOkSpec.scala
index 22da3a1..56f7b6b 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyOkSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplyOkSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 import org.apache.toree.kernel.protocol.v5._
@@ -57,7 +57,7 @@ class ExecuteReplyOkSpec extends FunSpec with Matchers {
         val executeReplyOkResults = executeReplyOkJson.validate[ExecuteReplyOk]
 
         executeReplyOkResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ExecuteReplyOk) => valid
         ) should be (executeReplyOk)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplySpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplySpec.scala
index 4009679..f08121c 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplySpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteReplySpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.kernel.protocol.v5.content
 
 import org.apache.toree.kernel.protocol.v5._
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class ExecuteReplySpec extends FunSpec with Matchers {
@@ -60,7 +60,7 @@ class ExecuteReplySpec extends FunSpec with Matchers {
         val executeReplyResults = executeReplyJson.validate[ExecuteReply]
 
         executeReplyResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ExecuteReply) => valid
         ) should be (executeReply)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteRequestSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteRequestSpec.scala
index b280e1e..fdd1e66 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteRequestSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteRequestSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{Matchers, FunSpec}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 import org.apache.toree.kernel.protocol.v5._
 
@@ -63,7 +63,7 @@ class ExecuteRequestSpec extends FunSpec with Matchers {
         val executeRequestResults = executeRequestJson.validate[ExecuteRequest]
 
         executeRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ExecuteRequest) => valid
         ) should be (executeRequest)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteResultSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteResultSpec.scala
index 1f40abe..c88c00c 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteResultSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ExecuteResultSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 import org.apache.toree.kernel.protocol.v5._
@@ -96,7 +96,7 @@ class ExecuteResultSpec extends FunSpec with Matchers {
         val CompleteRequestResults = executeResultJson.validate[ExecuteResult]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ExecuteResult) => valid
         ) should be (executeResult)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/HistoryReplySpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/HistoryReplySpec.scala
index 56a9c7e..56d0c17 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/HistoryReplySpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/HistoryReplySpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 import org.apache.toree.kernel.protocol.v5._
@@ -60,7 +60,7 @@ class HistoryReplySpec extends FunSpec with Matchers {
         val CompleteRequestResults = historyReplyJson.validate[HistoryReply]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: HistoryReply) => valid
         ) should be (historyReply)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/HistoryRequestSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/HistoryRequestSpec.scala
index 6757dcc..ddadbd3 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/HistoryRequestSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/HistoryRequestSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class HistoryRequestSpec extends FunSpec with Matchers {
@@ -66,7 +66,7 @@ class HistoryRequestSpec extends FunSpec with Matchers {
         val CompleteRequestResults = historyRequestJson.validate[HistoryRequest]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: HistoryRequest) => valid
         ) should be (historyRequest)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InputReplySpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InputReplySpec.scala
index a5770d8..d78dee5 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InputReplySpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InputReplySpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class InputReplySpec extends FunSpec with Matchers {
@@ -58,7 +58,7 @@ class InputReplySpec extends FunSpec with Matchers {
         val CompleteReplyResults = inputReplyJson.validate[InputReply]
 
         CompleteReplyResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: InputReply) => valid
         ) should be (inputReply)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InputRequestSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InputRequestSpec.scala
index ac2a070..089184a 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InputRequestSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InputRequestSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class InputRequestSpec extends FunSpec with Matchers {
@@ -59,7 +59,7 @@ class InputRequestSpec extends FunSpec with Matchers {
         val CompleteRequestResults = inputRequestJson.validate[InputRequest]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: InputRequest) => valid
         ) should be (inputRequest)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplyErrorSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplyErrorSpec.scala
index 6325c3c..e00c0e5 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplyErrorSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplyErrorSpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.kernel.protocol.v5.content
 
 import org.apache.toree.kernel.protocol.v5._
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class InspectReplyErrorSpec extends FunSpec with Matchers {
@@ -58,7 +58,7 @@ class InspectReplyErrorSpec extends FunSpec with Matchers {
         val InspectReplyErrorResults = inspectReplyErrorJson.validate[InspectReplyError]
 
         InspectReplyErrorResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: InspectReplyError) => valid
         ) should be (inspectReplyError)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplyOkSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplyOkSpec.scala
index 6ee2e53..7dfaed7 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplyOkSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplyOkSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 import org.apache.toree.kernel.protocol.v5._
@@ -56,7 +56,7 @@ class InspectReplyOkSpec extends FunSpec with Matchers {
         val InspectReplyOkResults = inspectReplyOkJson.validate[InspectReplyOk]
 
         InspectReplyOkResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: InspectReplyOk) => valid
         ) should be (inspectReplyOk)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplySpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplySpec.scala
index 17e1ab2..a2e1d94 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplySpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectReplySpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class InspectReplySpec extends FunSpec with Matchers {
@@ -60,7 +60,7 @@ class InspectReplySpec extends FunSpec with Matchers {
         val InspectReplyResults = inspectReplyJson.validate[InspectReply]
 
         InspectReplyResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: InspectReply) => valid
         ) should be (inspectReply)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectRequestSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectRequestSpec.scala
index 6f6ca05..3ec5c2d 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectRequestSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/InspectRequestSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class InspectRequestSpec extends FunSpec with Matchers {
@@ -60,7 +60,7 @@ class InspectRequestSpec extends FunSpec with Matchers {
         val InspectRequestResults = inspectRequestJson.validate[InspectRequest]
 
         InspectRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: InspectRequest) => valid
         ) should be (inspectRequest)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelInfoReplySpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelInfoReplySpec.scala
index f138725..7de743f 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelInfoReplySpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelInfoReplySpec.scala
@@ -19,7 +19,7 @@ package org.apache.toree.kernel.protocol.v5.content
 
 import org.apache.toree.kernel.protocol.v5.LanguageInfo
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class KernelInfoReplySpec extends FunSpec with Matchers {
@@ -63,7 +63,7 @@ class KernelInfoReplySpec extends FunSpec with Matchers {
         val kernelInfoReplyResults = kernelInfoReplyJson.validate[KernelInfoReply]
 
         kernelInfoReplyResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: KernelInfoReply) => valid
         ) should be (kernelInfoReply)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelInfoRequestSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelInfoRequestSpec.scala
index 64af363..6e7d78e 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelInfoRequestSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelInfoRequestSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class KernelInfoRequestSpec extends FunSpec with Matchers {
@@ -55,7 +55,7 @@ class KernelInfoRequestSpec extends FunSpec with Matchers {
         val KernelInfoRequestResults = kernelInfoRequestJson.validate[KernelInfoRequest]
 
         KernelInfoRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: KernelInfoRequest) => valid
         ) should be (kernelInfoRequest)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelStatusSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelStatusSpec.scala
index c354b73..ab68bf9 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelStatusSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/KernelStatusSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json.{JsPath, JsValue, Json}
 
 class KernelStatusSpec extends FunSpec with Matchers {
@@ -56,7 +56,7 @@ class KernelStatusSpec extends FunSpec with Matchers {
         val kernelStatusResults = kernelStatusJson.validate[KernelStatus]
 
         kernelStatusResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: KernelStatus) => valid
         ) should be (kernelStatus)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ShutdownReplySpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ShutdownReplySpec.scala
index 13f72c1..b543ee9 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ShutdownReplySpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ShutdownReplySpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class ShutdownReplySpec extends FunSpec with Matchers {
@@ -58,7 +58,7 @@ class ShutdownReplySpec extends FunSpec with Matchers {
         val ShutdownReplyResults = shutdownReplyJson.validate[ShutdownReply]
 
         ShutdownReplyResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ShutdownReply) => valid
         ) should be (shutdownReply)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ShutdownRequestSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ShutdownRequestSpec.scala
index fa4caa6..4e5128d 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ShutdownRequestSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/ShutdownRequestSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class ShutdownRequestSpec extends FunSpec with Matchers {
@@ -58,7 +58,7 @@ class ShutdownRequestSpec extends FunSpec with Matchers {
         val ShutdownRequestResults = shutdownRequestJson.validate[ShutdownRequest]
 
         ShutdownRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: ShutdownRequest) => valid
         ) should be (shutdownRequest)
       }
diff --git a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/StreamContentSpec.scala b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/StreamContentSpec.scala
index 376b073..9d77080 100644
--- a/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/StreamContentSpec.scala
+++ b/protocol/src/test/scala/org/apache/toree/kernel/protocol/v5/content/StreamContentSpec.scala
@@ -18,7 +18,7 @@
 package org.apache.toree.kernel.protocol.v5.content
 
 import org.scalatest.{FunSpec, Matchers}
-import play.api.data.validation.ValidationError
+import play.api.libs.json.JsonValidationError
 import play.api.libs.json._
 
 class StreamContentSpec extends FunSpec with Matchers {
@@ -57,7 +57,7 @@ class StreamContentSpec extends FunSpec with Matchers {
         val CompleteRequestResults = streamJson.validate[StreamContent]
 
         CompleteRequestResults.fold(
-          (invalid: Seq[(JsPath, Seq[ValidationError])]) => println("Failed!"),
+          (invalid: Seq[(JsPath, Seq[JsonValidationError])]) => println("Failed!"),
           (valid: StreamContent) => valid
         ) should be (stream)
       }
diff --git a/scala-interpreter/src/main/scala-2.12/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala b/scala-interpreter/src/main/scala-2.12/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala
new file mode 100644
index 0000000..2d7f68b
--- /dev/null
+++ b/scala-interpreter/src/main/scala-2.12/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala
@@ -0,0 +1,452 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License
+ */
+
+package org.apache.toree.kernel.interpreter.scala
+
+import java.io._
+import java.net.URL
+
+import org.apache.toree.global.StreamState
+import org.apache.toree.interpreter.imports.printers.{WrapperConsole, WrapperSystem}
+import org.apache.toree.interpreter.{ExecuteError, Interpreter}
+import scala.tools.nsc.interpreter._
+import scala.concurrent.Future
+import scala.tools.nsc.{Global, Settings, util}
+import scala.util.Try
+
+trait ScalaInterpreterSpecific extends SettingsProducerLike { this: ScalaInterpreter =>
+  private val ExecutionExceptionName = "lastException"
+
+  private[toree] var iMain: IMain = _
+  private var completer: PresentationCompilerCompleter = _
+  private val exceptionHack = new ExceptionHack()
+
+  def _runtimeClassloader = {
+    _thisClassloader
+  }
+
+  protected def newIMain(settings: Settings, out: JPrintWriter): IMain = {
+    val s = new IMain(settings, out)
+    s.initializeSynchronous()
+    s
+  }
+
+  protected def convertAnnotationsToModifiers(
+                                               annotationInfos: List[Global#AnnotationInfo]
+                                             ) = annotationInfos map {
+    case a if a.toString == "transient" => "@transient"
+    case a =>
+      logger.debug(s"Ignoring unknown annotation: $a")
+      ""
+  } filterNot {
+    _.isEmpty
+  }
+
+  protected def convertScopeToModifiers(scopeSymbol: Global#Symbol) = {
+    (if (scopeSymbol.isImplicit) "implicit" else "") ::
+      Nil
+  }
+
+  protected def buildModifierList(termNameString: String) = {
+    import scala.language.existentials
+    val termSymbol = iMain.symbolOfTerm(termNameString)
+
+
+    convertAnnotationsToModifiers(
+      if (termSymbol.hasAccessorFlag) termSymbol.accessed.annotations
+      else termSymbol.annotations
+    ) ++ convertScopeToModifiers(termSymbol)
+  }
+
+
+  protected def refreshDefinitions(): Unit = {
+    iMain.definedTerms.foreach(termName => {
+      val termNameString = termName.toString
+      val termTypeString = iMain.typeOfTerm(termNameString).toLongString
+      iMain.valueOfTerm(termNameString) match {
+        case Some(termValue)  =>
+          val modifiers = buildModifierList(termNameString)
+          logger.debug(s"Rebinding of $termNameString as " +
+            s"${modifiers.mkString(" ")} $termTypeString")
+          Try(iMain.beSilentDuring {
+            iMain.bind(
+              termNameString, termTypeString, termValue, modifiers
+            )
+          })
+        case None             =>
+          logger.debug(s"Ignoring rebinding of $termNameString")
+      }
+    })
+  }
+
+  protected def reinitializeSymbols(): Unit = {
+    val global = iMain.global
+    import global._
+    new Run // Initializes something needed for Scala classes
+  }
+
+  /**
+   * Adds jars to the runtime and compile time classpaths. Does not work with
+   * directories or expanding star in a path.
+   * @param jars The list of jar locations
+   */
+  override def addJars(jars: URL*): Unit = {
+    iMain.addUrlsToClassPath(jars:_*)
+    // the Scala interpreter will invalidate definitions for any package defined in
+    // the new Jars. This can easily include org.* and make the kernel inaccessible
+    // because it is bound using the previous package definition. To avoid problems,
+    // it is necessary to refresh variable definitions to use the new packages and
+    // to rebind the global definitions.
+    refreshDefinitions()
+    bindVariables()
+  }
+
+  /**
+   * Binds a variable in the interpreter to a value.
+   * @param variableName The name to expose the value in the interpreter
+   * @param typeName The type of the variable, must be the fully qualified class name
+   * @param value The value of the variable binding
+   * @param modifiers Any annotation, scoping modifiers, etc on the variable
+   */
+  override def bind(
+    variableName: String,
+    typeName: String,
+    value: Any,
+    modifiers: List[String]
+  ): Unit = {
+    logger.warn(s"Binding $modifiers $variableName $typeName $value")
+    require(iMain != null)
+    val sIMain = iMain
+
+    val bindRep = new sIMain.ReadEvalPrint()
+    iMain.interpret(s"import $typeName")
+    bindRep.compile("""
+                      |object %s {
+                      |  var value: %s = _
+                      |  def set(x: Any) = value = x.asInstanceOf[%s]
+                      |}
+                    """.stripMargin.format(bindRep.evalName, typeName, typeName)
+    )
+    bindRep.callEither("set", value) match {
+      case Left(ex) =>
+        logger.error("Set failed in bind(%s, %s, %s)".format(variableName, typeName, value))
+        logger.error(util.stackTraceString(ex))
+        IR.Error
+
+      case Right(_) =>
+        val line = "%sval %s = %s.value".format(modifiers map (_ + " ") mkString, variableName, bindRep.evalPath)
+        logger.debug("Interpreting: " + line)
+        iMain.interpret(line)
+    }
+
+  }
+
+
+  /**
+   * Executes body and will not print anything to the console during the execution
+   * @param body The function to execute
+   * @tparam T The return type of body
+   * @return The return value of body
+   */
+  override def doQuietly[T](body: => T): T = {
+    require(iMain != null)
+    iMain.beQuietDuring[T](body)
+  }
+
+
+  /**
+   * Stops the interpreter, removing any previous internal state.
+   * @return A reference to the interpreter
+   */
+  override def stop(): Interpreter = {
+    logger.info("Shutting down interpreter")
+
+    // Shut down the task manager (kills current execution
+    if (taskManager != null) taskManager.stop()
+    taskManager = null
+
+    // Erase our completer
+    completer = null
+
+    // Close the entire interpreter (loses all state)
+    if (iMain != null) iMain.close()
+    iMain = null
+
+    this
+  }
+
+  /**
+   * Returns the name of the variable created from the last execution.
+   * @return Some String name if a variable was created, otherwise None
+   */
+  override def lastExecutionVariableName: Option[String] = {
+    require(iMain != null)
+
+    // TODO: Get this API method changed back to public in Apache Spark
+    val lastRequestMethod = classOf[IMain].getDeclaredMethod("lastRequest")
+    lastRequestMethod.setAccessible(true)
+
+    val mostRecentVariableName = iMain.mostRecentVar
+
+    iMain.allDefinedNames.map(_.toString).find(_ == mostRecentVariableName)
+  }
+
+  /**
+   * Mask the Console and System objects with our wrapper implementations
+   * and dump the Console methods into the public namespace (similar to
+   * the Predef approach).
+   * @param in The new input stream
+   * @param out The new output stream
+   * @param err The new error stream
+   */
+  override def updatePrintStreams(
+    in: InputStream,
+    out: OutputStream,
+    err: OutputStream
+  ): Unit = {
+    val inReader = new BufferedReader(new InputStreamReader(in))
+    val outPrinter = new PrintStream(out)
+    val errPrinter = new PrintStream(err)
+
+    iMain.beQuietDuring {
+      iMain.bind(
+        "Console", classOf[WrapperConsole].getName,
+        new WrapperConsole(inReader, outPrinter, errPrinter),
+        List("""@transient""")
+      )
+      iMain.bind(
+        "System", classOf[WrapperSystem].getName,
+        new WrapperSystem(in, out, err),
+        List("""@transient""")
+      )
+      iMain.interpret("import Console._")
+    }
+  }
+
+  /**
+   * Retrieves the contents of the variable with the provided name from the
+   * interpreter.
+   * @param variableName The name of the variable whose contents to read
+   * @return An option containing the variable contents or None if the
+   *         variable does not exist
+   */
+  override def read(variableName: String): Option[Any] = {
+    require(iMain != null)
+
+    try {
+      iMain.valueOfTerm(variableName)
+    } catch {
+      // if any error returns None
+      case e: Throwable => {
+        logger.debug(s"Error reading variable name: ${variableName}", e)
+        clearLastException()
+        None
+      }
+    }
+  }
+
+  /**
+   * Starts the interpreter, initializing any internal state.
+   * @return A reference to the interpreter
+   */
+  override def start(): Interpreter = {
+    require(iMain == null && taskManager == null)
+
+    taskManager = newTaskManager()
+
+    logger.debug("Initializing task manager")
+    taskManager.start()
+
+    iMain = newIMain(settings, new JPrintWriter(lastResultOut, true))
+
+    //logger.debug("Initializing interpreter")
+    //iMain.initializeSynchronous()
+
+    logger.debug("Initializing completer")
+    completer = new PresentationCompilerCompleter(iMain)
+
+    iMain.beQuietDuring {
+      //logger.info("Rerouting Console and System related input and output")
+      //updatePrintStreams(System.in, multiOutputStream, multiOutputStream)
+
+      //   ADD IMPORTS generates too many classes, client is responsible for adding import
+      logger.debug("Adding org.apache.spark.SparkContext._ to imports")
+      iMain.interpret("import org.apache.spark.SparkContext._")
+
+      logger.debug("Adding the hack for the exception handling retrieval.")
+      iMain.bind("_exceptionHack", classOf[ExceptionHack].getName, exceptionHack, List("@transient"))
+    }
+
+    this
+  }
+
+  /**
+   * Attempts to perform code completion via the <TAB> command.
+   * @param code The current cell to complete
+   * @param pos The cursor position
+   * @return The cursor position and list of possible completions
+   */
+  override def completion(code: String, pos: Int): (Int, List[String]) = {
+
+    require(completer != null)
+
+    logger.debug(s"Attempting code completion for ${code}")
+    val result = completer.complete(code, pos)
+
+    (result.cursor, result.candidates)
+  }
+
+  /**
+    * Attempts to perform completeness checking for a statement by seeing if we can parse it
+    * using the scala parser.
+    *
+    * @param code The current cell to complete
+    * @return tuple of (completeStatus, indent)
+    */
+  override def isComplete(code: String): (String, String) = {
+    val result = iMain.beSilentDuring {
+      val parse = iMain.parse
+      parse(code) match {
+        case t: parse.Error => ("invalid", "")
+        case t: parse.Success =>
+          val lines = code.split("\n", -1)
+          val numLines = lines.length
+          // for multiline code blocks, require an empty line before executing
+          // to mimic the behavior of ipython
+          if (numLines > 1 && lines.last.matches("\\s*\\S.*")) {
+            ("incomplete", startingWhiteSpace(lines.last))
+          } else {
+            ("complete", "")
+          }
+        case t: parse.Incomplete =>
+          val lines = code.split("\n", -1)
+          // For now lets just grab the indent of the current line, if none default to 2 spaces.
+          ("incomplete", startingWhiteSpace(lines.last))
+      }
+    }
+    lastResultOut.reset()
+    result
+  }
+
+  private def startingWhiteSpace(line: String): String = {
+    val indent = "^\\s+".r.findFirstIn(line).getOrElse("")
+    // increase the indent if the line ends with => or {
+    if (line.matches(".*(?:(?:\\{)|(?:=>))\\s*")) {
+      indent + "  "
+    } else {
+      indent
+    }
+  }
+
+  override def newSettings(args: List[String]): Settings = {
+    val s = new Settings()
+
+    val dir = ScalaInterpreter.ensureTemporaryFolder()
+
+    s.processArguments(args ++
+      List(
+        "-Yrepl-class-based",
+        "-Yrepl-outdir", s"$dir"
+        // useful for debugging compiler classpath or package issues
+        // "-uniqid", "-explaintypes", "-usejavacp", "-Ylog-classpath"
+    ), processAll = true)
+    s
+  }
+
+  protected def interpretAddTask(code: String, silent: Boolean): Future[IR.Result] = {
+    if (iMain == null) throw new IllegalArgumentException("Interpreter not started yet!")
+
+    taskManager.add {
+      // Add a task using the given state of our streams
+      StreamState.withStreams {
+        if (silent) {
+          iMain.beSilentDuring {
+            iMain.interpret(code)
+          }
+        } else {
+          iMain.interpret(code)
+        }
+      }
+    }
+  }
+
+  private def retrieveLastException: Throwable = {
+    iMain.beSilentDuring {
+      iMain.interpret("_exceptionHack.lastException = lastException")
+    }
+    exceptionHack.lastException
+  }
+
+  private def clearLastException(): Unit = {
+    iMain.directBind(
+      ExecutionExceptionName,
+      classOf[Throwable].getName,
+      null
+    )
+    exceptionHack.lastException = null
+  }
+
+  protected def interpretConstructExecuteError(output: String) = {
+    Option(retrieveLastException) match {
+      // Runtime error
+      case Some(e) =>
+        val ex = e.asInstanceOf[Throwable]
+        clearLastException()
+
+        // The scala REPL does a pretty good job of returning us a stack trace that is free from all the bits that the
+        // interpreter uses before it.
+        //
+        // The REPL emits its message as something like this, so trim off the first and last element
+        //
+        //    java.lang.ArithmeticException: / by zero
+        //    at failure(<console>:17)
+        //    at call_failure(<console>:19)
+        //    ... 40 elided
+
+        val formattedException = output.split("\n")
+
+        ExecuteError(
+          ex.getClass.getName,
+          ex.getLocalizedMessage,
+          formattedException.slice(1, formattedException.size - 1).toList
+        )
+      // Compile time error, need to check internal reporter
+      case _ =>
+        if (iMain.reporter.hasErrors)
+        // TODO: This wrapper is not needed when just getting compile
+        // error that we are not parsing... maybe have it be purely
+        // output and have the error check this?
+          ExecuteError(
+            "Compile Error", output, List()
+          )
+        else
+        // May as capture the output here.  Could be useful
+          ExecuteError("Unknown Error", output, List())
+    }
+  }
+}
+
+/**
+  * Due to a bug in the scala interpreter under scala 2.11 (SI-8935) with IMain.valueOfTerm we can hack around it by
+  * binding an instance of ExceptionHack into iMain and interpret the "_exceptionHack.lastException = lastException".
+  * This makes it possible to extract the exception.
+  *
+  * TODO: Revisit this once Scala 2.12 is released.
+  */
+class ExceptionHack {
+  var lastException: Throwable = _
+}
diff --git a/scala-interpreter/src/main/scala/org/apache/toree/kernel/interpreter/scala/ScalaInterpreter.scala b/scala-interpreter/src/main/scala/org/apache/toree/kernel/interpreter/scala/ScalaInterpreter.scala
index cf763d8..89d0482 100644
--- a/scala-interpreter/src/main/scala/org/apache/toree/kernel/interpreter/scala/ScalaInterpreter.scala
+++ b/scala-interpreter/src/main/scala/org/apache/toree/kernel/interpreter/scala/ScalaInterpreter.scala
@@ -193,12 +193,12 @@ class ScalaInterpreter(private val config:Config = ConfigFactory.load) extends I
                     showType: Boolean = KernelOptions.showTypes, // false
                     noTruncate: Boolean = KernelOptions.noTruncation, // false
                     showOutput: Boolean = KernelOptions.showOutput // true
-                   ): (Option[AnyRef], Option[String], Option[String]) = {
+                   ): (Option[Any], Option[String], Option[String]) = {
     if (interpreterOutput.isEmpty) {
       return (None, None, None)
     }
 
-    var lastResult = Option.empty[AnyRef]
+    var lastResult = Option.empty[Any]
     var lastResultAsString = ""
     val definitions = new StringBuilder
     val text = new StringBuilder
diff --git a/scala-interpreter/src/test/scala/integration/interpreter/scala/AddExternalJarMagicSpecForIntegration.scala b/scala-interpreter/src/test/scala/integration/interpreter/scala/AddExternalJarMagicSpecForIntegration.scala
index d2f7d8d..fd96c54 100644
--- a/scala-interpreter/src/test/scala/integration/interpreter/scala/AddExternalJarMagicSpecForIntegration.scala
+++ b/scala-interpreter/src/test/scala/integration/interpreter/scala/AddExternalJarMagicSpecForIntegration.scala
@@ -25,7 +25,7 @@ import org.apache.toree.global.StreamState
 import org.apache.toree.interpreter._
 import org.apache.toree.kernel.api.KernelLike
 import org.apache.toree.kernel.interpreter.scala.ScalaInterpreter
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 import org.scalatest.{BeforeAndAfter, FunSpec, Ignore, Matchers}
 
 @SbtForked
diff --git a/scala-interpreter/src/test/scala/integration/interpreter/scala/JVMReprSpec.scala b/scala-interpreter/src/test/scala/integration/interpreter/scala/JVMReprSpec.scala
index fbd0292..0d10834 100644
--- a/scala-interpreter/src/test/scala/integration/interpreter/scala/JVMReprSpec.scala
+++ b/scala-interpreter/src/test/scala/integration/interpreter/scala/JVMReprSpec.scala
@@ -29,7 +29,7 @@ import org.apache.toree.kernel.api.{DisplayMethodsLike, KernelLike}
 import org.apache.toree.kernel.interpreter.scala.ScalaInterpreter
 import org.mockito.Mockito.doReturn
 import org.scalatest.{BeforeAndAfter, FunSpec, Ignore, Matchers}
-import org.scalatest.mock.MockitoSugar
+import org.scalatestplus.mockito.MockitoSugar
 
 import scala.util.Random
 
diff --git a/sql-interpreter/src/main/scala/org/apache/toree/magic/builtin/Sql.scala b/sql-interpreter/src/main/scala/org/apache/toree/magic/builtin/Sql.scala
index 1d96494..e56dffa 100644
--- a/sql-interpreter/src/main/scala/org/apache/toree/magic/builtin/Sql.scala
+++ b/sql-interpreter/src/main/scala/org/apache/toree/magic/builtin/Sql.scala
@@ -23,6 +23,8 @@ import org.apache.toree.magic.{CellMagic, MagicOutput}
 import org.apache.toree.magic.dependencies.IncludeKernel
 import org.apache.toree.plugins.annotations.Event
 
+import scala.tools.nsc.interpreter
+
 /**
  * Represents the magic interface to use the SQL interpreter.
  */
@@ -38,7 +40,7 @@ class Sql extends CellMagic with IncludeKernel {
     val scala = kernel.interpreter("Scala")
     val evaluated = if (scala.nonEmpty && scala.get != null) {
       val scalaInterpreter = scala.get.asInstanceOf[ScalaInterpreter]
-      scalaInterpreter.iMain.eval("s\"" + code.replace("\n", " ") + "\"").asInstanceOf[String]
+      scalaInterpreter.iMain.valueOfTerm("s\"" + code.replace("\n", " ") + "\"").asInstanceOf[String]
     } else {
       code
     }
@@ -48,7 +50,7 @@ class Sql extends CellMagic with IncludeKernel {
         val (_, output) = sqlInterpreter.interpret(evaluated)
         output match {
           case Left(executeOutput) =>
-            MagicOutput(executeOutput.toSeq:_*)
+            MagicOutput(executeOutput.toSeq: _*)
           case Right(executeFailure) => executeFailure match {
             case executeAborted: ExecuteAborted =>
               throw new SqlException("SQL code was aborted!")