diff --git a/datadog-tracing.cabal b/datadog-tracing.cabal
--- a/datadog-tracing.cabal
+++ b/datadog-tracing.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                datadog-tracing
-version:             1.4.2
+version:             1.5.0
 synopsis:            Datadog tracing client and mock agent.
 license:             BSD-3-Clause
 license-file:        LICENSE
@@ -34,6 +34,7 @@
   build-depends:    , base ^>= 4.11.1.0 || ^>= 4.12.0.0
                     , bytestring           ^>= 0.10.8.2
                     , containers ^>= 0.5.11.0 || ^>= 0.6.0.1
+                    , jaeger-flamegraph    ^>= 1.3.0
                     , mtl                  ^>= 2.2.2
                     , text                 ^>= 1.2.3.1
                     , aeson                ^>= 1.4.1.0
@@ -61,7 +62,7 @@
                     , time            ^>= 1.8.0.2
                     , unordered-containers ^>= 0.2.9.0
                     , vector          ^>= 0.12.0.2
-                    , QuickCheck      ^>= 2.11.3
+                    , QuickCheck      ^>= 2.11.3 || ^>= 2.12.6.1
                     , quickcheck-text ^>= 0.1.2.1
 
 executable datadog-agent
diff --git a/exe/Main.hs b/exe/Main.hs
--- a/exe/Main.hs
+++ b/exe/Main.hs
@@ -13,6 +13,7 @@
 import           Data.Default                              (def)
 import           Data.IORef
 import qualified Data.Map.Strict                           as M
+import           Jaeger.Data
 import           Network.Wai.Handler.Warp                  (run)
 import           Network.Wai.Middleware.RequestLogger
 import           Network.Wai.Middleware.RequestLogger.JSON (formatAsJSON)
diff --git a/library/Datadog/Jaeger.hs b/library/Datadog/Jaeger.hs
--- a/library/Datadog/Jaeger.hs
+++ b/library/Datadog/Jaeger.hs
@@ -14,12 +14,10 @@
 
 import           Data.Aeson
 import           Data.List       (nub)
-import           Data.Map.Strict (Map)
 import qualified Data.Map.Strict as M
 import           Data.Maybe      (mapMaybe, maybeToList)
-import           Data.Text       (Text)
 import qualified Data.Text       as T
-import           GHC.Generics    (Generic)
+import           Jaeger.Data
 import           Servant.API
 
 import qualified Datadog.Agent   as Agent
@@ -49,45 +47,4 @@
               (ProcessID spanService)
     services spans = nub $ Agent.spanService <$> spans
     showt = T.pack . show
-    mkTag (k, v) = Tag k v
-
-newtype Jaeger = Jaeger [Data]
-instance ToJSON Jaeger where
-  toJSON (Jaeger dat) = object ["data" .= dat]
-
-newtype TraceID   = TraceID Text deriving newtype (Eq, Ord, ToJSON)
-newtype SpanID    = SpanID  Text deriving newtype (Eq, Ord, ToJSON)
-newtype ProcessID = ProcessID Text deriving newtype (Eq, Ord, ToJSON, ToJSONKey)
-newtype Name      = Name Text deriving newtype (Eq, ToJSON)
-
-data Data = Data
-  { traceID   :: TraceID
-  , spans     :: [Span]
-  , processes :: Map ProcessID Process
-  } deriving (Generic, ToJSON)
-
-data Process = Process
-  { serviceName :: Text
-  } deriving (Generic, ToJSON)
-
-data Span = Span
-  { spanID        :: SpanID
-  , traceID       :: TraceID
-  , operationName :: Name
-  , references    :: [Reference]
-  , startTime     :: Integer
-  , duration      :: Integer
-  , tags          :: [Tag]
-  , processID     :: ProcessID
-  } deriving (Generic, ToJSON)
-
-data Reference = Reference
-  { traceID :: TraceID
-  , spanID  :: SpanID
-  } deriving (Eq, Ord, Generic, ToJSON)
-
-data Tag = Tag
-  { key   :: Text
-  , value :: Text
-  } deriving (Eq, Generic)
-    deriving anyclass (ToJSON)
+    mkTag (k, v) = Tag k (String v)
