diff --git a/applications/SphericalHarmonics/ita_sph_mimo_error_simulation.m b/applications/SphericalHarmonics/ita_sph_mimo_error_simulation.m
index 979af99c101407a58eda1f67c8fbc92d42f9f5c7..0af3103f5f82f33a06893a384973bd698ba32b03 100644
--- a/applications/SphericalHarmonics/ita_sph_mimo_error_simulation.m
+++ b/applications/SphericalHarmonics/ita_sph_mimo_error_simulation.m
@@ -41,6 +41,7 @@ sArgs = struct('pos1_source','struct',...
                'samplingRate',ita_preferences('samplingRate'),...
                'freqRange',[20 ita_preferences('samplingRate')/2],...
                'samplingDisplacement',[],...
+			   'samplingDisplacementAbsolute',false,...
                'nRuns',1,...
                'SNR',60,...
                'sma',true,...
@@ -66,6 +67,7 @@ simSLA = sArgs.sla;
 
 SNR = sArgs.SNR;
 samplingDisplacement = sArgs.samplingDisplacement;
+displacementType = sArgs.samplingDisplacementAbsolute;
 
 ao = ita_generate_impulse('fftDegree',sArgs.fftDegree,'samplingRate',sArgs.samplingRate);
 freqVec = ao.freqVector(ao.freq2index(sArgs.freqRange(1)):ao.freq2index(sArgs.freqRange(2)));
@@ -269,19 +271,27 @@ for idxRun = 1:sArgs.nRuns
         if ~isempty(samplingDisplacement) && isempty(SNR)
             
             if simSMA
-                receiverSamplingErroneous = ita_sampling_displacement(receiverSampling,'relativeError',samplingDisplacement);
+                receiverSamplingErroneous = ita_sph_sampling_displacement(receiverSampling,samplingDisplacement,'absolute',displacementType);
                 receiverYmismatch = ita_sph_base(receiverSamplingErroneous,receiverNmax);
                 EreceiverMismatch = ita_sph_modal_strength(receiverSamplingErroneous,receiverNmax,kVec(idxFreq),'rigid');
-                EreceiverMismatch = EreceiverMismatch.*receiverYmismatch - Mreceiver;
+                if receiverSamplingUniqueRad
+                    EreceiverMismatch = receiverYmismatch*EreceiverMismatch - Mreceiver;
+                else
+                    EreceiverMismatch = receiverYmismatch.*EreceiverMismatch - Mreceiver;
+                end
             else
                 EreceiverMismatch = [];
             end
             if simSLA
-                sourceSamplingErroneous = ita_sampling_displacement(sourceSampling,'relativeError',samplingDisplacement);
+                sourceSamplingErroneous = ita_sph_sampling_displacement(sourceSampling,samplingDisplacement,'absolute',displacementType);
                 sourceYmismatch = ita_sph_base(sourceSamplingErroneous,sourceNmax);
                 sourceGmismatch = ita_sph_aperture_function_sla(sourceSamplingErroneous,sourceNmax,sourcerMem,'r',unique(sourceSamplingR));
                 EsourceMismatch = ita_sph_modal_strength(sourceSamplingErroneous,sourceNmax,kVec(idxFreq),'rigid','transducer','ls');
-                EsourceMismatch = (EsourceMismatch.' .* (sourceGmismatch.'.*sourceYmismatch')) - Msource;
+                if numel(unique(sourceSampling.r)) == 1
+                    EsourceMismatch = (EsourceMismatch * (sourceGmismatch.'.*sourceYmismatch')) - Msource;
+                else
+                    EsourceMismatch = (EsourceMismatch.' .* (sourceGmismatch.'.*sourceYmismatch')) - Msource;
+                end
             else
                 EsourceMismatch = [];
             end
diff --git a/applications/SphericalHarmonics/ita_sph_sampling/ita_sph_sampling_displacement.m b/applications/SphericalHarmonics/ita_sph_sampling/ita_sph_sampling_displacement.m
index 8d393088f9cc89cda09a3b6e4f4b521023dc2794..1869b7ead14c5163f6845d5d6b435d14f31101ef 100644
--- a/applications/SphericalHarmonics/ita_sph_sampling/ita_sph_sampling_displacement.m
+++ b/applications/SphericalHarmonics/ita_sph_sampling/ita_sph_sampling_displacement.m
@@ -1,19 +1,24 @@
 function varargout = ita_sph_sampling_displacement(varargin)
 %ITA_SPH_SAMPLING_DISPLACEMENT - displaced sampling positions
 %  This function creates a sampling grid with an additive error in the sampling
-%  positions taken from a given sampling grid
+%  positions taken from a given sampling grid. The default option for the displacement
+%  is a relative displacement in percent/100. For a absolute displacement in meters
+%  choose the option 'absolute'.
 %  
 %   Syntax:
-%   samplingDisplaced = ita_sph_sampling_displacement(sampling, opts)
+%   samplingDisplaced = ita_sph_sampling_displacement(sampling, displacement, opts)
 %
 %   Options (default):
-%           'relativeError' ([0.1,0.1,0.1]) : relative displacement in percent/100
+%			'absolute' (false)	: displacement is a absolute value
+%			'weightPoles' (true): weigting for smaller errors towards the poles
+%			'projectRad' (true)	: project displaced sampling back onto the original radius
+%
 %
 %  Example:
-%   samplingDisplaced = ita_sph_sampling_displacement(sampling, [0.01,0.01,0.01])
+%   samplingDisplaced = ita_sph_sampling_displacement(sampling, [5/10,5/10,5/10] * 1e-3, 'absolute')
 %
 %  See also:
-%   ita_toolbox_gui, ita_read, ita_write, ita_generate
+%   ita_sph_sampling, ita_sph_mimo_error_simulation
 %
 %   Reference page in Help browser 
 %        <a href="matlab:doc ita_sph_sampling_displacement">doc ita_sph_sampling_displacement</a>
@@ -27,39 +32,41 @@ function varargout = ita_sph_sampling_displacement(varargin)
 % Author: Marco Berzborn -- Email: marco.berzborn@akustik.rwth-aachen.de
 % Created:  29-Mar-2016 
 
-
-%% Initialization and Input Parsing
-
 sArgs = struct('pos1_sampling','itaCoordinates',...
-               'relativeError',[0.01 0.01 0.01]);
-[sampling, sArgs] = ita_parse_arguments(sArgs,varargin);
+               'pos2_error','double',...
+			   'absolute',false,...
+			   'weightPoles',true,...
+               'projectRad',true);
+[sampling, displacement, sArgs] = ita_parse_arguments(sArgs,varargin);
 
-if isempty(sArgs.relativeError)
-    sArgs.relativeError = zeros(1,3);
-elseif numel(sArgs.relativeError) == 1
-    sArgs.relativeError = repmat(sArgs.relativeError,1,3);
+if numel(displacement) == 1
+	displacement = repmat(displacement,1,3);
 end
 
-posError = randn(size(sampling.sph));
-posError = (bsxfun(@rdivide,posError,sqrt(sum(posError.^2,2))) .* repmat(sampling.sph(:,1),1,3)) * diag(sArgs.relativeError);
+if ~sArgs.absolute
+	posError = randn(size(sampling.sph));
+	posError = (bsxfun(@rdivide,posError,sqrt(sum(posError.^2,2))) .* repmat(sampling.sph(:,1),1,3)) * diag(displacement);
+elseif sArgs.absolute
+	posError = randn(size(sampling.sph));
+	posError = bsxfun(@rdivide,posError,sqrt(sum(posError.^2,2))) * diag(displacement);
+end
 
 posError = itaCoordinates(posError,'cart');
-posError = posError.makeSph;
-% consideration of the smaller deviations towards the poles
-% Ref: Rafaely - 2005 - Analysis and Design of Spherical Microphone Arrays
-posError.sph(:,2) = posError.sph(:,2)./sin(sampling.theta);
-
-posError = posError.makeCart;
+if sArgs.weightPoles
+	% consideration of the smaller deviations towards the poles
+	% Ref: Rafaely - 2005 - Analysis and Design of Spherical Microphone Arrays
+	posError.sph(:,2) = posError.sph(:,2)./sin(sampling.theta);
 
-% set all NaNs and Infs to zero as they are not wanted and lead to missing
-% sampling points.
-posError.cart(isnan(posError.cart)) = 0;
-posError.cart(isinf(posError.cart)) = 0;
 
+	% set all NaNs and Infs to zero as they are not wanted and lead to missing
+	% sampling points.
+	posError.cart(isnan(posError.cart)) = 0;
+	posError.cart(isinf(posError.cart)) = 0;
+end
 % new sampling coordinates with erroneous positions
 samplingError = itaCoordinates(sampling.cart + posError.cart,'cart');
 
-if sArgs.relativeError(:,1) == 0
+if sArgs.projectRad
     samplingError.sph(:,1) = sampling.sph(:,1);
 end