diff --git a/R/make_periodic.R b/R/make_periodic.R
new file mode 100644
index 0000000000000000000000000000000000000000..77cc7bdd6116224182df6b0f92c723ba4244a5d2
--- /dev/null
+++ b/R/make_periodic.R
@@ -0,0 +1,46 @@
+## Do this in a separate tmp.R file to check the documentation
+#library(devtools)
+#document()
+#load_all(as.package("../../onlineforecast"))
+#?make_periodic
+
+#' Make an forecast matrix with a periodic time signal.
+#'
+#' This function creates a data.frame with k-steps-ahead values of a periodic time signal,
+#' such that it can be added to a data.list and used inputs to a forecast model.
+#' 
+#' @param time vector of times of class "POSIXct" "POSIXt".
+#' @param kseq vector of integers, representing the desired "k-steps ahead".
+#' @param period a numeric setting the length of the period in seconds.
+#' @param offset a numeric setting an offset in the period start in seconds.
+#' @param tstep step time of k in seconds.
+#' @return Returns a forecast matrix (data.frame) with rownames = times, colnames = k1, k2, k3, ...
+#' The content of the data frame is the hour of day.
+#' @keywords periodic lags data.frame
+#' @seealso make_tday
+#' @examples
+#' # Create a time sequence of 30 min sample period
+#' tseq <- seq(ct("2019-01-01"), ct("2019-02-01 12:00"), by=1800)
+#' 
+#' # Make the three hourly periodic sequence
+#' make_periodic(tseq, 1:10, 3*3600)
+#'
+#' # With an offset of one hour
+#' make_periodic(tseq, 1:10, 3*3600, 3600)
+#' 
+#' @export
+
+make_periodic <- function(time, kseq, period, offset=0, tstep=NA){
+    # If tstep not given, then take it from time assuming same k-step is the sampling period
+    if(is.na(tstep)){
+        tstep <- as.numeric(time[2] - time[1], units="secs")
+    }
+    # The time of day (in the specified units)
+    tday <- sapply(kseq, function(k){
+        tk <- time + k * tstep - offset
+        as.numeric(tk,units="secs") %% period
+    })
+    # set row and column names
+    nams(tday) <- paste0('k', kseq)
+    return( as.data.frame(tday) )
+}
diff --git a/R/make_tday.R b/R/make_tday.R
index ab21fd5fe3f39f1ca67eea060911100bff5b50d5..049736a3c118ef4900b297b4a1265dfbf1a3c2bd 100644
--- a/R/make_tday.R
+++ b/R/make_tday.R
@@ -4,38 +4,42 @@
 #load_all(as.package("../../onlineforecast"))
 #?make_tday
 
-#' Make an hour-of-day data.frame with k-step ahead columns.
+#' Make an hour-of-day forecast matrix
 #'
 #' This function creates a data.frame with k-steps-ahead values of hour of day,
 #' such that it can be added to a data.list and used inputs to a forecast model.
 #' 
 #' @param time vector of times of class "POSIXct" "POSIXt".
-#' @param kseq vector of integers, respresenting the desired "k-steps ahead".
+#' @param kseq vector of integers, representing the desired "k-steps ahead".
 #' @param tstep step time of k in seconds.
-#' @param units to return in, e.g. "hours" or "mins"
-#' @return Returns a data.frame with rownames = times, colnames = k1, k2, k5, ...
-#' The content of the data frame is the hour of day, following the setup in "onlineforecast" setup.
+#' @return Returns a forecast matrix (data.frame) with rownames = times, colnames = k1, k2, k3, ...
+#' The content of the data frame is the hour of day.
 #' @keywords hourofday lags data.frame
+#' @seealso make_periodic
 #' @examples
-#' # Create a time sequence
+#' # Create a time sequence of 30 min sample period
 #' tseq <- seq(ct("2019-01-01"), ct("2019-02-01 12:00"), by=1800)
 #' 
-#' # Make the time of day sequence
+#' # Make the time of day sequence (assuming time between k steps is same as for tseq)
 #' make_tday(tseq, 1:10)
 #' 
-#' # With 0.5 hour steps and in minutes
-#' make_tday(tseq, 1:10, tstep=1800, units="mins")
+#' # With 0.5 hour steps, kstep in hours
+#' make_tday(tseq, 1:10, tstep=3600)
 #'
 #' 
 #' @export
 
-make_tday <- function(time, kseq, tstep=3600, units="hours"){
-    ## The time of day (in the specified units)
+make_tday <- function(time, kseq, tstep=NA){
+    # If tstep not given, then take it from time assuming same k-step is the sampling period
+    if(is.na(tstep)){
+        tstep <- as.numeric(time[2] - time[1], units="secs")
+    }
+    # The time of day (in the specified units)
     tday <- sapply(kseq, function(k){
         tk <- time + k * tstep
-        as.numeric( tk - trunc(tk, units="days"), units=units)
+        as.numeric( tk - trunc(tk, units="days"), units="hours")
     })
-    ## set row and column names
+    # set row and column names
     nams(tday) <- paste0('k', kseq)
     return( as.data.frame(tday) )
 }