diff --git a/@BearImp/calcCap.m b/@BearImp/calcCap.m
index c2c2160f560fd586f46eb61a0c98afbf27a56ba2..8c7e377d6facefb142027205882be17cdb8ba93f 100644
--- a/@BearImp/calcCap.m
+++ b/@BearImp/calcCap.m
@@ -62,16 +62,27 @@ for posBall_conductive=1:L.numberOfConductiveBalls
     tempR_li = G.R_li(ballMaterialInd(posBall_conductive));
     tempR_la = G.R_la(ballMaterialInd(posBall_conductive));
     tempR_RE = G.R_RE(ballMaterialInd(posBall_conductive));
-    if any(C.method.outsideArea == {'Schneider_k_c','Schneider_k_vh'})
-        tempG = H.G (:,:,posBall_conductive);
-        tempW = H.W (:,:,posBall_conductive);
+    if any([C.method.outsideArea == {'Schneider_k_c','Schneider_k_vh'} C.method.pressureDistribution == 'on'])
+        tempG = H.G(:,:,posBall_conductive);
+        tempW = H.W(:,:,posBall_conductive);
     end
         
     contactInd=B.contactInd(posBall_conductive,:);
     
-    C.rhoRatio = 1  +  (9.73e-3 .* (temp_p.*0.101972e-6).^0.75)  ./  (T.nu_38.*1e6).^0.0385;
-    C.epsilon_primeOil = (S.epsilon_Oel + 2 + 2*(S.epsilon_Oel-1).*C.rhoRatio)  ./  (S.epsilon_Oel + 2 - (S.epsilon_Oel-1).*C.rhoRatio);
-    C.C_Hertz(:,contactInd,posBall_conductive) = obj.epsilon_0 .* C.epsilon_primeOil(:,contactInd) .* temp_A(:,contactInd) ./ temp_h_0(:,contactInd);
+    C.rhoRatio = @(p) 1  +  (9.73e-3 .* (p.*0.101972e-6).^0.75)  ./  (T.nu_38.*1e6).^0.0385;
+    C.epsilon_primeOil = @(p) (S.epsilon_Oel + 2 + 2*(S.epsilon_Oel-1).*C.rhoRatio(p))  ./  (S.epsilon_Oel + 2 - (S.epsilon_Oel-1).*C.rhoRatio(p));
+    if C.method.pressureDistribution == 'on'
+        for io = 1:size(temp_a,1)
+            for singleContInd = find(contactInd)
+                p_max = 3/2*temp_p(io,singleContInd); % Hamrock/Dowson (3.6), S. 71
+                p_fcn = @(x,y) p_max .* sqrt(1-(x./temp_a(io,singleContInd)).^2-(y./temp_b(io,singleContInd)).^2);
+                epsByH_fcn = @(x,y) 4 * obj.epsilon_0 .* C.epsilon_primeOil(p_fcn(x,y)) ./ temp_h_0(io,singleContInd);
+                C.C_Hertz(io,singleContInd,posBall_conductive) = integral2(epsByH_fcn,0,temp_a(io,singleContInd),0,@(x) temp_b(io,singleContInd).*sqrt(1-(x./temp_a(io,singleContInd)).^2));
+            end
+        end
+    else
+        C.C_Hertz(:,contactInd,posBall_conductive) = obj.epsilon_0 .* C.epsilon_primeOil(temp_p(:,contactInd)) .* temp_A(:,contactInd) ./ temp_h_0(:,contactInd);
+    end
  
     R_el_single(:,contactInd,posBall_conductive) = 1./C.k_R .* S.rho_el .* temp_h_0(:,contactInd) ./ temp_A(:,contactInd);
     C.DeltaR_i(contactInd)    = tempR_li - tempR_RE - temp_h_0(1,contactInd);
@@ -120,11 +131,7 @@ for posBall_conductive=1:L.numberOfConductiveBalls
             stateOfTheArt(find(contactInd==1))
         case 'Schneider_k_c'
             C.k_c  = 9.5923 * H.U.^0.3305 .* tempG.^0.3413 .* tempW.^(-0.3342) .* G.k.^0.1391;
-            %C.C_Hertz(:,contactInd,posBall_conductive) = k_c(:,contactInd,posBall_conductive) .* C.C_Hertz(:,contactInd,posBall_conductive);
             C.C_out(:,contactInd,posBall_conductive) = (C.k_c (:,contactInd,posBall_conductive)-1) .* C.C_Hertz(:,contactInd,posBall_conductive);
