diff --git a/R/group_rows.R b/R/group_rows.R
index e913497..c7d5178 100644
--- a/R/group_rows.R
+++ b/R/group_rows.R
@@ -23,6 +23,9 @@
 #' centered on row, "r" for right justification, or "l" for left justification. Default
 #' Value is "l"  If using html, the alignment can be set by using the label_row_css
 #' parameter.
+#' @param latex_wrap_text T/F for wrapping long text. Default is off. Whenever
+#' it is turned on, the table will take up the entire line. It's recommended
+#' to use this with full_width in kable_styling.
 #' @param colnum A numeric that determines how many columns the text should span.
 #' The default setting will have the text span the entire length.
 #' @param bold A T/F value to control whether the text should be bolded.
@@ -44,7 +47,9 @@
                        index = NULL,
                        label_row_css = "border-bottom: 1px solid;",
                        latex_gap_space = "0.3em",
-                       escape = TRUE, latex_align = "l", colnum = NULL,
+                       escape = TRUE, latex_align = "l",
+                       latex_wrap_text = FALSE,
+                       colnum = NULL,
                        bold = TRUE,
                        italic = FALSE,
                        hline_before = FALSE,
@@ -61,7 +66,7 @@
   }
   if (is.null(index)) {
     if (kable_format == "html") {
-      if(!missing(latex_align)) warning("latex_align parameter is not used in HTML Mode,
+      if (!missing(latex_align)) warning("latex_align parameter is not used in HTML Mode,
                                     use label_row_css instead.")
       return(group_rows_html(kable_input, group_label, start_row, end_row,
                              label_row_css, escape, colnum, indent))
@@ -70,14 +75,14 @@
       return(group_rows_latex(kable_input, group_label, start_row, end_row,
                               latex_gap_space, escape, latex_align, colnum,
                               bold, italic, hline_before, hline_after,
-                              extra_latex_after, indent))
+                              extra_latex_after, indent, latex_wrap_text))
     }
   } else {
     index <- group_row_index_translator(index)
     out <- kable_input
     if (kable_format == "html") {
       for (i in 1:nrow(index)) {
-        if(!missing(latex_align)) warning("latex_align parameter is not used in HTML Mode,
+        if (!missing(latex_align)) warning("latex_align parameter is not used in HTML Mode,
                                     use label_row_css instead.")
         out <- group_rows_html(out, index$header[i],
                                index$start[i], index$end[i],
@@ -90,7 +95,7 @@
                                index$start[i], index$end[i],
                                latex_gap_space, escape, latex_align, colnum,
                                bold, italic, hline_before, hline_after,
-                               extra_latex_after, indent)
+                               extra_latex_after, indent, latex_wrap_text)
       }
     }
     return(out)
@@ -148,8 +153,8 @@
 
 group_rows_latex <- function(kable_input, group_label, start_row, end_row,
                              gap_space, escape, latex_align, colnum,
-                             bold = T, italic = F, hline_before = F ,hline_after = F,
-                             extra_latex_after = NULL, indent) {
+                             bold = T, italic = F, hline_before = F, hline_after = F,
+                             extra_latex_after = NULL, indent, latex_wrap_text = F) {
   table_info <- magic_mirror(kable_input)
   out <- solve_enc(kable_input)
 
@@ -166,8 +171,19 @@
   if (bold) {
     group_label <- paste0("\\\\textbf{", group_label, "}")
   }
+
   if (italic) group_label <- paste0("\\\\textit{", group_label, "}")
   # Add group label
+  if (latex_wrap_text) {
+    latex_align <- switch(
+      latex_align,
+      "l" = "p{\\\\linewidth}",
+      "c" = ">{\\\\centering\\\\arraybackslash}p{\\\\linewidth}",
+      "r" = ">{\\\\centering\\\\arraybackslash}p{\\\\linewidth}"
+    )
+  }
+
+
   if (table_info$booktabs) {
     rowtext <- table_info$contents[start_row + table_info$position_offset]
     pre_rowtext <- paste0(
