diff --git a/R/iflatex.R b/R/iflatex.R
deleted file mode 100644
index 35b1bef..0000000
--- a/R/iflatex.R
+++ /dev/null
@@ -1,19 +0,0 @@
-#' Return latex control text if rendering latex
-#'
-#' @param txt
-#'
-#' @return a string
-#' @export
-#'
-#' @examples
-#' \dontrun{
-#' iflatex("\\vspace*{\\fill}")
-#' }
-#'
-iflatex <- function(txt){
-  if (knitr::opts_knit$get("rmarkdown.pandoc.to") == "latex"){
-    return(txt)
-  } else {
-    return("")
-  }
-}
\ No newline at end of file
diff --git a/R/posterdown.R b/R/posterdown.R
index 4799c3c..3942f6e 100644
--- a/R/posterdown.R
+++ b/R/posterdown.R
@@ -1,11 +1,13 @@
-#' posterdown: A package for creating Rmarkdown based PDF Latex Posters
+#' posterdown package
 #'
 #' This package creates posters for conferences
 #'
+#' @author Brent Thorne
+#'
 #' @section poster_pdf:
 #' Creates an R Markdown template fo a PDF poster document
 #' @docType package
-#' @name posterndown
+#' @name posterdown
 #' @import rmarkdown
 #' @import devtools
 #' @import dplyr
diff --git a/R/posterdown_generic.R b/R/posterdown_generic.R
new file mode 100644
index 0000000..72efa01
--- /dev/null
+++ b/R/posterdown_generic.R
@@ -0,0 +1,26 @@
+#' Posterdown PDF format
+#'
+#' Format for creating submissions to Multidisciplinary Digital Publishing
+#' Institute (MDPI) journals. Adapted from
+#' \href{http://www.mdpi.com/authors/latex}{http://www.mdpi.com/authors/latex}.
+#'
+#' @inheritParams rmarkdown::pdf_document
+#' @param ... Additional arguments to \code{rmarkdown::pdf_document}
+#'
+#' @return R Markdown output format to pass to
+#'   \code{\link[rmarkdown:render]{render}}
+#'
+#' @examples
+#'
+#' \dontrun{
+#' library(rmarkdown)
+#' draft("MyArticle.Rmd", template = "posterdown_generic", package = "posterdown")
+#' }
+#'
+#' @export
+posterdown_generic <- function(..., keep_tex = TRUE) {
+  inherit_pdf_document(...,
+                       keep_tex = keep_tex,
+                       template = find_resource("posterdown_generic", "template.tex"),
+                       citation_package = "natbib")
+}
diff --git a/R/posterdown_render.R b/R/posterdown_render.R
deleted file mode 100644
index 826348c..0000000
--- a/R/posterdown_render.R
+++ /dev/null
@@ -1,38 +0,0 @@
-#' Creates an R Markdown PDF Thesis document
-#'
-#' This is a function called in output in the YAML of the driver Rmd file
-#' to specify using the Brock University LaTeX template and cls files.
-#'
-#' @export
-#'
-#' @param toc A Boolean (TRUE or FALSE) specifying where table of contents should be created
-#' @param toc_depth A positive integer
-#' @param ... arguments to be passed to \code{rmarkdown::\link[rmarkdown]{pdf_document}}
-#'
-#' @return A modified \code{pdf_document} based on the Jacobs Landscape Poster Latex template
-#' @note The arguments highlight, keep_tex, and pandoc_args, are already set.
-#' @examples
-#' \dontrun{
-#'  output: posterdown::poster_pdf
-#' }
-poster_pdf <- function(toc = TRUE, toc_depth = 3, ...){
-
-  base <- rmarkdown::pdf_document(template = "template.tex",
-                             toc = toc,
-                             toc_depth = toc_depth,
-                             highlight = "default",
-                             keep_tex = TRUE,
-                             pandoc_args = "--top-level-division=default",
-                             ...)
-
-  # Mostly copied from knitr::render_sweave
-  base$knitr$opts_chunk$comment   <- NA
-  base$knitr$opts_chunk$fig.align <- "center"
-  base$knitr$opts_chunk$out.width <- "80%"
-  base$knitr$opts_knit$root.dir   <- getwd()
-  # Not sure if needed?
-  base$knitr$knit_hooks$plot <- knitr:::hook_plot_tex
-
-  base
-
-}
diff --git a/R/utils.R b/R/utils.R
new file mode 100644
index 0000000..2aa1fa3
--- /dev/null
+++ b/R/utils.R
@@ -0,0 +1,82 @@
+find_file <- function(template, file) {
+  template <- system.file("rmarkdown", "templates", template, file,
+                          package = "posterdown")
+  if (template == "") {
+    stop("Couldn't find template file ", template, "/", file, call. = FALSE)
+  }
+
+  template
+}
+
+find_resource <- function(template, file) {
+  find_file(template, file.path("resources", file))
+}
+
+knitr_fun <- function(name) utils::getFromNamespace(name, 'knitr')
+
+output_asis <- knitr_fun('output_asis')
+
+merge_list <- function(x, y) {
+  fun <- knitr_fun('merge_list')
+  fun(as.list(x), y)
+}
+
+#' Render a pandoc template.
+#'
+#' This is a hacky way to access the pandoc templating engine.
+#'
+#' @param metadata A named list containing metadata to pass to template.
+#' @param template Path to a pandoc template.
+#' @param output Path to save output.
+#' @return (Invisibly) The path of the generate file.
+#' @examples
+#' x <- posterdown:::template_pandoc(
+#'   list(preamble = "%abc", filename = "wickham"),
+#'   posterdown:::find_resource("posterdown_generic", "template.tex"),
+#'   tempfile()
+#' )
+#' if (interactive()) file.show(x)
+#' @noRd
+template_pandoc <- function(metadata, template, output, verbose = FALSE) {
+  tmp <- tempfile(fileext = ".md")
+  on.exit(unlink(tmp))
+
+  cat("---\n", file = tmp)
+  cat(yaml::as.yaml(metadata), file = tmp, append = TRUE)
+  cat("---\n", file = tmp, append = TRUE)
+  cat("\n", file = tmp, append = TRUE)
+
+  rmarkdown::pandoc_convert(tmp, "markdown", output = output,
+                            options = paste0("--template=", template), verbose = verbose)
+
+  invisible(output)
+}
+
+
+# Call rmarkdown::pdf_document and mark the return value as inheriting pdf_document
+inherit_pdf_document <- function(...) {
+  fmt <- rmarkdown::pdf_document(...)
+  fmt$inherits <- "pdf_document"
+  fmt
+}
+
+# Helper function to create a custom format derived from pdf_document
+# that includes a custom LaTeX template and custom CSL definition
+pdf_document_format <- function(..., format, template, csl) {
+
+  # base format
+  fmt <- inherit_pdf_document(..., template = find_resource(format, template))
+
+  # add csl to pandoc_args
+  fmt$pandoc$args <- c(fmt$pandoc$args,
+                       "--csl",
+                       rmarkdown::pandoc_path_arg(find_resource(format, csl)))
+
+
+  # return format
+  fmt
+}
+
+
+
+
