diff --git a/biosig4matlab/t330_StimFit/microstimfit.m b/biosig4matlab/t330_StimFit/microstimfit.m
index 24116ec5..6c371f19 100644
--- a/biosig4matlab/t330_StimFit/microstimfit.m
+++ b/biosig4matlab/t330_StimFit/microstimfit.m
@@ -38,8 +38,10 @@ function [results, option] = microstimfit(data, Fs, evtpos, varargin)
 %			1: fit decay with monoexponential model 'a*exp(-x/tau)+offset' (from peakTime to t2)
 %			2: fit decay with biexponential model 'a1*exp(-x/tau1)+a2*exp(-x/tau2) ' (from peakTime to t2)
 %			3: fit decay with biexponential model 'a1*exp(-x/tau1)+a2*exp(-x/tau2)+offset' (from peakTime to t2)
-%      option.thres	threshold value for AP (in relative units or unit voltage or current per sample interval), and 
-%      option.thresFlag	controls the threshold criterion (0 = relative to max slope, 1 = absolute). 
+%			5: biexponential with delay: 'a0*exp(delay-x/tau1)-exp(delay-x/tau2)+offset' (from peakTime to t2)
+%      option.thres	threshold value for AP (in relative units or unit voltage or current per sample interval), and
+%      option.thresFlag	controls the threshold criterion (0 = relative to max slope, 1 = absolute).
+%      option.fitBegin	start of fitting window (only for fitFlag=5)
 %      option.fitEnd	data length for fitting, starting from the peak time 
 %
 %  Output arguments:
@@ -122,8 +124,9 @@ default.t2=round(+Fs*100e-3);
 default.baseEnd=round(-Fs*10e-3);
 default.peakBeg=round(-Fs*10e-3);
 default.peakEnd=round(+Fs*20e-3);
+default.fitBegin=round(+Fs*0e-3);
 default.fitEnd=round(+Fs*50e-3);
-default.meanN=round(50e-6*Fs);	% see [1], Fig. 3-C
+default.meanN=max([1,round(50e-6*Fs)]);	% see [1], Fig. 3-C
 default.dir=0;
 default.plotFlag=0;
 default.baseFlag=0;
@@ -214,6 +217,11 @@ elseif (option.fitFlag==3)
 	option.fitfun = @(p, x) (p(1) * exp (-x*p(3)) + p(2) * exp (-x*p(4)) + p(5));	% A1 * exp(-t*invTau1) + A2 * exp(-t*invTau2) + offset
 	results.fitResults=repmat(NaN,N,5);
 	results.weightedTau=repmat(NaN,N,1);
+elseif (option.fitFlag==5)
+	results.label(end+[1:5]) = {'A0','tau1 [s]', 'tau2 [s]','delay', 'offset'};
+	option.fitfun = @(p, x) (p(1) * exp (p(4)-x*p(2) - exp (p(4)-x*p(3))) + p(5));	% A0 * (exp(delay-t*invTau1) - exp(delay-t*invTau2)) + offset
+	results.fitResults=repmat(NaN,N,5);
+	results.weightedTau=repmat(NaN,N,1);
 elseif (option.fitFlag==0)
 	;
 else
@@ -250,7 +258,6 @@ results.options=option;
 
 [base,baseSZ]=trigg(data,evtpos,option.baseBegin, option.baseEnd);
 [peakRegion,peakSZ]=trigg(sdata,evtpos,option.peakBegin, option.peakEnd);
-
 results.baselineMean   = mean(reshape(base,baseSZ),2);
 results.baselineMedian = median(reshape(base,baseSZ),2);
 results.baselineStdDev = std(reshape(base,baseSZ),[],2);
@@ -304,7 +311,7 @@ for k=1:N;
 
 	peakRegion = sdata( max(option.peakBegin+ix,1) : min(ix+option.peakEnd,size(data,1)) ) - base;
 
-	if option.dir && any(xor(peak < 0, option.dir < 0))
+	if option.dir && any(xor(peak(k) < 0, option.dir < 0))
 		warning('microStimfit: peak has wrong direction  - this is strange'); 
 	end
 
@@ -451,6 +458,30 @@ for k=1:N;
 			warning('fitting failed; optimization toolbox or optim package missing')
 			fitResult=[];
 		end
+
+	elseif (option.fitFlag==5)
+		% results.label(end+[1:3]) = {'A0', 'tau1 [s]', 'tau2 [s]', 'delay [s]', offset};
+		%         fitfun = @(p, x) (p(1) * exp (p(4)-x*p(2) - exp (p(4)-x*p(3)) + p(5));	% A0 * (exp(delay-t*invTau1) - exp(delay-t*invTau2)) + offset
+
+		fitResult = [];
+		fExp      = option.fitfun;
+		invtau1   = Fs/(mean(t50BReal) - mean(t50AReal));
+		pInit = [peak(k), Fs/(mean(t50AReal)), Fs/(mean(t50BReal)), 0, base];
+		LB = [-inf, 0, 0, 0, -inf];
+		UB = [+inf, +inf, +inf, +inf, +inf];
+
+		try
+			% A0 * (exp(delay-t*invTau1) - exp(delay-t*invTau2)) + offset
+			fitfun = @(p, x) (p(1) * exp (p(4)-x*p(2) - exp (p(4)-x*p(3)) + p(5));
+			t = [0:(default.option.fitEnd-default.option.fitBegin)]'/Fs;
+			decay = data(default.option.fitBegin(k) + t);
+			[fitResult, RESNORM, RESIDUAL, EXITFLAG, OUTPUT, LAMBDA, JACOBIAN] = lsqcurvefit (option.fitfun, pInit', t, decay, LB, UB)
+			results.fitResults(k,1:5) = [fitResult(1), 1/fitResult(2), 1/fitResult(3), fitResult(4), fitResult(5)];
+			results.weightedTau(k,1)  = 1./fitResult(2:3);
+		catch
+			warning('fitting failed; optimization toolbox or optim package missing')
+			fitResult=[];
+		end
 	end
 
 	if (option.plotFlag),
@@ -482,7 +513,7 @@ for k=1:N;
 		set(h(end-2),'linewidth',lineWidth);
 		set(h(end-1),'linewidth',lineWidth);
 		set(h(end),'linewidth',lineWidth);
-		title(sprintf('%i/%i',k,N))
+		title(sprintf('%i / %i (t = %g s)',k,N,evtpos(k)/Fs))
 		
 		if any(option.fitFlag==[1:3]) && ~isempty(fitResult)
 			hold on;
@@ -514,5 +545,3 @@ results.MaxSlopeTime   = diff(results.data(:,[1,14]),[],2)/Fs;	% for backwards c
 results.tMaxRiseSlope  = diff(results.data(:,[1,14]),[],2)/Fs;	% same  .MaxSlopeTime
 results.tMaxDecaySlope = diff(results.data(:,[1,18]),[],2)/Fs;
 results.thresholdTime = diff(results.data(:,[1,16]),[],2)/Fs;
-
-
