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
diff --git a/tests/testthat/test-utils.R b/tests/testthat/test-utils.R
new file mode 100644
index 0000000..c53a50d
--- /dev/null
+++ b/tests/testthat/test-utils.R
@@ -0,0 +1,29 @@
+test_that("reveal options are passed as pandoc variables", {
+  expect_equal(process_reveal_option("a", "b"), pandoc_variable_arg("a", "b"))
+})
+
+test_that("reveal options with boolean are transformed to JS bool", {
+  expect_equal(process_reveal_option("a", TRUE), pandoc_variable_arg("a", "true"))
+  expect_equal(process_reveal_option("a", FALSE), pandoc_variable_arg("a", "false"))
+})
+
+test_that("reveal options slideNumbers is treated specifically", {
+  expect_equal(process_reveal_option("slideNumber", "c/t"), pandoc_variable_arg("slideNumber", "'c/t'"))
+  expect_equal(process_reveal_option("slideNumber", TRUE), pandoc_variable_arg("slideNumber", "true"))
+})
+
+test_that("reveal options width / heigh in % are quoted", {
+  expect_equal(process_reveal_option("width", "50%"), pandoc_variable_arg("width", "'50%'"))
+  expect_equal(process_reveal_option("height", "50%"), pandoc_variable_arg("height", "'50%'"))
+  expect_equal(process_reveal_option("width", 5), pandoc_variable_arg("width", "5"))
+  expect_equal(process_reveal_option("height", 5), pandoc_variable_arg("height", "5"))
+})
+
+test_that("reveal options for chalkboard plugins special handling", {
+  expect_equal(process_reveal_option("chalkboard-background", "rgba(255,255,255,0.5)"), pandoc_variable_arg("chalkboard-background", "['rgba(255,255,255,0.5)']"))
+  expect_equal(process_reveal_option("chalkboard-color", c("a", "b")), pandoc_variable_arg("chalkboard-color", "['a', 'b']"))
+  expect_equal(process_reveal_option("chalkboard-draw", c("a", "b")), pandoc_variable_arg("chalkboard-draw", "['a', 'b']"))
+  expect_equal(process_reveal_option("chalkboard-pen", c("a", "b")), pandoc_variable_arg("chalkboard-pen", "['a', 'b']"))
+  expect_equal(process_reveal_option("chalkboard-other", "dummy"), pandoc_variable_arg("chalkboard-other", "dummy"))
+})
+