-        case 'Schneider_k_vh'
-            C.k_vh = 0.7772 * H.U.^0.0451 .* tempG.^0.1522 .* tempW.^(-0.0245) .* G.k.^(-0.0921);
-            C.C_out(:,contactInd,posBall_conductive) = (C.k_vh(:,contactInd,posBall_conductive)-1) .* C.C_Hertz(:,contactInd,posBall_conductive);
         case 'Leander_Parallel'
             leander_parallel(B.contactInd)
         case 'Leander_Radial'
@@ -140,7 +147,12 @@ for posBall_conductive=1:L.numberOfConductiveBalls
             end
     end
 
-    C_el_single(:,:,posBall_conductive) = C.C_Hertz(:,:,posBall_conductive) + C.C_out(:,:,posBall_conductive);
+    if C.method.k_vh_factor == 'on'
+        C.k_vh = 0.7772 * H.U.^0.0451 .* tempG.^0.1522 .* tempW.^-0.0245 .* G.k.^-0.0921;
+        C.C_Hertz(:,:,posBall_conductive) = C.C_Hertz(:,:,posBall_conductive) .* C.k_vh(:,:,posBall_conductive);
+    end
+
+    C_el_single(:,:,posBall_conductive) = C.C_Hertz(:,:,posBall_conductive) + C.C_out(:,:,posBall_conductive); %#ok<AGROW>
     
 end
 
diff --git a/BearImpOptions.m b/BearImpOptions.m
index 6d04cdcfee8f3fd6d67a393896f448d710d93e9e..19dfeba77e12eb1343b34134aaa4c3da7074678b 100644
--- a/BearImpOptions.m
+++ b/BearImpOptions.m
@@ -9,7 +9,7 @@ classdef BearImpOptions < handle & dynamicprops & matlab.mixin.CustomDisplay & m
 % pmd Berechnungstool Lagerimpedanz
 % Autor: Steffen Puchtler, Julius van der Kuip
 
-    properties
+    properties (Hidden)
         optionName
         optionLevel = 1
         optionChosen = 'default'
@@ -26,7 +26,7 @@ classdef BearImpOptions < handle & dynamicprops & matlab.mixin.CustomDisplay & m
         optionChanged
     end
 
-    methods (Static) 
+    methods (Static,Hidden) 
         function possibleOption = Possible
             possibleOption.T = {'linear','Vogel'};
             possibleOption.B = {'static','dynamic'};
@@ -34,8 +34,10 @@ classdef BearImpOptions < handle & dynamicprops & matlab.mixin.CustomDisplay & m
             possibleOption.H.thermalCorrection = {'on','off'};
             possibleOption.H.starvationCorrection = {'on','off'};
             possibleOption.H.roughnessCorrection = {'on','off'};
-            possibleOption.C.unloadedRE  = {           'neglect','stateOfTheArt',                                 'Leander_Parallel','Leander_Radial','LeanderSteffen','TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche','semianalytisch3D'};
-            possibleOption.C.outsideArea = {'k-factor','neglect','stateOfTheArt','Schneider_k_c','Schneider_k_vh','Leander_Parallel','Leander_Radial','LeanderSteffen','TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche','semianalytisch3D'};
+            possibleOption.C.unloadedRE  = {           'neglect','stateOfTheArt',                'Leander_Parallel','Leander_Radial','LeanderSteffen','TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche','semianalytisch3D'};
+            possibleOption.C.outsideArea = {'k-factor','neglect','stateOfTheArt','Schneider_k_c','Leander_Parallel','Leander_Radial','LeanderSteffen','TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche','semianalytisch3D'};
+            possibleOption.C.k_vh_factor = {'on','off'};
+            possibleOption.C.pressureDistribution = {'on','off'};
         end
 
         function defaultOption = Default
@@ -48,8 +50,12 @@ classdef BearImpOptions < handle & dynamicprops & matlab.mixin.CustomDisplay & m
             defaultOption.H.roughnessCorrection = 'off';
             defaultOption.C.unloadedRE  = 'semianalytisch3D';
             defaultOption.C.outsideArea = 'semianalytisch3D';
+            defaultOption.C.k_vh_factor = 'off';
+            defaultOption.C.pressureDistribution = 'on';
         end
+    end
 
+    methods (Static, Hidden) 
         function subOptionsCell = subOptionsSetWith
         % Gibt an, welche suboptions geändert werden sollen, wenn versucht
         % wird, eine Option mit Unteroptionen direkt zu setzen.
