diff --git a/classes/DataWrapper.m b/classes/DataWrapper.m
index 3fa54c678173b1ecbbce4cdee89e04f995674ec1..6d484e266694e71cfd7d196163a7167963f06402 100644
--- a/classes/DataWrapper.m
+++ b/classes/DataWrapper.m
@@ -51,6 +51,16 @@ classdef DataWrapper < handle
             obj.data(obj.counter + 1) = data;
         end
 
+        function out = getData(obj, startIdx)
+            % detData - Reads data from wrapper
+            %   This action will NOT reset cache
+            arguments
+                obj
+                startIdx = 1
+            end
+            out = obj.data(startIdx:obj.counter);
+        end
+
         function setData(obj)
             % setData - Promoted current data stored in cache
             %   promoted data will be saved until wrapper is reset
@@ -71,16 +81,6 @@ classdef DataWrapper < handle
             obj.reset();
         end
 
-        function out = getData(obj, startIdx)
-            % detData - Reads data from wrapper
-            %   This action will NOT reset cache
-            arguments
-                obj
-                startIdx = 1
-            end
-            out = obj.data(startIdx:obj.counter);
-        end
-
         function obj = reset(obj)
             % reset - Resets cache to starting conditions
 
@@ -106,7 +106,7 @@ classdef DataWrapper < handle
                 currentValue = [data.(currentField)];
 
                 if isstruct(currentValue)
-                    out.(currentField) = DataWrapper.packageData([data.(currentField)]);
+                    out.(currentField) = DataWrapper.packageData(currentValue);
                 else
                     sz = size(data(1).(currentField));
                     if all(sz > 1)
diff --git a/functions/miscellaneous/getOdeFcn.m b/functions/miscellaneous/getOdeFcn.m
index d8dbc0c40c6442f4d669948d95d19ab142846972..3b23cd91d87ac4a4d6a10f829fe27a1c7a08916d 100644
--- a/functions/miscellaneous/getOdeFcn.m
+++ b/functions/miscellaneous/getOdeFcn.m
@@ -1,11 +1,11 @@
 function out = getOdeFcn(solution, startIdx)
 arguments
-    solution
-    startIdx = 1
+    solution    (1, :)  struct
+    startIdx    (1, 1)  double  = 1
 end
 % recallOdeFcn - This function allows to compute some parameters used
 %                inside the ODE integrations.
-% 
+%
 % INPUTS:
 %         - fun, function, ode function used;
 %         - T, double [n° variation, 1], integration time vector;
@@ -17,18 +17,33 @@ end
 %                             * m , total mass;
 %                             * (Ixx Iyy Izz), Inertias;
 %                             * (q0 q1 q2 q3), attitude unit quaternion.
-% 
+%
 % OUTPUTS:
 %         - allSteps, struct, which contains all the parameters needed.
 
-args = solution.extdata.varargin;
-fun = solution.extdata.odefun;
+if length(solution) == 1
+    args = solution.extdata.varargin;
+    fun = solution.extdata.odefun;
 
-wrapper = args{end};
-data = wrapper.getData(startIdx);
+    wrapper = args{end};
+    data = wrapper.getData(startIdx);
 
-%% Fixing points at t = 0, t = end
+    %% Fixing points at t = 0, t = end
+
+    [~, data(1)] = fun(solution.x(startIdx), solution.y(:,startIdx), args{1:end-1});
+    [~, data(end)] = fun(solution.x(end), solution.y(:,end), args{1:end-1});
+else
+    extData = [solution.extdata];
+    startFun = extData(1).odefun;
+    startArgs = extData(1).varargin;
+    endFun = extData(end).odefun;
+    endArgs = extData(end).varargin;
+
+    wrapper = endArgs{end};
+    data = wrapper.getData(startIdx);
+
+    [~, data(1)] = startFun(solution(1).x(startIdx), solution(1).y(:,startIdx), startArgs{1:end-1});
+    [~, data(end)] = endFun(solution(end).x(end), solution(end).y(:,end), endArgs{1:end-1});
+end
 
-[~, data(1)] = fun(solution.x(startIdx), solution.y(:,startIdx), args{1:end-1});
-[~, data(end)] = fun(solution.x(end), solution.y(:,end), args{1:end-1});
 out = wrapper.packageData(data);
\ No newline at end of file