Add `parent_span_id` field
diff --git a/src/jaeger_passage_span_context.erl b/src/jaeger_passage_span_context.erl
index cbf01f9..9d86f1f 100644
--- a/src/jaeger_passage_span_context.erl
+++ b/src/jaeger_passage_span_context.erl
@@ -26,6 +26,7 @@
 %%------------------------------------------------------------------------------
 -export([get_trace_id/1]).
 -export([get_span_id/1]).
+-export([get_parent_span_id/1]).
 -export([get_debug_id/1]).
 -export([get_flags/1]).
 
@@ -44,8 +45,9 @@
 
 -record(?STATE,
         {
-          trace_id   = 0     :: trace_id(),
-          span_id    = 0     :: span_id(),
+          trace_id = 0       :: trace_id(),
+          span_id = 0        :: span_id(),
+          parent_span_id = 0 :: span_id(),
           is_sampled = false :: boolean(),
           debug_id           :: binary() | undefined
         }).
@@ -86,6 +88,10 @@
 get_span_id(Context) ->
     (passage_span_context:get_state(Context))#?STATE.span_id.
 
+-spec get_parent_span_id(passage_span_context:context()) -> span_id().
+get_parent_span_id(Context) ->
+    (passage_span_context:get_state(Context))#?STATE.parent_span_id.
+
 %% @private
 -spec get_debug_id(passage_span_context:context()) -> {ok, binary()} | eror.
 get_debug_id(Context) ->
@@ -111,13 +117,19 @@
         span_id    = rand:uniform(16#FFFFFFFFFFFFFFFF),
         is_sampled = true
        };
-make_span_context_state([{_, Ref} | _]) ->
-    #?STATE{trace_id = TraceId} =
+make_span_context_state([{Type, Ref} | _]) ->
+    #?STATE{trace_id = TraceId, span_id = RefSpanId, parent_span_id = RefParentId} =
         passage_span_context:get_state(passage_span:get_context(Ref)),
+    ParentId =
+        case Type of
+            child_of     -> RefSpanId;
+            follows_from -> RefParentId
+        end,
     #?STATE{
-        trace_id   = TraceId,
-        span_id    = rand:uniform(16#FFFFFFFFFFFFFFFF),
-        is_sampled = true
+        trace_id       = TraceId,
+        span_id        = rand:uniform(16#FFFFFFFFFFFFFFFF),
+        parent_span_id = ParentId,
+        is_sampled     = true
        }.
 
 %% @private
@@ -226,34 +238,36 @@
     FlagSampled + FlagDebug.
 
 -spec state_to_string(#?STATE{}) -> binary().
-state_to_string(State = #?STATE{trace_id = TraceId, span_id = SpanId}) ->
-    DummyParentId = 0,
+state_to_string(State) ->
+    #?STATE{trace_id = TraceId, span_id = SpanId, parent_span_id = ParentId} = State,
     Flags = get_flags_from_state(State),
     list_to_binary(io_lib:format("~.16b:~.16b:~.16b:~.16b",
-                                 [TraceId, SpanId, DummyParentId, Flags])).
+                                 [TraceId, SpanId, ParentId, Flags])).
 
 -spec state_from_string(binary()) -> #?STATE{}.
 state_from_string(Str) ->
-    {ok, [TraceId, SpanId, _ParentSpanId, Flags], _} =
+    {ok, [TraceId, SpanId, ParentSpanId, Flags], _} =
         io_lib:fread("~16u:~16u:~16u:~16u", binary_to_list(Str)),
     #?STATE{
         trace_id = TraceId,
         span_id = SpanId,
+        parent_span_id = ParentSpanId,
         is_sampled = (Flags band ?FLAG_SAMPLED) =/= 0
        }.
 
 -spec encode_state(#?STATE{}) -> binary().
-encode_state(State = #?STATE{trace_id = TraceId, span_id = SpanId}) ->
-    DummyParentId = 0,
+encode_state(State) ->
+    #?STATE{trace_id = TraceId, span_id = SpanId, parent_span_id = ParentId} = State,
     Flags = get_flags_from_state(State),
-    <<TraceId:128, SpanId:64, DummyParentId:64, Flags:32>>.
+    <<TraceId:128, SpanId:64, ParentId:64, Flags:32>>.
 
 -spec decode_state(binary()) -> {#?STATE{}, binary()}.
-decode_state(<<TraceId:128, SpanId:64, _:64, Flags:32, Bin/binary>>) ->
+decode_state(<<TraceId:128, SpanId:64, ParentId:64, Flags:32, Bin/binary>>) ->
     State =
         #?STATE{
             trace_id = TraceId,
             span_id = SpanId,
+            parent_span_id = ParentId,
             is_sampled = (Flags band ?FLAG_SAMPLED) =/= 0
            },
     {State, Bin}.
diff --git a/src/jaeger_passage_thrift.erl b/src/jaeger_passage_thrift.erl
index ad71b6c..46726cf 100644
--- a/src/jaeger_passage_thrift.erl
+++ b/src/jaeger_passage_thrift.erl
@@ -98,13 +98,7 @@
 make_span(Span) ->
     Context = passage_span:get_context(Span),
     TraceId = jaeger_passage_span_context:get_trace_id(Context),
-    ParentSpanId =
-        case [Ref || {child_of, Ref} <- passage_span:get_refs(Span)] of
-            []        -> 0;
-            [Ref | _] ->
-                RefContext = passage_span:get_context(Ref),
-                jaeger_passage_span_context:get_span_id(RefContext)
-        end,
+    ParentSpanId = jaeger_passage_span_context:get_parent_span_id(Context),
     Tags0 = passage_span:get_tags(Span),
     Tags1 =
         case jaeger_passage_span_context:get_debug_id(Context) of