diff --git a/panels/dataInput.R b/panels/dataInput.R
index 932f43629cd922de7d10c411b9e8e401f1152c9a..5a6a55b050d0a802b590d8252ea3e6778422ef56 100644
--- a/panels/dataInput.R
+++ b/panels/dataInput.R
@@ -300,13 +300,13 @@ output$transformFun <- renderText({
                          sep = "\n"),
           "sqrt" = "data_sqrt <- transform_sample_counts(data, sqrt)",
           "clr" = paste("gm_mean <- function(x, na.rm=TRUE) {",
-                        "  exp(sum(log(x[x > 0 & !is.na(x)]), na.rm=na.rm) / length(x))",
-                        "  }",
-                        "clr <- function(x, base=2) {",
-                        "  x <- log((x / gm_mean(x)), base)",
-                        "  x[!is.finite(x) | is.na(x)] <- 0.0",
-                        "  return(x)",
+                        "  return(exp(mean(log(x), na.rm=na.rm)))",
                         "}",
+                        "clr <- function(x, base=exp(1)) {",
+                        "  x <- x+1",
+                        "  x <- log(x/gm_mean(x), base)",
+                        "  return(x)",
+                        "}", 
                         "data_clr <- transform_sample_counts(data, clr)",
                         sep = "\n")
           )
@@ -328,11 +328,11 @@ observeEvent(input$transformData, {
               },
               "clr" = {
                 gm_mean <- function(x, na.rm=TRUE) {
-                  exp(sum(log(x[x > 0 & !is.na(x)]), na.rm=na.rm) / length(x))
+                  return(exp(mean(log(x), na.rm=na.rm)))
                 }
-                clr <- function(x, base=2) {
-                  x <- log((x / gm_mean(x)), base)
-                  x[!is.finite(x) | is.na(x)] <- 0.0
+                clr <- function(x, base=exp(1)) {
+                  x <- x+1
+                  x <- log(x/gm_mean(x), base)
                   return(x)
                 }
                 physeq(transform_sample_counts(physeq(), clr))