--- a/fourier/magresp.m
+++ b/fourier/magresp.m
@@ -89,7 +89,7 @@
 
 do_real=flags.do_posfreq;
 if flags.do_autoposfreq
-  do_real=isreal(g);
+  do_real=info.wasreal;
 end;
 
 if flags.do_fir
@@ -100,13 +100,41 @@
   if info.isfir
     % Choose a strange length, such that we don't accidentically hit all
     % the zeros in the response.
-    kv.L=length(g)*13+47;
+    kv.L=info.gl*13+47;
   else
-    kv.L=length(g);
+      if isempty(info.gl)
+          % Default value
+          kv.L=419;
+      else          
+          kv.L=info.gl;
+      end;
   end;
 end;
 
-g=fir2long(g,kv.L);
+if (isstruct(g)) && isfield(g,'fs') && (~isempty(g.fs)) && (isempty(fs))
+    fs=g.fs;
+end;
+
+if 0
+    if isstruct(g)
+        if isfield(g,'h')
+            g=circshift(postpad(g.h,kv.L),g.offset);
+        else
+            G=circshift(postpad(g.H(kv.L),kv.L),g.foff(kv.L));
+            if g.realonly
+                g=ifft(G);
+                g=(g+conj(g))/2;
+            else
+                g=ifft(G);
+            end;
+        end;
+    else
+        g=fir2long(g,kv.L);
+    end;
+else
+    g=pfilt([1;zeros(kv.L-1,1)],g);
+end;
+
 
 g=normalize(g,flags.norm);
 if do_real