diff --git a/src/root/offline.jl b/src/root/offline.jl
index 5dadd79c0acf99392d6a5f3d7f72897f6e414f27..856e94c1250c5073ff0d2a440fddda6c93ba3150 100644
--- a/src/root/offline.jl
+++ b/src/root/offline.jl
@@ -37,6 +37,21 @@ struct CalibratedMCHit
     dir::Direction{Float64}
 end
 
+"""
+A container object to store fit information which uses 0-based indexing.
+"""
+struct FitInformation
+    values::Vector{Float64}
+end
+Base.getindex(fitinf::FitInformation, idx) = fitinf.values[idx + 1]
+Base.length(fitinf::FitInformation) = length(fitinf.values)
+Base.firstindex(::FitInformation) = 0
+Base.lastindex(fitinf::FitInformation) = length(fitinf) - 1
+Base.eltype(::FitInformation) = Float64
+function Base.iterate(fitinf::FitInformation, state=0)
+    state > length(fitinf) ? nothing : (fitinf[state], state+1)
+end
+
 """
 Represents a reconstructed "track", which can be e.g. a muon track but also a shower.
 """
@@ -50,7 +65,7 @@ struct Trk
     lik::Float64
     rec_type::Int32
     rec_stages::Vector{Int32}
-    fitinf::Vector{Float64}
+    fitinf::FitInformation
 end
 
 """
@@ -304,7 +319,7 @@ function Base.getindex(f::OfflineTree, idx::Integer)
                 e.trks_lik[i],
                 e.trks_rec_type[i],
                 e.trks_rec_stages[i],
-                e.trks_fitinf[i],
+                FitInformation(e.trks_fitinf[i]),
             )
         )
     end
diff --git a/test/root.jl b/test/root.jl
index a277b950b5890e4b6916519449d346a4a33db499..5d3c92bb8fd282a54ecb58403edb1870cecfdc2c 100644
--- a/test/root.jl
+++ b/test/root.jl
@@ -18,7 +18,7 @@ const USRFILE = datapath("offline", "usr-sample.root")
     @test 56 == length(t[1].trks)
     @test 0 == length(t[1].w)
     @test 17 == length(t[1].trks[1].fitinf)
-    @test 0.009290906625313346 == t[end].trks[1].fitinf[1]
+    @test 0.009290906625313346 == t[end].trks[1].fitinf[0]
     close(f)
 
     f = ROOTFile(datapath("offline", "numucc.root"))