diff --git a/+kwave/+tests/+unit/TestElasticMedium.m b/+kwave/+tests/+unit/TestElasticMedium.m
new file mode 100644
index 00000000..7f37c1e4
--- /dev/null
+++ b/+kwave/+tests/+unit/TestElasticMedium.m
@@ -0,0 +1,39 @@
+%% TestElasticMedium
+% *Package:* kwave.tests.unit
+% *Superclasses:* kwave.tests.unit.AbstractTestGridInput
+%
+% Unit tests for the ElasticMedium class using the TestMedium class.
+
+% Copyright (C) 2024- The k-Wave Authors.
+%
+% This file is part of k-Wave-II (http://www.k-wave.org). k-Wave-II is free
+% software: you can redistribute it and/or modify it under the terms of the
+% GNU Lesser General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option) any
+% later version.
+%
+% k-Wave-II is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+% FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+% License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public License
+% along with k-Wave-II. If not, see .
+
+classdef TestElasticMedium < kwave.tests.unit.AbstractTestGridInput
+
+ properties
+ inputClass = 'ElasticMedium'
+ inputProperties = {'density', 'soundSpeedCompression', 'soundSpeedShear', ...
+ 'alphaCoeffCompression', 'alphaCoeffShear'}
+ inputPropertiesPadded = {'densityPadded', 'soundSpeedCompressionPadded', 'soundSpeedShearPadded', ...
+ 'alphaCoeffCompressionPadded', 'alphaCoeffShearPadded'}
+ inputPropertiesScalar = {}
+ inputPropertiesComplex = {}
+ inputPropertiesVectorField = {}
+ end
+
+ methods(Test)
+ end
+
+end
diff --git a/+kwave/+toolbox/@ElasticMedium/ElasticMedium.m b/+kwave/+toolbox/@ElasticMedium/ElasticMedium.m
new file mode 100644
index 00000000..6cb09d92
--- /dev/null
+++ b/+kwave/+toolbox/@ElasticMedium/ElasticMedium.m
@@ -0,0 +1,72 @@
+%% ElasticMedium
+% *Package:* kwave.toolbox
+% *Superclasses:* kwave.toolbox.GridInput
+%
+% Class used to define the elastic medium properties for a simulation.
+%
+%% Syntax
+% medium = ElasticMedium(kgrid);
+%
+%% Description
+% This class is used to define the elastic medium properties. The
+% constructor takes an object of the |kwave.toolbox.Grid| class which
+% defines the grid size. All medium properties can be scalar or have
+% the same size as the grid. The |soundSpeedCompression|,
+% |soundSpeedShear| and |density| must be defined, while the
+% |soundSpeedCompression| and |soundSpeedShear| are used only with the
+% Kelvin-Voigt model.
+%
+%% Examples
+% Define the grid and medium objects, and assign the sound speed and
+% density.
+%
+% kgrid = kwave.toolbox.Grid([128, 128], 1e-3);
+% medium = kwave.toolbox.ElasticMedium(kgrid);
+% medium.soundSpeedShear = rand(medium.gridSize);
+% medium.soundSpeedCompression = rand(medium.gridSize);
+% medium.density = rand(medium.gridSize);
+%
+%% Properties
+% * |density| - (single) Mass density [kg/m^2].
+% * |soundSpeedCompression| - (single) Compressional sound speed
+% * distribution within the acoustic medium [m/s].
+% * |soundSpeedShear| - (single) Shear sound speed distribution within
+% * the acoustic medium [m/s].
+% * |alphaCoeffCompression| - (single) Power law absorption coefficient
+% * for compressional waves [dB/(MHz^2 cm)]
+% * |alphaCoeffShear| - (single) Power law absorption coefficient for
+% * shear waves [dB/(MHz^2 cm)]
+%
+%% See Also
+% * |GridInput|
+
+% Copyright (C) 2024- The k-Wave Authors.
+%
+% This file is part of k-Wave-II (http://www.k-wave.org). k-Wave-II is free
+% software: you can redistribute it and/or modify it under the terms of the
+% GNU Lesser General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option) any
+% later version.
+%
+% k-Wave-II is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+% FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+% License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public License
+% along with k-Wave-II. If not, see .
+
+classdef ElasticMedium < kwave.toolbox.GridInput
+
+ properties(Constant, Hidden=true)
+ requiredProperties = {'density', 'soundSpeedCompression', 'soundSpeedShear'};
+ gridFields = kwave.toolbox.GridField.createGridFieldsMap([
+ kwave.toolbox.GridField('density');
+ kwave.toolbox.GridField('soundSpeedCompression');
+ kwave.toolbox.GridField('soundSpeedShear');
+ kwave.toolbox.GridField('alphaCoeffCompression');
+ kwave.toolbox.GridField('alphaCoeffShear');
+ ]);
+ end
+
+end