@@ -109,7 +115,7 @@ classdef BearImpOptions < handle & dynamicprops & matlab.mixin.CustomDisplay & m
         end
     end
 
-    methods
+    methods (Hidden)
         function charOut = char(obj)
             if strcmp(obj.optionChosen,'default') && ~obj.hasSubSubOptions
                 charOut = obj.defaultOption;
@@ -173,43 +179,6 @@ classdef BearImpOptions < handle & dynamicprops & matlab.mixin.CustomDisplay & m
             diffs = unique(diffs);
         end
 
-        function possibleSubOptions = get.possibleSubOptions (obj)
-            if obj.optionLevel == 1
-                possibleSubOptions = fieldnames(BearImpOptions.Possible)';
-            elseif obj.optionLevel == 2
-                if isstruct(BearImpOptions.Possible.(char(obj.optionName)))
-                    possibleSubOptions = fieldnames(BearImpOptions.Possible.(char(obj.optionName)))';
-                elseif iscell(BearImpOptions.Possible.(char(obj.optionName)))
-                    possibleSubOptions = BearImpOptions.Possible.(char(obj.optionName));
-                end
-            elseif obj.optionLevel == 3
-                if obj.hasSubSubOptions
-                    possibleSubOptions = fieldnames(BearImpOptions.Possible.(obj.parent.optionName))';
-                else
-                    possibleSubOptions = BearImpOptions.Possible.(obj.parent.optionName).(obj.optionName);
-                end
-            elseif isstruct(BearImpOptions.Possible.(obj.parent.optionName)) && ismember(obj.optionName,fieldnames(BearImpOptions.Possible.(obj.parent.optionName)))
-                
-            else
-                possibleSubOptions = {};
-            end
-        end
-
-        function hasSubSubOptions = get.hasSubSubOptions(obj)
-            switch obj.optionLevel
-                case 1
-                    hasSubSubOptions = true;
-                case 2
-                    hasSubSubOptions = isstruct(BearImpOptions.Possible.(obj.optionName));
-                case 3
-                    if ~isstruct(BearImpOptions.Possible.(obj.parent.optionName))
-                        hasSubSubOptions = false;
-                    else
-                        hasSubSubOptions = isstruct(BearImpOptions.Possible.(obj.parent.optionName).(obj.optionName));
-                    end
-            end
-        end
-
         function set_optionChosen(obj,subOptionName,optionChoice)
             objBefore = obj.copy;
             if ischar(optionChoice) || isstring(optionChoice)
@@ -329,4 +298,43 @@ classdef BearImpOptions < handle & dynamicprops & matlab.mixin.CustomDisplay & m
             end
         end
     end
+
+    methods % get functions
+        function possibleSubOptions = get.possibleSubOptions (obj)
+            if obj.optionLevel == 1
+                possibleSubOptions = fieldnames(BearImpOptions.Possible)';
+            elseif obj.optionLevel == 2
+                if isstruct(BearImpOptions.Possible.(char(obj.optionName)))
+                    possibleSubOptions = fieldnames(BearImpOptions.Possible.(char(obj.optionName)))';
+                elseif iscell(BearImpOptions.Possible.(char(obj.optionName)))
+                    possibleSubOptions = BearImpOptions.Possible.(char(obj.optionName));
+                end
+            elseif obj.optionLevel == 3
+                if obj.hasSubSubOptions
+                    possibleSubOptions = fieldnames(BearImpOptions.Possible.(obj.parent.optionName))';
+                else
+                    possibleSubOptions = BearImpOptions.Possible.(obj.parent.optionName).(obj.optionName);
+                end
+            elseif isstruct(BearImpOptions.Possible.(obj.parent.optionName)) && ismember(obj.optionName,fieldnames(BearImpOptions.Possible.(obj.parent.optionName)))
+                
+            else
+                possibleSubOptions = {};
+            end
+        end
+
+        function hasSubSubOptions = get.hasSubSubOptions(obj)
+            switch obj.optionLevel
+                case 1
+                    hasSubSubOptions = true;
+                case 2
+                    hasSubSubOptions = isstruct(BearImpOptions.Possible.(obj.optionName));
+                case 3
+                    if ~isstruct(BearImpOptions.Possible.(obj.parent.optionName))
+                        hasSubSubOptions = false;
+                    else
+                        hasSubSubOptions = isstruct(BearImpOptions.Possible.(obj.parent.optionName).(obj.optionName));
+                    end
+            end
+        end
+    end
 end
\ No newline at end of file