diff --git a/core/src/main/scala/spark/broadcast/HttpBroadcast.scala b/core/src/main/scala/spark/broadcast/HttpBroadcast.scala
index ba8ba10141f933d3e3607d3d10e5ec1b87c7aa6e..c9f4aaa89a239fba60ad37b10c03c9177ee0f6e3 100644
--- a/core/src/main/scala/spark/broadcast/HttpBroadcast.scala
+++ b/core/src/main/scala/spark/broadcast/HttpBroadcast.scala
@@ -34,7 +34,7 @@ extends Broadcast[T] with Logging with Serializable {
       } else {
         logInfo("Started reading broadcast variable " + uuid)
         val start = System.nanoTime
-        value_ = HttpBroadcast.read(uuid).asInstanceOf[T]
+        value_ = HttpBroadcast.read[T](uuid)
         HttpBroadcast.values.put(uuid, 0, value_)
         val time = (System.nanoTime - start) / 1e9
         logInfo("Reading broadcast variable " + uuid + " took " + time + " s")
@@ -95,7 +95,7 @@ private object HttpBroadcast extends Logging {
     serOut.close()
   }
 
-  def read(uuid: UUID): Any = {
+  def read[T](uuid: UUID): T = {
     val url = serverUri + "/broadcast-" + uuid
     var in = if (compress) {
       new LZFInputStream(new URL(url).openStream()) // Does its own buffering
@@ -104,7 +104,7 @@ private object HttpBroadcast extends Logging {
     }
     val ser = SparkEnv.get.serializer.newInstance()
     val serIn = ser.inputStream(in)
-    val obj = serIn.readObject()
+    val obj = serIn.readObject[T]()
     serIn.close()
     obj
   }