data frame implementation