--- a/filterbank/ifilterbank.m
+++ b/filterbank/ifilterbank.m
@@ -28,6 +28,7 @@
 
 [g,info]=filterbankwin(g,a,L,'normal');
 M=info.M;
+a=info.a;
 
 if iscell(c)
   Mcoef=numel(c);
@@ -45,15 +46,23 @@
 if iscell(c)
     f=zeros(L,W,assert_classname(c{1}));
 else
-    a=a(1);
     f=zeros(L,W,assert_classname(c));
 end;
+
+% This routine must handle the following cases
+%
+%   * Time-side or frequency-side filters (test for  isfield(g,'H'))
+%
+%   * Cell array or matrix input (test for iscell(c))
+%
+%   * Regular or fractional subsampling (test for info.isfractional)
 
 l=(0:L-1).'/L;
 for m=1:M
     conjG=conj(comp_transferfunction(g{m},L));
-    
-    if iscell(c)
+        
+    % Handle fractional subsampling (this implies frequency side filters)
+    if info.isfractional
         N=size(c{m},1);
         Llarge=ceil(L/N)*N;
         amod=Llarge/N;
@@ -64,10 +73,17 @@
             f(:,w)=f(:,w)+ifft(circshift(bsxfun(@times,innerstuff,circshift(conjG,-g{m}.foff)),g{m}.foff));
         end;                
     else
-        for w=1:W
-            % This repmat cannot be replaced by bsxfun
-            f(:,w)=f(:,w)+ifft(repmat(fft(c(:,m,w)),a,1).*conjG);
-        end;        
+        if iscell(c)
+            for w=1:W
+                % This repmat cannot be replaced by bsxfun
+                f(:,w)=f(:,w)+ifft(repmat(fft(c{m}(:,w)),a(m),1).*conjG);
+            end;
+        else
+            for w=1:W
+                % This repmat cannot be replaced by bsxfun
+                f(:,w)=f(:,w)+ifft(repmat(fft(c(:,m,w)),a(m),1).*conjG);
+            end;            
+        end;
     end;
 end;