diff --git a/benchmarks/data/test_tools.py b/benchmarks/data/test_tools.py
index 58177e2634078b17471001a1d7a73988b1886ef4..b6cfbb48d66f4195572e898cd18011ef51898132 100644
--- a/benchmarks/data/test_tools.py
+++ b/benchmarks/data/test_tools.py
@@ -266,3 +266,53 @@ class TestUnitsTools(unittest.TestCase):
         info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
         xdata = full(0.0, info)
         _result = self.benchmark(get_magnitude, xdata=xdata)
+
+    @pytest.mark.benchmark(group="data-tools-slow")
+    def test_set_units_mul_01_512x256(self):
+        time = dt.datetime(2000, 1, 1)
+        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
+        xdata = full(0.0, info).magnitude
+        _result = self.benchmark(set_units_mul, data=xdata, units=fm.UNITS.Unit("m"))
+
+    @pytest.mark.benchmark(group="data-tools-slow")
+    def test_set_units_mul_02_1024x512(self):
+        time = dt.datetime(2000, 1, 1)
+        info = fm.Info(time=time, grid=fm.UniformGrid((1024, 512)), units="m")
+        xdata = full(0.0, info).magnitude
+        _result = self.benchmark(set_units_mul, data=xdata, units=fm.UNITS.Unit("m"))
+
+    @pytest.mark.benchmark(group="data-tools-slow")
+    def test_set_units_mul_03_2048x1024(self):
+        time = dt.datetime(2000, 1, 1)
+        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
+        xdata = full(0.0, info).magnitude
+        _result = self.benchmark(set_units_mul, data=xdata, units=fm.UNITS.Unit("m"))
+
+    @pytest.mark.benchmark(group="data-tools-slow")
+    def test_set_units_quant_01_512x256(self):
+        time = dt.datetime(2000, 1, 1)
+        info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m")
+        xdata = full(0.0, info).magnitude
+        _result = self.benchmark(set_units_qua, data=xdata, units=fm.UNITS.Unit("m"))
+
+    @pytest.mark.benchmark(group="data-tools-slow")
+    def test_set_units_quant_02_1024x512(self):
+        time = dt.datetime(2000, 1, 1)
+        info = fm.Info(time=time, grid=fm.UniformGrid((1024, 512)), units="m")
+        xdata = full(0.0, info).magnitude
+        _result = self.benchmark(set_units_qua, data=xdata, units=fm.UNITS.Unit("m"))
+
+    @pytest.mark.benchmark(group="data-tools-slow")
+    def test_set_units_quant_03_2048x1024(self):
+        time = dt.datetime(2000, 1, 1)
+        info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m")
+        xdata = full(0.0, info).magnitude
+        _result = self.benchmark(set_units_qua, data=xdata, units=fm.UNITS.Unit("m"))
+
+
+def set_units_mul(data, units):
+    return data * units
+
+
+def set_units_qua(data, units):
+    return fm.UNITS.Quantity(data, units)
diff --git a/benchmarks/profiling/mem_huge_memory.py b/benchmarks/profiling/mem_huge_memory.py
index cbed59fc0dfacb192d1b45bf25fe1c04f85a675b..5d7d18b55fb9736234f8ac5cb756a621d06cc890 100644
--- a/benchmarks/profiling/mem_huge_memory.py
+++ b/benchmarks/profiling/mem_huge_memory.py
@@ -13,11 +13,9 @@ if __name__ == "__main__":
     info1 = fm.Info(time=None, grid=fm.UniformGrid(size), units="m")
     data = fm.data.to_xarray(fm.data.full(0.0, info1), info1)
 
-
     def gen_data(t):
         return np.copy(data)
 
-
     source = fm.modules.CallbackGenerator(
         callbacks={"Out": (gen_data, info1.copy())},
         start=start_time,
diff --git a/src/finam/data/tools.py b/src/finam/data/tools.py
index 35cb8c34a58e15a1b093ca5dbaf362ee6413517b..7617c4ca0a22a05dee04fbfa5088b72ff4da0de4 100644
--- a/src/finam/data/tools.py
+++ b/src/finam/data/tools.py
@@ -66,9 +66,15 @@ def prepare(data, info, time_entries=1, force_copy=False):
             data = data.copy()
     else:
         if isinstance(data, np.ndarray):
-            data = data * units
+            if force_copy:
+                data = data * units
+            else:
+                data = UNITS.Quantity(data, units)
         else:
-            data = np.asarray(data) * units
+            if force_copy:
+                data = np.asarray(data) * units
+            else:
+                data = UNITS.Quantity(np.asarray(data), units)
 
     data = _check_input_shape(data, info, time_entries)
     return data