diff --git a/matlab/utilities/dataset/quarterly2annual.m b/matlab/utilities/dataset/quarterly2annual.m
index 73d7836062f4adf894e9c644ae5c5a0b3e92deeb..08cd0846e1665a6e9c71680aa399c10e78a5c41d 100644
--- a/matlab/utilities/dataset/quarterly2annual.m
+++ b/matlab/utilities/dataset/quarterly2annual.m
@@ -1,5 +1,5 @@
-function [ya, yass, gya, gyass] = quarterly2annual(y,yss,GYTREND0,type,islog)
-% function [ya, yass, gya, gyass] = quarterly2annual(y,yss,GYTREND0,type,islog)
+function [ya, yass, gya, gyass] = quarterly2annual(y,yss,GYTREND0,type,islog,aux)
+% function [ya, yass, gya, gyass] = quarterly2annual(y,yss,GYTREND0,type,islog,aux)
 % transforms quarterly (log-)level time series to annual level and growth rate
 % it accounts for stock/flow/deflator series.
 %
@@ -11,8 +11,13 @@ function [ya, yass, gya, gyass] = quarterly2annual(y,yss,GYTREND0,type,islog)
 %          2 average
 %          3 last period (Q4)
 %          4 geometric average
+%          5 annual price as quantity weighted average
+%          6 annual quantity from average price
+%          7 annual nominal from Q real and deflator
 % islog    0 level (default)
 %          1 log-level
+% aux      optional input used when type>4
+% 
 %
 % OUTPUTS
 % ya       annual (log-)level
@@ -48,30 +53,75 @@ end
 if nargin<5 || isempty(islog),
     islog=0;
 end
+if isstruct(aux),
+    yaux=aux.y;
+    yauxss=aux.yss;
+    islogaux=aux.islog;
+    GYTREND0aux=aux.GYTREND0;
+    typeaux=aux.type;    
+    if islogaux
+        yaux=exp(yaux+yauxss);
+        yauxss=exp(yauxss);
+        yaux=yaux-yauxss;
+    end
+elseif type > 4,
+    error('TYPE>4 requires auxiliary variable!')
+end
 if islog
     y=exp(y+yss);
     yss=exp(yss);
     y=y-yss;
 end
 switch type
+
     case 1
         yass = yss*(exp(-GYTREND0*3)+exp(-GYTREND0*2)+exp(-GYTREND0)+1);
         tmp = lagged(y,3)*exp(-GYTREND0*3)+lagged(y,2)*exp(-GYTREND0*2)+lagged(y,1)*exp(-GYTREND0)+y; % annualized level
+        ya = tmp(4:4:end);
+
     case 2
         yass = yss*(exp(-GYTREND0*3)+exp(-GYTREND0*2)+exp(-GYTREND0)+1)/4;
         tmp = (lagged(y,3)*exp(-GYTREND0*3)+lagged(y,2)*exp(-GYTREND0*2)+lagged(y,1)*exp(-GYTREND0)+y)/4; % annualized level
+        ya = tmp(4:4:end);
+
     case 3
         yass=yss;
         tmp = y;
+        ya = tmp(4:4:end);
+        
     case 4
         yass = yss*(exp(-GYTREND0*3/2));
         tmp = (lagged(y+yss,3)*exp(-GYTREND0*3).*lagged(y+yss,2)*exp(-GYTREND0*2).*lagged(y+yss,1)*exp(-GYTREND0).*(y+yss)).^(1/4); % annualized level        
         tmp = tmp - yass;
+        ya = tmp(4:4:end);
+
+    case 5
+        % nominal series
+        [yna, ynass] = quarterly2annual(y.*yaux,yss.*yauxss,GYTREND0+GYTREND0aux,typeaux,0,0);
+        % real series
+        [yra, yrass] = quarterly2annual(yaux,yauxss,GYTREND0aux,typeaux,0,0);
+        % deflator
+        yass = ynass/yrass;
+        ya = yna./yra;        
+        
+    case 6
+        % nominal series
+        [yna, ynass] = quarterly2annual(y.*yaux,yss.*yauxss,GYTREND0+GYTREND0aux,typeaux,0,0);
+        % deflator
+        [pa, pass] = quarterly2annual(yaux,yauxss,GYTREND0aux,2,0,0);
+        % real series
+        yass = ynass/pass;
+        ya = yna./pa;        
+
+    case 7
+        % nominal series
+        [ya, yass] = quarterly2annual(y.*yaux,yss.*yauxss,GYTREND0+GYTREND0aux,typeaux,0,0);
+        GYTREND0=GYTREND0+GYTREND0aux;
+
     otherwise
         error('Wrong type input')
 end
 
-ya = tmp(4:4:end);
 % annual growth rate
 gyass = GYTREND0*4;
 gya = (ya+yass)./(lagged(ya,1)+yass).*exp(4*GYTREND0)-1-gyass;