Fix linking mechanism in record formatting
diff --git a/rebar.config b/rebar.config
index 947b2ba..5feb77d 100644
--- a/rebar.config
+++ b/rebar.config
@@ -1,5 +1,5 @@
 {profiles, [
     {test, [
-        {erl_ops, [nowarn_expor_all, {d, 'TEST'}]}
+        {erl_opts, [nowarn_export_all, {d, 'TEST'}]}
     ]}
 ]}.
diff --git a/src/recon_rec.erl b/src/recon_rec.erl
index 0cac3fb..5e3042b 100644
--- a/src/recon_rec.erl
+++ b/src/recon_rec.erl
@@ -28,8 +28,8 @@
 -type limit() :: all | none | field() | [field()].
 -type listentry() :: {module(), record_name(), [field()], limit()}.
 -type import_result() :: {imported, module(), record_name(), arity()}
-                         | {overwritten, module(), record_name(), arity()}
-                         | {ignored, module(), record_name(), arity(), module()}.
+                       | {overwritten, module(), record_name(), arity()}
+                       | {ignored, module(), record_name(), arity(), module()}.
 
 %% @doc import record definitions from a module. If a record definition of the same name
 %% and arity has already been imported from another module then the new
@@ -70,8 +70,10 @@
     F = fun({Module, Name, Fields, Limits}) ->
             Fnames = lists:map(fun atom_to_list/1, Fields),
             Flds = join(",", Fnames),
-            io:format("~p: #~p(~p){~s} ~p~n", [Module, Name, length(Fields), Flds, Limits])
+            io:format("~p: #~p(~p){~s} ~p~n",
+                      [Module, Name, length(Fields), Flds, Limits])
         end,
+    io:format("Module: #Name(Size){<Fields>} Limits~n==========~n", []),
     lists:foreach(F, get_list()).
 
 %% @doc returns a list of active record definitions
@@ -151,16 +153,19 @@
 ensure_table_exists() ->
     case ets:info(ets_table_name()) of
         undefined ->
-            Pid = case whereis(recon_ets) of
-                      undefined ->
-                          P = spawn(fun() -> ets_keeper() end),
-                          register(recon_ets, P),
-                          P;
-                      P -> P
-                  end,
-            ets:new(ets_table_name(), [set, public, named_table]),
-            ets:give_away(ets_table_name(), Pid, none);
-        _ -> ok
+            case whereis(recon_ets) of
+                undefined ->
+                    %% attach to the currently running session
+                    spawn_link(fun() ->
+                        register(recon_ets, self()),
+                        ets:new(ets_table_name(), [set, public, named_table]),
+                        ets_keeper()
+                    end);
+                P ->
+                    P
+            end;
+        _ ->
+            ok
     end.
 
 ets_table_name() -> recon_record_definitions.
@@ -170,7 +175,8 @@
 
 rem_for_module({_, _, Module, _} = Rec, Module) ->
     ets:delete_object(ets_table_name(), Rec);
-rem_for_module(_, _) -> ok.
+rem_for_module(_, _) ->
+    ok.
 
 ets_keeper() ->
     receive
@@ -224,7 +230,7 @@
 apply_limits(List, Field) when is_atom(Field) ->
     [{Field, proplists:get_value(Field, List)}, {more, '...'}];
 apply_limits(List, Limits) ->
-    lists:filter(fun({K, _}) -> lists:member(K, Limits) end, List) ++ [{more, '...'}].
+    [lists:filter(fun({K, _}) -> lists:member(K, Limits) end, List), {more, '...'}].
 
 %%%%%%%%%%%%%%%
 %%% HELPERS %%%
diff --git a/src/recon_trace.erl b/src/recon_trace.erl
index 8cb4671..649c166 100644
--- a/src/recon_trace.erl
+++ b/src/recon_trace.erl
@@ -169,6 +169,13 @@
 %%% The only output still sent to the Group Leader is the rate limit being
 %%% tripped, and any errors. The rest will be sent to the other IO
 %%% server (see [http://erlang.org/doc/apps/stdlib/io_protocol.html]).
+%%%
+%%% == Record Printing ==
+%%%
+%%% Thanks to code contributed by Bartek Górny, record printing can be added
+%%% to traces by first importing records in an active session with
+%%% `recon_rec:import([Module, ...])', after which the records declared in
+%%% the module list will be supported.
 %%% @end
 -module(recon_trace).
 
@@ -598,10 +605,10 @@
     {0,0,0}.
 
 format_args(Arity) when is_integer(Arity) ->
-    ["/", integer_to_list(Arity)];
+    [$/, integer_to_list(Arity)];
 format_args(Args) when is_list(Args) ->
     Active = recon_rec:is_active(),
-    ["(", join(", ", [format_trace_output(Active, Arg) || Arg <- Args]), ")"].
+    [$(, join(", ", [format_trace_output(Active, Arg) || Arg <- Args]), $)].
 
 
 %% @doc formats call arguments and return values - most types are just printed out, except for
@@ -614,10 +621,11 @@
     recon_rec:format_tuple(Args);
 format_trace_output(true, Args) when is_list(Args) ->
     case io_lib:printable_list(Args) of
-        true -> io_lib:format("~p", [Args]);
+        true ->
+            io_lib:format("~p", [Args]);
         false ->
             L = lists:map(fun(A) -> format_trace_output(true, A) end, Args),
-            "[" ++ join(", ", L) ++ "]"
+            [$[, join(", ", L), $]]
     end;
 format_trace_output(true, Args) when is_map(Args) ->
     ItemList = maps:to_list(Args),