diff --git a/matlab/@dates/colon.m b/matlab/@dates/colon.m
index 4449d9a3f68668b0ae84a8899f1adcddb35383c6..76e78a22789f105219269e8d63b9941b9f23a466 100644
--- a/matlab/@dates/colon.m
+++ b/matlab/@dates/colon.m
@@ -68,23 +68,18 @@ end
 
 C = dates();
 n = (B-A)+1;
+if d>1
+    n = length(1:d:n);
+end
 C.freq = A.freq;
 C.ndat = n;
 C.time = NaN(n,2);
 C.time(1,:) = A.time;
 
-current_date = A;
-linee = 1;
-
-while current_date<B
-    linee = linee+1;
+for linee=2:n
     C.time(linee,:) = add_periods_to_array_of_dates(C.time(linee-1,:), C.freq, d);
-    current_date = current_date + d;
 end
 
-C.time = C.time(1:linee,:);
-C.ndat = rows(C.time);
-
 %@test:1
 %$ % Define two dates
 %$ date_1 = '1950Q2';
diff --git a/matlab/utilities/dates/add_periods_to_array_of_dates.m b/matlab/utilities/dates/add_periods_to_array_of_dates.m
index 7274a1a785fed9e2b3e8e04bbfed0bde3bf5aa52..48a371739a22767f65bd1e2215c1ae71a704a7e6 100644
--- a/matlab/utilities/dates/add_periods_to_array_of_dates.m
+++ b/matlab/utilities/dates/add_periods_to_array_of_dates.m
@@ -27,12 +27,16 @@ time(:,1) = time(:,1) + fix(p/freq);
 time(:,2) = time(:,2) + rem(p,freq);
 
 id1 = find(time(:,2)>freq);
-time(id1,1) = time(id1,1) + 1;
-time(id1,2) = time(id1,2) - freq;
+if ~isempty(id1)
+    time(id1,1) = time(id1,1) + 1;
+    time(id1,2) = time(id1,2) - freq;
+end
 
 id2 = find(time(:,2)<1);
-time(id2,1) = time(id2,1) - 1;
-time(id2,2) = time(id2,2) + freq;
+if ~isempty(id2)
+    time(id2,1) = time(id2,1) - 1;
+    time(id2,2) = time(id2,2) + freq;
+end
 
 %@test:1
 %$ t(1) = dyn_assert(add_periods_to_array_of_dates([1950 1], 4, 1),[1950 2]);
diff --git a/matlab/utilities/dates/string2date.m b/matlab/utilities/dates/string2date.m
index 139b65dbf4fd09693f3be64500b337226b43a087..bb91a05fb3b693c196576f842e8a16b6d698129d 100644
--- a/matlab/utilities/dates/string2date.m
+++ b/matlab/utilities/dates/string2date.m
@@ -26,7 +26,7 @@ end
 if isyearly(a)
     year = 1:(regexp(a,'[AaYy]')-1);
     date.freq = 1;
-    date.time = write_time_field(a, year);
+    date.time = write_time_field_y(a, year);
     return
 end
 
@@ -51,13 +51,14 @@ if isweekly(a)
     return
 end
 
+
 function b = write_time_field(c, d)
-    b(1) = str2num(c(d));
-    if ismember(c(d(end)+1),{'Y','y','A','a'})
-        b(2) = 1;
-    else
-        b(2) = str2num(c(d(end)+2:end));
-    end
+    b(1) = str2double(c(d));
+    b(2) = str2double(c(d(end)+2:end));
+
+function b = write_time_field_y(c, d)
+    b(1) = str2double(c(d));
+    b(2) = 1;
 
 %@test:1
 %$