diff --git a/R/revealjs_presentation.R b/R/revealjs_presentation.R
index 8ddb818..360465b 100644
--- a/R/revealjs_presentation.R
+++ b/R/revealjs_presentation.R
@@ -136,40 +136,21 @@
 
   # additional reveal options
   if (is.list(reveal_options)) {
-    add_reveal_option <- function(option, value) {
-      if (is.logical(value)) {
-        value <- jsbool(value)
-      } else if (is.character(value)) {
-        # Special handling for some chalkboard plugin options
-        # e.g: color: [ 'rgba(0,0,255,1)', 'rgba(255,255,255,0.5)' ]
-        if (grepl("chalkboard-(background|color|draw|pen)", option)) {
-          value <- sprintf("[%s]", paste(paste0("'", value, "'"), collapse = ", "))
-        }
-        # Add quotes around some config that can be several type
-        # like number or percent unit or slideNumber = true or slideNumber = 'c/t'
-        if (
-          option %in% c("slideNumber") ||
-            (option %in% c("width", "height") && grepl("%$", value))) {
-          value <- paste0("'", value, "'")
-        }
-      }
-      args <<- c(args, pandoc_variable_arg(option, value))
-    }
-
     for (option in names(reveal_options)) {
       # special handling for nested options
       if (option %in% c("chalkboard", "menu")) {
         nested_options <- reveal_options[[option]]
         for (nested_option in names(nested_options)) {
-          add_reveal_option(
-            paste0(option, "-", nested_option),
-            nested_options[[nested_option]]
+          args <- c(args, 
+                    process_reveal_option(
+                      paste0(option, "-", nested_option),
+                      nested_options[[nested_option]]
+                    )
           )
         }
-      }
-      # standard top-level options
-      else {
-        add_reveal_option(option, reveal_options[[option]])
+      } else { 
+        # standard top-level options
+        args <- c(args, process_reveal_option(option, reveal_options[[option]]))
       }
     }
   }
diff --git a/R/utils.R b/R/utils.R
index f681e24..52381a2 100644
--- a/R/utils.R
+++ b/R/utils.R
@@ -6,4 +6,25 @@
 }
 
 # Convert boolean from R to JS boolean
-jsbool <- function(value) ifelse(value, "true", "false")
\ No newline at end of file
+jsbool <- function(value) ifelse(value, "true", "false")
+
+# transfrom reveal option as pandoc variable
+process_reveal_option <- function(option, value) {
+  if (is.logical(value)) {
+    value <- jsbool(value)
+  } else if (is.character(value)) {
+    # Special handling for some chalkboard plugin options
+    # e.g: color: [ 'rgba(0,0,255,1)', 'rgba(255,255,255,0.5)' ]
+    if (grepl("chalkboard-(background|color|draw|pen)", option)) {
+      value <- sprintf("[%s]", paste(paste0("'", value, "'"), collapse = ", "))
+    }
+    # Add quotes around some config that can be several type
+    # like number or percent unit or slideNumber = true or slideNumber = 'c/t'
+    if (
+      option %in% c("slideNumber") ||
+      (option %in% c("width", "height") && grepl("%$", value))) {
+      value <- paste0("'", value, "'")
+    }
+  }
+  pandoc_variable_arg(option, value)
+}
\ No newline at end of file
