diff --git a/matlab/@dynSeries/minus.m b/matlab/@dynSeries/minus.m
index ccd44f92e8fd93006e98c1adcc604d74bdc06a1d..52bb647a83b59789cd6263c90b0257c7cecb33fc 100644
--- a/matlab/@dynSeries/minus.m
+++ b/matlab/@dynSeries/minus.m
@@ -40,33 +40,38 @@ function A = minus(B,C)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-if isscalar(B)
-    assert(isa(C, 'dynSeries'));
-    b(1:size(C)) = B;
-    BB = dynSeries(b, C.time(1));
-    BB.freq = C.freq;
-    BB.time = C.time;
-    BB.nobs = C.nobs;
-    BB.vobs = C.vobs;
-    BB.name = cell(BB.vobs,1);
-    BB.tex = cell(BB.vobs,1);
-    BB.name(1) = {num2str(B)};
-    A = BB - C;
+if isnumeric(B) && isreal(B) && isequal(length(B),1) && isa(C,'dynSeries')
+    keyboard
+    A = dynSeries();
+    A.freq = C.freq;
+    A.init = C.init;
+    A.time = C.time;
+    A.nobs = C.nobs;
+    A.vobs = C.vobs;
+    A.name = cell(A.vobs,1);
+    A.tex = cell(A.vobs,1);
+    for i=1:A.vobs
+        A.name(i) = {['minus(' num2str(B) ',' C.name{i} ')']};
+        A.tex(i) = {['(' num2str(B) '-' C.tex{i} ')']};
+    end
+    A.data = bsxfun(@minus, B, C.data);
     return;
 end
 
-if isscalar(C)
-    assert(isa(B, 'dynSeries'));
-    c(1:size(C)) = C;
-    CC = dynSeries(C, B.time(1));
-    CC.freq = B.freq;
-    CC.time = B.time;
-    CC.nobs = B.nobs;
-    CC.vobs = B.vobs;
-    CC.name = cell(CC.vobs,1);
-    CC.tex = cell(CC.vobs,1);
-    CC.name(1) = {num2str(C)};
-    A = B - CC;
+if isnumeric(C) && isreal(C) && isequal(length(C),1) && isa(B,'dynSeries')
+    A = dynSeries();
+    A.freq = B.freq;
+    A.init = B.init;
+    A.time = B.time;
+    A.nobs = B.nobs;
+    A.vobs = B.vobs;
+    A.name = cell(A.vobs,1);
+    A.tex = cell(A.vobs,1);
+    for i=1:A.vobs
+        A.name(i) = {['minus(' B.name{i} ',' num2str(C) ')']};
+        A.tex(i) = {['(' B.tex{i} '-' num2str(C) ')']};
+    end
+    A.data = bsxfun(@minus, B.data, C);
     return;
 end