diff --git a/R/add_indent.R b/R/add_indent.R
index 18fdcd1..62c0a4e 100644
--- a/R/add_indent.R
+++ b/R/add_indent.R
@@ -1,6 +1,9 @@
 #' Add indentations to row headers
 #' @export
 add_indent <- function(kable_input, positions) {
+  if (!is.numeric(positions)) {
+    stop("Positions can only take numeric row numbers (excluding header rows).")
+  }
   kable_format <- attr(kable_input, "format")
   if (!kable_format %in% c("html", "latex")) {
     message("Currently generic markdown table using pandoc is not supported.")
@@ -16,14 +19,8 @@
 
 # Add indentation for LaTeX
 add_indent_latex <- function(kable_input, positions) {
-  table_info <- attr(kable_input, "original_kable_meta")
-  if (is.null(table_info)) {
-    table_info <- magic_mirror(kable_input)
-  }
+  table_info <- magic_mirror(kable_input)
 
-  if (!is.numeric(positions)) {
-    stop("Positions can only take numeric row numbers (excluding header rows).")
-  }
   if (max(positions) > table_info$nrow - 1) {
     stop("There aren't that many rows in the table. Check positions in ",
          "add_indent_latex.")
diff --git a/R/group_rows.R b/R/group_rows.R
index 9827811..3a179b0 100644
--- a/R/group_rows.R
+++ b/R/group_rows.R
@@ -1,25 +1,30 @@
 #' Put a few rows of a table into one category
 #'
 #' @export
-group_rows <- function(kable_input, group_label, start_row, end_row) {
+group_rows <- function(kable_input, group_label, start_row, end_row,
+                       label_row_css = "border-bottom: 1px solid;",
+                       latex_gap_space = "0.5em") {
+  if (!is.numeric(c(start_row, end_row))) {
+    stop("Start_row and end_row must be numeric position of rows (excluding",
+         "header rows and other group-title rows). ")
+  }
   kable_format <- attr(kable_input, "format")
   if (!kable_format %in% c("html", "latex")) {
     message("Currently generic markdown table using pandoc is not supported.")
     return(kable_input)
   }
   if (kable_format == "html") {
-    return(group_rows_html(kable_input, group_label, start_row, end_row))
+    return(group_rows_html(kable_input, group_label, start_row, end_row,
+                           label_row_css))
   }
   if (kable_format == "latex") {
-    return(group_rows_latex(kable_input, group_label, start_row, end_row))
+    return(group_rows_latex(kable_input, group_label, start_row, end_row,
+                            latex_gap_space))
   }
 }
 
-group_rows_html <- function(kable_input, group_label, start_row, end_row) {
-  if (!is.numeric(c(start_row, end_row))) {
-    stop("Start_row and end_row must be numeric position of rows (excluding",
-         "header rows and other group-title rows). ")
-  }
+group_rows_html <- function(kable_input, group_label, start_row, end_row,
+                            label_row_css) {
   kable_attrs <- attributes(kable_input)
   kable_xml <- read_xml(as.character(kable_input), options = "COMPACT")
   kable_tbody <- xml_tpart(kable_xml, "tbody")
@@ -35,8 +40,9 @@
   starting_node <- xml_child(kable_tbody, group_seq[1])
   kable_ncol <- length(xml_children(starting_node))
   group_header_row_text <- paste0(
-    '<tr groupLength="', length(group_seq), '"><td colspan="',
-    kable_ncol, '"><strong>', group_label, "</strong></td></tr>"
+    '<tr groupLength="', length(group_seq), '"><td colspan="', kable_ncol,
+    '" style="', label_row_css, '"><strong>', group_label,
+    "</strong></td></tr>"
   )
   group_header_row <- read_xml(group_header_row_text, options = "COMPACT")
   xml_add_sibling(starting_node, group_header_row, .where = "before")
@@ -49,3 +55,35 @@
   out <- add_indent(out, positions = seq(start_row, end_row))
   return(out)
 }
+
+group_rows_latex <- function(kable_input, group_label, start_row, end_row, gap_space) {
+  table_info <- magic_mirror(kable_input)
+  out <- kable_input
+
+  # Add group label
+  rowtext <- table_info$contents[start_row + 1]
+  if (table_info$booktabs) {
+    new_rowtext <- paste0(
+      "\\\\addlinespace[", gap_space, "]\n",
+      "\\\\multicolumn{", table_info$ncol, "}{l}{\\\\textbf{", group_label,
+      "}}\\\\\\\\\n",
+      rowtext
+    )
+    # last_row <- paste0(table_info$contents[end_row + 1], "\\\\\\\\")
+    # out <- sub(
+    #   last_row,
+    #   paste0(last_row, "\n\\\\addlinespace[", gap_space, "]"),
+    #   out
+    # )
+  } else {
+    rowtext <- paste0("\\\\hline\n", rowtext)
+    new_rowtext <- paste0(
+      "\\\\hline\n\\\\multicolumn{", table_info$ncol, "}{l}{\\\\textbf{",
+      group_label, "}}\\\\\\\\\n", rowtext
+    )
+  }
+  out <- sub(rowtext, new_rowtext, out)
+  if (table_info$booktabs)
+  out <- add_indent(out, seq(start_row, end_row))
+  return(out)
+}
