diff --git a/.Rbuildignore b/.Rbuildignore
index a087f76231d83b5bbee2580d2b3b2b2105b6bd52..5c7dbad65f33379850f6c86bc7b0c8cde6549c57 100644
--- a/.Rbuildignore
+++ b/.Rbuildignore
@@ -6,5 +6,6 @@
 ^NEWS\.md$
 ^\.git*
 ^docs$
+^index\.md$
 ^_pkgdown\.yml$
 ^pkgdown$
diff --git a/DESCRIPTION b/DESCRIPTION
index 304ab01523ae5364fc9bd2a3f164f849e15040b6..8d6ed5f3936c6bef47b00f601fae2b6db5231f65 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,8 +1,8 @@
 Package: splatter
 Type: Package
 Title: Simple Simulation of Single-cell RNA Sequencing Data
-Version: 1.1.4
-Date: 2017-08-04
+Version: 1.1.7
+Date: 2017-10-05
 Author: Luke Zappia
 Authors@R:
     c(person("Luke", "Zappia", role = c("aut", "cre"),
@@ -21,36 +21,40 @@ License: GPL-3 + file LICENSE
 LazyData: TRUE
 Depends:
     R (>= 3.4),
-    scater
+    scater,
+    SingleCellExperiment
 Imports:
-    fitdistrplus,
-    edgeR,
-    stats,
-    locfit,
     akima,
-    Biobase,
+    BiocGenerics,
+    BiocParallel,
     checkmate,
-    methods,
-    utils,
-    matrixStats,
+    edgeR,
+    fitdistrplus,
     ggplot2,
+    locfit,
+    matrixStats,
+    methods,
     scales,
-    BiocParallel,
-    SummarizedExperiment
+    stats,
+    SummarizedExperiment,
+    utils
 Suggests:
-    testthat,
-    scran,
-    progress,
+    BiocStyle,
+    covr,
+    cowplot,
+    knitr,
+    limSolve,
     lme4,
+    progress,
     pscl,
-    scDD,
-    knitr,
+    testthat,
     rmarkdown,
-    BiocStyle,
-    covr,
     S4Vectors,
-    cowplot,
-    limSolve
+    scDD,
+    scran,
+    mfa,
+    phenopath,
+    zinbwave
 biocViews: SingleCell, RNASeq, Transcriptomics, GeneExpression, Sequencing,
     Software
 URL: https://github.com/Oshlack/splatter
diff --git a/NAMESPACE b/NAMESPACE
index 30ebc11eb237d99a6228663b7e765f1c048c4f43..642439f7ddb59588e139aa67551ae8d178874290 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -2,21 +2,28 @@
 
 S3method(BASiCSEstimate,SCESet)
 S3method(BASiCSEstimate,matrix)
-S3method(lun2Estimate,SCESet)
+S3method(lun2Estimate,SingleCellExperiment)
 S3method(lun2Estimate,matrix)
-S3method(lunEstimate,SCESet)
+S3method(lunEstimate,SingleCellExperiment)
 S3method(lunEstimate,matrix)
-S3method(scDDEstimate,SCESet)
+S3method(mfaEstimate,SingleCellExperiment)
+S3method(mfaEstimate,matrix)
+S3method(phenoEstimate,SingleCellExperiment)
+S3method(phenoEstimate,matrix)
+S3method(scDDEstimate,SingleCellExperiment)
+S3method(scDDEstimate,default)
 S3method(scDDEstimate,matrix)
-S3method(simpleEstimate,SCESet)
+S3method(simpleEstimate,SingleCellExperiment)
 S3method(simpleEstimate,matrix)
-S3method(splatEstimate,SCESet)
+S3method(splatEstimate,SingleCellExperiment)
 S3method(splatEstimate,matrix)
+S3method(zinbEstimate,SingleCellExperiment)
+S3method(zinbEstimate,matrix)
 export(BASiCSEstimate)
 export(BASiCSSimulate)
 export(addGeneLengths)
-export(compareSCESets)
-export(diffSCESets)
+export(compareSCEs)
+export(diffSCEs)
 export(getParam)
 export(getParams)
 export(listSims)
@@ -27,12 +34,19 @@ export(lunSimulate)
 export(makeCompPanel)
 export(makeDiffPanel)
 export(makeOverallPanel)
+export(mfaEstimate)
+export(mfaSimulate)
 export(newBASiCSParams)
 export(newLun2Params)
 export(newLunParams)
+export(newMFAParams)
+export(newPhenoParams)
 export(newSCDDParams)
 export(newSimpleParams)
 export(newSplatParams)
+export(newZINBParams)
+export(phenoEstimate)
+export(phenoSimulate)
 export(scDDEstimate)
 export(scDDSimulate)
 export(setParam)
@@ -45,19 +59,27 @@ export(splatSimulateGroups)
 export(splatSimulatePaths)
 export(splatSimulateSingle)
 export(summariseDiff)
+export(zinbEstimate)
+export(zinbSimulate)
 exportClasses(BASiCSParams)
 exportClasses(Lun2Params)
 exportClasses(LunParams)
+exportClasses(MFAParams)
+exportClasses(PhenoParams)
 exportClasses(SCDDParams)
 exportClasses(SimpleParams)
 exportClasses(SplatParams)
-importFrom(Biobase,"fData<-")
-importFrom(Biobase,"pData<-")
-importFrom(Biobase,assayData)
-importFrom(Biobase,fData)
-importFrom(Biobase,pData)
+exportClasses(ZINBParams)
 importFrom(BiocParallel,SerialParam)
 importFrom(BiocParallel,bplapply)
+importFrom(SingleCellExperiment,"cpm<-")
+importFrom(SingleCellExperiment,SingleCellExperiment)
+importFrom(SummarizedExperiment,"assays<-")
+importFrom(SummarizedExperiment,"colData<-")
+importFrom(SummarizedExperiment,"rowData<-")
+importFrom(SummarizedExperiment,assays)
+importFrom(SummarizedExperiment,colData)
+importFrom(SummarizedExperiment,rowData)
 importFrom(checkmate,checkCharacter)
 importFrom(checkmate,checkClass)
 importFrom(checkmate,checkDataFrame)
@@ -93,10 +115,6 @@ importFrom(methods,new)
 importFrom(methods,slot)
 importFrom(methods,slotNames)
 importFrom(methods,validObject)
-importFrom(scater,"cpm<-")
-importFrom(scater,"set_exprs<-")
-importFrom(scater,counts)
-importFrom(scater,get_exprs)
 importFrom(scater,newSCESet)
 importFrom(stats,dnbinom)
 importFrom(stats,median)
diff --git a/NEWS.md b/NEWS.md
index 27bbf3203470fbb9a0b3afb118952f16c08d2a55..9066d35406e9f8ecbae08b624d504c27a55f56d7 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,3 +1,18 @@
+## Version 1.1.7 (2017-10-05)
+
+* Add PhenoPath simulation
+* Add ZINB-WaVE simulation
+* Adjust mfaSimulate output
+
+## Version 1.1.6 (2017-10-02)
+
+* Update scDD version
+* Add mfa simulation
+
+## Version 1.1.5 (2017-09-13)
+
+* Convert to SingleCellExperiment
+
 ## Version 1.1.4 (2017-08-04)
 
 * Fix group factors bug
@@ -194,3 +209,4 @@
 
 * Added splatParams object
 * Added functions for interacting with splatParams
+
diff --git a/R/AllClasses.R b/R/AllClasses.R
index 91e23ebf7d3b2f9fa23cbef1ecd2ffdf001067e2..b0a69d8d365bda833e71260d025458e7c8730557 100644
--- a/R/AllClasses.R
+++ b/R/AllClasses.R
@@ -7,12 +7,12 @@
 #' The Params class defines the following parameters:
 #'
 #' \describe{
-#'     \item{\code{[nGenes]}}{The number of genes to simulate.}
-#'     \item{\code{[nCells]}}{The number of cells to simulate.}
-#'     \item{\code{seed}}{Seed to use for generating random numbers.}
+#'     \item{\code{nGenes}}{The number of genes to simulate.}
+#'     \item{\code{nCells}}{The number of cells to simulate.}
+#'     \item{\code{[seed]}}{Seed to use for generating random numbers.}
 #' }
 #'
-#' The parameters shown in brackets can be estimated from real data.
+#' The parameters not shown in brackets can be estimated from real data.
 #'
 #' @name Params
 #' @rdname Params
@@ -409,7 +409,7 @@ setClass("Lun2Params",
 #'     \item{\code{nCells}}{The number of cells to simulate in each condition.}
 #'     \item{\code{[seed]}}{Seed to use for generating random numbers.}
 #'     \item{\code{SCdat}}{
-#'     \code{\link[SummarizedExperiment]{SummarizedExperiment}} containing real
+#'     \code{\link[SingleCellExperiment]{SingleCellExperiment}} containing real
 #'     data.}
 #'     \item{\code{nDE}}{Number of DE genes to simulate.}
 #'     \item{\code{nDP}}{Number of DP genes to simulate.}
@@ -427,8 +427,8 @@ setClass("Lun2Params",
 #'
 #' The parameters not shown in brackets can be estimated from real data using
 #' \code{\link{scDDEstimate}}. See \code{\link[scDD]{simulateSet}} for more
-#' details of the parameters. For details of the Splatter implementation of the
-#' scDD simulation see \code{\link{scDDSimulate}}.
+#' details about the parameters. For details of the Splatter implementation of
+#' the scDD simulation see \code{\link{scDDSimulate}}.
 #'
 #' @name SCDDParams
 #' @rdname SCDDParams
@@ -448,7 +448,7 @@ setClass("SCDDParams",
                    varInflation = "numeric",
                    condition = "character"),
           prototype = prototype(SCdat =
-                                   SummarizedExperiment::SummarizedExperiment(),
+                                   SingleCellExperiment::SingleCellExperiment(),
                                nCells = 100,
                                nDE = 250,
                                nDP = 250,
@@ -468,7 +468,6 @@ setClass("SCDDParams",
 #' @section Parameters:
 #'
 #' The BASiCS simulation uses the following parameters:
-#'
 #' \describe{
 #'     \item{\code{nGenes}}{The number of genes to simulate.}
 #'     \item{\code{nCells}}{The number of cells to simulate.}
@@ -545,3 +544,117 @@ setClass("BASiCSParams",
                                ),
                                theta = 0.39)
 )
+
+#' The MFAParams class
+#'
+#' S4 class that holds parameters for the mfa simulation.
+#'
+#' @section Parameters:
+#'
+#' The mfa simulation uses the following parameters:
+#' \describe{
+#'     \item{\code{nGenes}}{The number of genes to simulate.}
+#'     \item{\code{nCells}}{The number of cells to simulate.}
+#'     \item{\code{[seed]}}{Seed to use for generating random numbers.}
+#'     \item{\code{[trans.prop]}}{Proportion of genes that show transient
+#'     expression. These genes are briefly up or down-regulated before returning
+#'     to their initial state}
+#'     \item{\code{[zero.neg]}}{Logical. Whether to set negative expression
+#'     values to zero. This will zero-inflate the data.}
+#'     \item{\code{[dropout.present]}}{Logical. Whether to simulate dropout.}
+#'     \item{\code{dropout.lambda}}{Lambda parameter for the exponential
+#'     dropout function.}
+#' }
+#'
+#' The parameters not shown in brackets can be estimated from real data using
+#' \code{\link{mfaEstimate}}. See \code{\link[mfa]{create_synthetic}} for more
+#' details about the parameters. For details of the Splatter implementation of
+#' the mfa simulation see \code{\link{mfaSimulate}}.
+#'
+#' @name MFAParams
+#' @rdname MFAParams
+#' @aliases MFAParams-class
+#' @exportClass MFAParams
+setClass("MFAParams",
+         contains = "Params",
+         slots = c(trans.prop = "numeric",
+                   zero.neg = "logical",
+                   dropout.present = "logical",
+                   dropout.lambda = "numeric"),
+         prototype = prototype(trans.prop = 0, zero.neg = TRUE,
+                               dropout.present = FALSE, dropout.lambda = 1))
+
+
+#' The PhenoParams class
+#'
+#' S4 class that holds parameters for the PhenoPath simulation.
+#'
+#' @section Parameters:
+#'
+#' The PhenoPath simulation uses the following parameters:
+#'
+#' \describe{
+#'     \item{\code{nGenes}}{The number of genes to simulate.}
+#'     \item{\code{nCells}}{The number of cells to simulate.}
+#'     \item{\code{[seed]}}{Seed to use for generating random numbers.}
+#'     \item{\code{[n.de]}}{Number of genes to simulate from the differential
+#'     expression regime}
+#'     \item{\code{[n.pst]}}{Number of genes to simulate from the pseudotime
+#'     regime}
+#'     \item{\code{[n.pst.beta]}}{Number of genes to simulate from the
+#'     pseudotime + beta interactions regime}
+#'     \item{\code{[n.de.pst.beta]}}{Number of genes to simulate from the
+#'     differential expression + pseudotime + interactions regime}
+#' }
+#'
+#' The parameters not shown in brackets can be estimated from real data using
+#' \code{\link{phenoEstimate}}. For details of the PhenoPath simulation
+#' see \code{\link{phenoSimulate}}.
+#'
+#' @name PhenoParams
+#' @rdname PhenoParams
+#' @aliases PhenoParams-class
+#' @exportClass PhenoParams
+setClass("PhenoParams",
+         contains = "Params",
+         slots = c(n.de = "numeric",
+                   n.pst = "numeric",
+                   n.pst.beta = "numeric",
+                   n.de.pst.beta = "numeric"),
+         prototype = prototype(n.de = 2500, n.pst = 2500, n.pst.beta = 2500,
+                               n.de.pst.beta = 2500))
+
+
+#' The ZINBParams class
+#'
+#' S4 class that holds parameters for the ZINB-WaVE simulation.
+#'
+#' @section Parameters:
+#'
+#' The ZINB-WaVE simulation uses the following parameters:
+#'
+#' \describe{
+#'     \item{\code{nGenes}}{The number of genes to simulate.}
+#'     \item{\code{nCells}}{The number of cells to simulate.}
+#'     \item{\code{[seed]}}{Seed to use for generating random numbers.}
+#'     \item{\code{model}}{Object describing a ZINB model.}
+#' }
+#'
+#' The majority of the parameters for this simulation are stored in a
+#' \code{\link[zinbwave]{ZinbModel}} object. Please refer to the documentation
+#' for this class and its constructor(\code{\link[zinbwave]{zinbModel}}) for
+#' details about all the parameters.
+#'
+#' The parameters not shown in brackets can be estimated from real data using
+#' \code{\link{zinbEstimate}}. For details of the ZINB-WaVE simulation
+#' see \code{\link{zinbSimulate}}.
+#'
+#' @name ZINBParams
+#' @rdname ZINBParams
+#' @aliases ZINBParams-class
+#' @exportClass ZINBParams
+setClass("ZINBParams",
+         contains = "Params",
+         slots = c(model = "ZinbModel"),
+         prototype = prototype(nGenes = 100, nCells = 50,
+                               model = zinbwave::zinbModel()))
diff --git a/R/MFAParams-methods.R b/R/MFAParams-methods.R
new file mode 100644
index 0000000000000000000000000000000000000000..2ff3e54d5f8730b93e7c8cf6789923c2fc148f12
--- /dev/null
+++ b/R/MFAParams-methods.R
@@ -0,0 +1,52 @@
+#' @rdname newParams
+#' @importFrom methods new
+#' @export
+newMFAParams <- function(...) {
+
+    if (!requireNamespace("mfa", quietly = TRUE)) {
+        stop("The mfa simulation requires the 'mfa' package.")
+    }
+
+    params <- new("MFAParams")
+    params <- setParams(params, ...)
+
+    return(params)
+}
+
+setValidity("MFAParams", function(object) {
+
+    v <- getParams(object, slotNames(object))
+
+    checks <- c(nGenes = checkmate::checkInt(v$nGenes, lower = 1),
+                nCells = checkmate::checkInt(v$nCells, lower = 1),
+                trans.prop = checkmate::checkNumber(v$trans.prop, lower = 0,
+                                                    upper = 1),
+                zero.neg = checkmate::checkLogical(v$zero.neg,
+                                                   any.missing = FALSE,
+                                                   len = 1),
+                dropout.present = checkmate::checkLogical(v$dropout.present,
+                                                          any.missing = FALSE,
+                                                          len = 1),
+                dropout.lambda = checkmate::checkNumber(v$dropout.lambda),
+                seed = checkmate::checkInt(v$seed, lower = 0))
+
+    if (all(checks == TRUE)) {
+        valid <- TRUE
+    } else {
+        valid <- checks[checks != TRUE]
+        valid <- paste(names(valid), valid, sep = ": ")
+    }
+
+    return(valid)
+})
+
+setMethod("show", "MFAParams", function(object) {
+
+    pp <- list("Transient:" = c("[Proportion]" = "trans.prop"),
+               "Negative:"  = c("[Zero]"       = "zero.neg"),
+               "Dropout:"   = c("[Present]"    = "dropout.present",
+                              "(Lambda)"       = "dropout.lambda"))
+
+    callNextMethod()
+    showPP(object, pp)
+})
diff --git a/R/PhenoParams-methods.R b/R/PhenoParams-methods.R
new file mode 100644
index 0000000000000000000000000000000000000000..2151c52c6a877a3d7503040e55468f8159ff30f2
--- /dev/null
+++ b/R/PhenoParams-methods.R
@@ -0,0 +1,79 @@
+#' @rdname newParams
+#' @importFrom methods new
+#' @export
+newPhenoParams <- function(...) {
+
+    if (!requireNamespace("phenopath", quietly = TRUE)) {
+        stop("The PhenoPath simulation requires the 'phenopath' package.")
+    }
+
+    params <- new("PhenoParams")
+    params <- setParams(params, ...)
+
+    return(params)
+}
+
+setValidity("PhenoParams", function(object) {
+
+    v <- getParams(object, slotNames(object))
+
+    checks <- c(nGenes = checkmate::checkInt(v$nGenes, lower = 1),
+                nCells = checkmate::checkInt(v$nCells, lower = 1),
+                n.de = checkmate::checkInt(v$n.de, lower = 0),
+                n.pst = checkmate::checkInt(v$n.pst, lower = 0),
+                n.pst.beta = checkmate::checkInt(v$n.pst.beta, lower = 0),
+                n.de.pst.beta = checkmate::checkInt(v$n.de.pst.beta, lower = 0),
+                seed = checkmate::checkInt(v$seed, lower = 0))
+
+    if (v$nGenes != (v$n.de + v$n.pst + v$n.pst.beta + v$n.de.pst.beta)) {
+        checks <- c(checks,
+                    nGenes = paste("nGenes is not consistent with",
+                                   "n.de, n.pst, n.pst.beta, n.de.pst.beta"))
+    }
+
+    if (all(checks == TRUE)) {
+        valid <- TRUE
+    } else {
+        valid <- checks[checks != TRUE]
+        valid <- paste(names(valid), valid, sep = ": ")
+    }
+
+    return(valid)
+})
+
+#' @rdname setParam
+setMethod("setParam", "PhenoParams", function(object, name, value) {
+    checkmate::assertString(name)
+
+    if (name == "nGenes") {
+        stop(name, " cannot be set directly, set n.de, n.pst, n.pst.beta or ",
+             "n.de.pst.beta instead")
+    }
+
+    nNames <- c("n.de", "n.pst", "n.pst.beta", "n.de.pst.beta")
+    if (name %in% nNames) {
+        checkmate::assertInt(value, lower = 0)
+        total <- value
+        for (nName in nNames) {
+            if (nName != name) {
+                total <- total + getParam(object, nName)
+            }
+        }
+        object <- setParamUnchecked(object, "nGenes", total)
+    }
+
+    object <- callNextMethod()
+
+    return(object)
+})
+
+setMethod("show", "PhenoParams", function(object) {
+
+    pp <- list("Genes:"  = c("[DE]"              = "n.de",
+                             "[PST]"             = "n.pst",
+                             "[PST + Beta]"      = "n.pst.beta",
+                             "[DE + PST + Beta]" = "n.de.pst.beta"))
+
+    callNextMethod()
+    showPP(object, pp)
+})
diff --git a/R/SCDDParams-methods.R b/R/SCDDParams-methods.R
index 09aa786a36852cf62acdc979ca8d3e5cc9d5fb23..22c6ac198a2db3c8fab3ee445b543227fb209a4b 100644
--- a/R/SCDDParams-methods.R
+++ b/R/SCDDParams-methods.R
@@ -26,7 +26,7 @@ setValidity("SCDDParams", function(object) {
     checks <- c(nGenes = checkInt(v$nGenes, lower = 1),
                 nCells = checkInt(v$nCells, lower = 1),
                 seed = checkInt(v$seed, lower = 0),
-                SCDat = checkClass(v$SCdat, "SummarizedExperiment"),
+                SCDat = checkClass(v$SCdat, "SingleCellExperiment"),
                 nDE = checkInt(v$nDE, lower = 0),
                 nDP = checkInt(v$nDP, lower = 0),
                 nDM = checkInt(v$nDM, lower = 0),
@@ -102,8 +102,8 @@ setMethod("show", "SCDDParams", function(object) {
     SCdat <- getParam(object, "SCdat")
     cat("Data:", "\n")
     cat("(SCdat)", "\n")
-    cat("SummarizedExperiment with", dim(SCdat)[1], "features and",
-        dim(SCdat)[2], "samples", "\n\n")
+    cat("SingleCellExperiment with", dim(SCdat)[1], "features and",
+        dim(SCdat)[2], "cells", "\n\n")
 
     showPP(object, pp)
 })
diff --git a/R/SCESet-functions.R b/R/SCE-functions.R
similarity index 58%
rename from R/SCESet-functions.R
rename to R/SCE-functions.R
index 2a92c3545c2aa80652533158bbd89168b65f5735..34bc7ad8e81af276a566768f7a7a4f3aacf8da4f 100644
--- a/R/SCESet-functions.R
+++ b/R/SCE-functions.R
@@ -1,11 +1,11 @@
 #' Add feature statistics
 #'
-#' Add additional feature statistics to an SCESet object
+#' Add additional feature statistics to a SingleCellExperiment object
 #'
-#' @param sce SCESet to add feature statistics to.
+#' @param sce SingleCellExperiment to add feature statistics to.
 #' @param value the expression value to calculate statistics for. Options are
 #'        "counts", "cpm", "tpm" or "fpkm". The values need to exist in the
-#'        given SCESet.
+#'        given SingleCellExperiment.
 #' @param log logical. Whether to take log2 before calculating statistics.
 #' @param offset offset to add to avoid taking log of zero.
 #' @param no.zeros logical. Whether to remove all zeros from each feature before
@@ -14,34 +14,38 @@
 #' @details
 #' Currently adds the following statistics: mean, variance, coefficient of
 #' variation, median and median absolute deviation. Statistics are added to
-#' the \code{fData} slot and are named \code{Stat[Log]Value[No0]} where
-#' \code{Log} and \code{No0} are added if those arguments are true.
-#' UpperCamelCase is used to differentiate these columns from those added by
-#' \code{scater}.
+#' the \code{\link[SummarizedExperiment]{rowData}} slot and are named
+#' \code{Stat[Log]Value[No0]} where \code{Log} and \code{No0} are added if those
+#' arguments are true. UpperCamelCase is used to differentiate these columns
+#' from those added by analysis packages.
 #'
-#' @return SCESet with additional feature statistics
+#' @return SingleCellExperiment with additional feature statistics
 #'
-#' @importFrom Biobase fData fData<-
+#' @importFrom SummarizedExperiment rowData rowData<-
 addFeatureStats <- function(sce, value = c("counts", "cpm", "tpm", "fpkm"),
                             log = FALSE, offset = 1, no.zeros = FALSE) {
 
+    checkmate::assertClass(sce, "SingleCellExperiment")
+    checkmate::assertLogical(log)
+    checkmate::assertNumber(offset, lower = 0)
+    checkmate::assertLogical(no.zeros)
     value <- match.arg(value)
 
     switch(value,
            counts = {
-               values = scater::counts(sce)
+               values = BiocGenerics::counts(sce)
                suffix <- "Counts"
            },
            cpm = {
-               values = scater::cpm(sce)
+               values = SingleCellExperiment::cpm(sce)
                suffix <- "CPM"
            },
            tpm = {
-               values = scater::tpm(sce)
+               values = SingleCellExperiment::tpm(sce)
                suffix <- "TPM"
            },
            fpkm = {
-               values = scater::fpkm(sce)
+               values = SummarizedExperiment::assays(sce)$fpkm
                suffix <- "FPKM"
            }
     )
@@ -62,41 +66,43 @@ addFeatureStats <- function(sce, value = c("counts", "cpm", "tpm", "fpkm"),
     med.str  <- paste0("Med",  suffix)
     mad.str  <- paste0("MAD",  suffix)
 
-    fData(sce)[, mean.str] <- rowMeans(values, na.rm = TRUE)
-    fData(sce)[, var.str]  <- matrixStats::rowVars(values, na.rm = TRUE)
-    fData(sce)[, cv.str]   <- sqrt(fData(sce)[, var.str]) /
-        fData(sce)[, mean.str]
-    fData(sce)[, med.str]  <- matrixStats::rowMedians(values, na.rm = TRUE)
-    fData(sce)[, mad.str]  <- matrixStats::rowMads(values, na.rm = TRUE)
+    rowData(sce)[, mean.str] <- rowMeans(values, na.rm = TRUE)
+    rowData(sce)[, var.str]  <- matrixStats::rowVars(values, na.rm = TRUE)
+    rowData(sce)[, cv.str]   <- sqrt(rowData(sce)[, var.str]) /
+        rowData(sce)[, mean.str]
+    rowData(sce)[, med.str]  <- matrixStats::rowMedians(values, na.rm = TRUE)
+    rowData(sce)[, mad.str]  <- matrixStats::rowMads(values, na.rm = TRUE)
 
     return(sce)
 }
 
 #' Add gene lengths
 #'
-#' Add gene lengths to an SCESet object
+#' Add gene lengths to an SingleCellExperiment object
 #'
-#' @param sce SCESet to add gene lengths to.
+#' @param sce SingleCellExperiment to add gene lengths to.
 #' @param method Method to use for creating lengths.
 #' @param loc Location parameter for the generate method.
 #' @param scale Scale parameter for the generate method.
 #' @param lengths Vector of lengths for the sample method.
 #'
 #' @details
-#' This function adds simulated gene lengths to the \code{fData} slot of an
-#' \code{SCESet} object that can be used for calculating length normalised
-#' expression values such as TPM or FPKM. The \code{generate} simulates lengths
-#' using a (rounded) log-normal distribution, with the default \code{loc} and
-#' \code{scale} parameters based on human coding genes. Alternatively the
-#' \code{sample} method can be used which randomly samples lengths (with
-#' replacement) from a supplied vector.
+#' This function adds simulated gene lengths to the
+#' \code{\link[SummarizedExperiment]{rowData}} slot of a
+#' \code{\link[SingleCellExperiment]{SingleCellExperiment}} object that can be
+#' used for calculating length normalised expression values such as TPM or FPKM.
+#' The \code{generate} method simulates lengths using a (rounded) log-normal
+#' distribution, with the default \code{loc} and \code{scale} parameters based
+#' on human protein-coding genes. Alternatively the \code{sample} method can be
+#' used which randomly samples lengths (with replacement) from a supplied
+#' vector.
 #'
-#' @return SCESet with added gene lengths
+#' @return SingleCellExperiment with added gene lengths
 #' @examples
 #' # Default generate method
 #' sce <- simpleSimulate()
 #' sce <- addGeneLengths(sce)
-#' head(fData(sce))
+#' head(rowData(sce))
 #' # Sample method (human coding genes)
 #' \dontrun{
 #' library(TxDb.Hsapiens.UCSC.hg19.knownGene)
@@ -113,7 +119,7 @@ addGeneLengths <- function(sce, method = c("generate", "sample"), loc = 7.9,
                            scale = 0.7, lengths = NULL) {
 
     method <- match.arg(method)
-    checkmate::assertClass(sce, "SCESet")
+    checkmate::assertClass(sce, "SingleCellExperiment")
     checkmate::assertNumber(loc)
     checkmate::assertNumber(scale, lower = 0)
     checkmate::assertNumeric(lengths, lower = 0, null.ok = TRUE)
@@ -132,13 +138,7 @@ addGeneLengths <- function(sce, method = c("generate", "sample"), loc = 7.9,
            }
     )
 
-    fData(sce)$Length <- sim.lengths
+    rowData(sce)$Length <- sim.lengths
 
     return(sce)
 }
-
-#txdb <- TxDb.Hsapiens.UCSC.hg19.knownGene::TxDb.Hsapiens.UCSC.hg19.knownGene
-#tx.lens <- GenomicFeatures::transcriptLengths(txdb, with.cds_len = TRUE)
-#tx.lens <- tx.lens[tx.lens$cds_len > 0, ]
-#gene.lens <- max(IRanges::splitAsList(tx.lens$tx_len, tx.lens$gene_id))
-#lens <- rlnorm(length(gene.lens), meanlog = 7.9, sdlog = 0.7)
diff --git a/R/ZINBParams-methods.R b/R/ZINBParams-methods.R
new file mode 100644
index 0000000000000000000000000000000000000000..2cddd4da2f4d507dff03f5894ea073989add3679
--- /dev/null
+++ b/R/ZINBParams-methods.R
@@ -0,0 +1,124 @@
+#' @rdname newParams
+#' @importFrom methods new
+#' @export
+newZINBParams <- function(...) {
+
+    if (!requireNamespace("zinbwave", quietly = TRUE)) {
+        stop("The ZINB-WaVE simulation requires the 'zinbwave' package.")
+    }
+
+    params <- new("ZINBParams")
+
+    params <- setParams(params, ...)
+
+    return(params)
+}
+
+setValidity("ZINBParams", function(object) {
+
+    v <- getParams(object, slotNames(object))
+
+    checks <- c(nGenes = checkmate::checkInt(v$nGenes, lower = 1),
+                nCells = checkmate::checkInt(v$nCells, lower = 1),
+                seed = checkmate::checkInt(v$seed, lower = 0),
+                model = checkmate::checkClass(v$model, "ZinbModel"),
+                model_valid = validObject(v$model, test = TRUE))
+
+    if (all(checks == TRUE)) {
+        valid <- TRUE
+    } else {
+        valid <- checks[checks != TRUE]
+        valid <- paste(names(valid), valid, sep = ": ")
+    }
+
+    return(valid)
+})
+
+#' @rdname setParam
+setMethod("setParam", "ZINBParams", function(object, name, value) {
+    checkmate::assertString(name)
+
+    if (name %in% c("nGenes", "nCells")) {
+        stop(name, " cannot be set directly, set model instead")
+    }
+
+    if (name == "model") {
+        object <- setParamUnchecked(object, "nGenes",
+                                    zinbwave::nFeatures(value))
+        object <- setParamUnchecked(object, "nCells",
+                                    zinbwave::nSamples(value))
+    }
+
+    object <- callNextMethod()
+
+    return(object)
+})
+
+setMethod("show", "ZINBParams", function(object) {
+
+    pp <- list("Design:"         = c("(Samples)"       = "X",
+                                     "(Genes)"         = "V"),
+               "Offsets:"        = c("(Mu)"            = "O_mu",
+                                     "(Pi)"            = "O_pi"),
+               "Indices:"        = c("(Sample Mu)"     = "which_X_mu",
+                                     "(Gene Mu)"       = "which_V_mu",
+                                     "(Sample Pi)"     = "which_X_pi",
+                                     "(Gene Pi)"       = "which_V_pi"),
+               "Intercepts:"     = c("(Sample Mu)"     = "X_mu_intercept",
+                                     "(Gene Mu)"       = "V_mu_intercept",
+                                     "(Sample Pi)"     = "X_pi_intercept",
+                                     "(Gene Pi)"       = "V_pi_intercept"),
+               "Latent factors:" = c("(W)"             = "W"),
+               "Coefficients:"   = c("(Sample Mu)"     = "beta_mu",
+                                     "(Gene Mu)"       = "gamma_mu",
+                                     "(Latent Mu)"     = "alpha_mu",
+                                     "(Sample Pi)"     = "beta_pi",
+                                     "(Gene Pi)"       = "gamma_pi",
+                                     "(Latent Pi)"     = "alpha_pi"),
+               "Regularisation:" = c("(Sample Mu)"     = "epsilon_beta_mu",
+                                     "(Gene Mu)"       = "epsilon_gamma_mu",
+                                     "(Sample Pi)"     = "epsilon_beta_pi",
+                                     "(Gene Pi)"       = "epsilon_gamma_pi",
+                                     "(Latent)"        = "epsilon_W",
+                                     "(Latent coeffs)" = "epsilon_alpha",
+                                     "(Zeta)"          = "epsilon_zeta",
+                                     "(Logit)"         = "epsilon_min_logit"))
+
+    callNextMethod()
+
+    model <- getParam(object, "model")
+    cat("Model:", "\n")
+    cat("ZinbModel with", zinbwave::nFeatures(model), "features,",
+        zinbwave::nSamples(model), "samples,", zinbwave::nFactors(model),
+        "latent factors and", zinbwave::nParams(model), "parameters", "\n\n")
+
+    default <- zinbwave::zinbModel()
+    for (category in names(pp)) {
+        parameters <- pp[[category]]
+        values <- lapply(parameters, function(x) {slot(model, x)})
+        short.values <- sapply(values, function(x) {
+            if ("matrix" %in% class(x)) {
+                if (nrow(x) == 1) {
+                    paste0(paste(head(x[1, ], n = 4), collapse = ", "), ",...")
+                } else if (ncol(x) == 1) {
+                    paste0(paste(head(x[, 1], n = 4), collapse = ", "), ",...")
+                } else {
+                    paste(nrow(x), "x", ncol(x), "matrix")
+                }
+            } else if (length(x) > 4) {
+                paste0(paste(head(x, n = 4), collapse = ", "), ",...")
+            } else {
+                paste(x, collapse = ", ")
+            }
+        })
+        values <- sapply(values, paste, collapse = ", ")
+        default.values <- lapply(parameters, function(x) {slot(default, x)})
+        default.values <- sapply(default.values, paste, collapse = ", ")
+        not.default <- values != default.values
+        names(short.values)[not.default] <- toupper(names(values[not.default]))
+        cat("Model", category, "\n")
+        print(noquote(short.values), print.gap = 2)
+        cat("\n")
+    }
+
+})
diff --git a/R/compare.R b/R/compare.R
index 45af8032c2f8b585e14546faff21474a6187651b..6739fb939c4022aeaecd39dffe38a820dab0a913 100644
--- a/R/compare.R
+++ b/R/compare.R
@@ -1,9 +1,10 @@
-#' Compare SCESet objects
+#' Compare SingleCellExperiment objects
 #'
-#' Combine the data from several SCESet objects and produce some basic plots
-#' comparing them.
+#' Combine the data from several SingleCellExperiment objects and produce some
+#' basic plots comparing them.
 #'
-#' @param sces named list of SCESet objects to combine and compare.
+#' @param sces named list of SingleCellExperiment objects to combine and
+#'        compare.
 #' @param point.size size of points in scatter plots.
 #' @param point.alpha opacity of points in scatter plots.
 #' @param fits whether to include fits in scatter plots.
@@ -14,8 +15,9 @@
 #'
 #' \describe{
 #'     \item{\code{FeatureData}}{Combined feature data from the provided
-#'     SCESets.}
-#'     \item{\code{PhenoData}}{Combined pheno data from the provided SCESets.}
+#'     SingleCellExperiments.}
+#'     \item{\code{PhenoData}}{Combined pheno data from the provided
+#'     SingleCellExperiments.}
 #'     \item{\code{Plots}}{Comparison plots
 #'         \describe{
 #'             \item{\code{Means}}{Boxplot of mean distribution.}
@@ -44,19 +46,19 @@
 #' @examples
 #' sim1 <- splatSimulate(nGenes = 1000, batchCells = 20)
 #' sim2 <- simpleSimulate(nGenes = 1000, nCells = 20)
-#' comparison <- compareSCESets(list(Splat = sim1, Simple = sim2))
+#' comparison <- compareSCEs(list(Splat = sim1, Simple = sim2))
 #' names(comparison)
 #' names(comparison$Plots)
 #' @importFrom ggplot2 ggplot aes_string geom_point geom_smooth geom_boxplot
 #' scale_y_continuous scale_y_log10 scale_x_log10 xlab ylab ggtitle
 #' theme_minimal scale_colour_manual scale_fill_manual
-#' @importFrom scater cpm<-
+#' @importFrom SingleCellExperiment cpm<-
 #' @export
-compareSCESets <- function(sces, point.size = 0.1, point.alpha = 0.1,
-                           fits = TRUE, colours = NULL) {
+compareSCEs <- function(sces, point.size = 0.1, point.alpha = 0.1,
+                        fits = TRUE, colours = NULL) {
 
-    checkmate::assertList(sces, types = "SCESet", any.missing = FALSE,
-                          min.len = 1, names = "unique")
+    checkmate::assertList(sces, types = "SingleCellExperiment",
+                          any.missing = FALSE, min.len = 1, names = "unique")
     checkmate::assertNumber(point.size, finite = TRUE)
     checkmate::assertNumber(point.alpha, lower = 0, upper = 1)
     checkmate::assertLogical(fits, any.missing = FALSE, len = 1)
@@ -70,51 +72,53 @@ compareSCESets <- function(sces, point.size = 0.1, point.alpha = 0.1,
 
     for (name in names(sces)) {
         sce <- sces[[name]]
-        fData(sce)$Dataset <- name
-        pData(sce)$Dataset <- name
+        rowData(sce)$Dataset <- name
+        colData(sce)$Dataset <- name
         sce <- scater::calculateQCMetrics(sce)
-        cpm(sce) <- edgeR::cpm(counts(sce))
+        cpm(sce) <- scater::calculateCPM(sce, use.size.factors = FALSE)
         sce <- addFeatureStats(sce, "counts")
         sce <- addFeatureStats(sce, "cpm")
         sce <- addFeatureStats(sce, "cpm", log = TRUE)
+        colData(sce)$PctZero <- 100 * (1 - colData(sce)$total_features /
+                                           nrow(sce))
         sces[[name]] <- sce
     }
 
-    fData.all <- fData(sces[[1]])
-    pData.all <- pData(sces[[1]])
+    features <- rowData(sces[[1]])
+    cells <- colData(sces[[1]])
 
     if (length(sces) > 1) {
         for (name in names(sces)[-1]) {
             sce <- sces[[name]]
-            fData.all <- rbindMatched(fData.all, fData(sce))
-            pData.all <- rbindMatched(pData.all, pData(sce))
+            features <- rbindMatched(features, rowData(sce))
+            cells <- rbindMatched(cells, colData(sce))
         }
     }
 
-    fData.all$Dataset <- factor(fData.all$Dataset, levels = names(sces))
-    pData.all$Dataset <- factor(pData.all$Dataset, levels = names(sces))
+    features$Dataset <- factor(features$Dataset, levels = names(sces))
+    cells$Dataset <- factor(cells$Dataset, levels = names(sces))
+    features <- data.frame(features)
+    cells <- data.frame(cells)
 
-    means <- ggplot(fData.all,
+    means <- ggplot(features,
                     aes_string(x = "Dataset", y = "MeanLogCPM",
                                colour = "Dataset")) +
-        #geom_violin(draw_quantiles = c(0.25, 0.5, 0.75)) +
         geom_boxplot() +
         scale_colour_manual(values = colours) +
         ylab(expression(paste("Mean ", log[2], "(CPM + 1)"))) +
         ggtitle("Distribution of mean expression") +
         theme_minimal()
 
-    vars <- ggplot(fData.all,
+    vars <- ggplot(features,
                    aes_string(x = "Dataset", y = "VarLogCPM",
                               colour = "Dataset")) +
-        #geom_violin(draw_quantiles = c(0.25, 0.5, 0.75)) +
         geom_boxplot() +
         scale_colour_manual(values = colours) +
         ylab(expression(paste("Variance ", log[2], "(CPM + 1)"))) +
         ggtitle("Distribution of variance") +
         theme_minimal()
 
-    mean.var <- ggplot(fData.all,
+    mean.var <- ggplot(features,
                        aes_string(x = "MeanLogCPM", y = "VarLogCPM",
                                   colour = "Dataset", fill = "Dataset")) +
         geom_point(size = point.size, alpha = point.alpha) +
@@ -125,7 +129,7 @@ compareSCESets <- function(sces, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Mean-variance relationship") +
         theme_minimal()
 
-    libs <- ggplot(pData.all,
+    libs <- ggplot(cells,
                    aes_string(x = "Dataset", y = "total_counts",
                               colour = "Dataset")) +
         geom_boxplot() +
@@ -135,8 +139,8 @@ compareSCESets <- function(sces, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Distribution of library sizes") +
         theme_minimal()
 
-    z.gene <- ggplot(fData.all,
-                     aes_string(x = "Dataset", y = "pct_dropout",
+    z.gene <- ggplot(features,
+                     aes_string(x = "Dataset", y = "pct_dropout_counts",
                                 colour = "Dataset")) +
         geom_boxplot() +
         scale_y_continuous(limits = c(0, 100)) +
@@ -145,8 +149,8 @@ compareSCESets <- function(sces, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Distribution of zeros per gene") +
         theme_minimal()
 
-    z.cell <- ggplot(pData.all,
-                     aes_string(x = "Dataset", y = "pct_dropout",
+    z.cell <- ggplot(cells,
+                     aes_string(x = "Dataset", y = "PctZero",
                                 colour = "Dataset")) +
         geom_boxplot() +
         scale_y_continuous(limits = c(0, 100)) +
@@ -155,8 +159,8 @@ compareSCESets <- function(sces, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Distribution of zeros per cell") +
         theme_minimal()
 
-    mean.zeros <- ggplot(fData.all,
-                         aes_string(x = "MeanCounts", y = "pct_dropout",
+    mean.zeros <- ggplot(features,
+                         aes_string(x = "MeanCounts", y = "pct_dropout_counts",
                                     colour = "Dataset", fill = "Dataset")) +
         geom_point(size = point.size, alpha = point.alpha) +
         scale_x_log10(labels = scales::comma) +
@@ -172,8 +176,8 @@ compareSCESets <- function(sces, point.size = 0.1, point.alpha = 0.1,
         mean.zeros <- mean.zeros + geom_smooth()
     }
 
-    comparison <- list(FeatureData = fData.all,
-                       PhenoData = pData.all,
+    comparison <- list(FeatureData = features,
+                       PhenoData = cells,
                        Plots = list(Means = means,
                                     Variances = vars,
                                     MeanVar = mean.var,
@@ -185,13 +189,15 @@ compareSCESets <- function(sces, point.size = 0.1, point.alpha = 0.1,
     return(comparison)
 }
 
-#' Diff SCESet objects
+#' Diff SingleCellExperiment objects
 #'
-#' Combine the data from several SCESet objects and produce some basic plots
-#' comparing them to a reference.
+#' Combine the data from several SingleCellExperiment objects and produce some
+#' basic plots comparing them to a reference.
 #'
-#' @param sces named list of SCESet objects to combine and compare.
-#' @param ref string giving the name of the SCESet to use as the reference
+#' @param sces named list of SingleCellExperiment objects to combine and
+#'        compare.
+#' @param ref string giving the name of the SingleCellExperiment to use as the
+#'        reference
 #' @param point.size size of points in scatter plots.
 #' @param point.alpha opacity of points in scatter plots.
 #' @param fits whether to include fits in scatter plots.
@@ -199,19 +205,21 @@ compareSCESets <- function(sces, point.size = 0.1, point.alpha = 0.1,
 #'
 #' @details
 #'
-#' This function aims to look at the differences between a reference SCESet and
-#' one or more others. It requires each SCESet to have the same dimensions.
-#' Properties are compared by ranks, for example when comparing the means the
-#' values are ordered and the differences between the reference and another
-#' dataset plotted. A series of Q-Q plots are also returned.
+#' This function aims to look at the differences between a reference
+#' SingleCellExperiment and one or more others. It requires each
+#' SingleCellExperiment to have the same dimensions. Properties are compared by
+#' ranks, for example when comparing the means the values are ordered and the
+#' differences between the reference and another dataset plotted. A series of
+#' Q-Q plots are also returned.
 #'
 #' The returned list has five items:
 #'
 #' \describe{
-#'     \item{\code{Reference}}{The SCESet used as the reference.}
+#'     \item{\code{Reference}}{The SingleCellExperiment used as the reference.}
 #'     \item{\code{FeatureData}}{Combined feature data from the provided
-#'     SCESets.}
-#'     \item{\code{PhenoData}}{Combined pheno data from the provided SCESets.}
+#'     SingleCellExperiments.}
+#'     \item{\code{PhenoData}}{Combined pheno data from the provided
+#'     SingleCellExperiments.}
 #'     \item{\code{Plots}}{Difference plots
 #'         \describe{
 #'             \item{\code{Means}}{Boxplot of mean differences.}
@@ -251,26 +259,26 @@ compareSCESets <- function(sces, point.size = 0.1, point.alpha = 0.1,
 #' @examples
 #' sim1 <- splatSimulate(nGenes = 1000, batchCells = 20)
 #' sim2 <- simpleSimulate(nGenes = 1000, nCells = 20)
-#' difference <- diffSCESets(list(Splat = sim1, Simple = sim2), ref = "Simple")
+#' difference <- diffSCEs(list(Splat = sim1, Simple = sim2), ref = "Simple")
 #' names(difference)
 #' names(difference$Plots)
 #' @importFrom ggplot2 ggplot aes_string geom_point geom_boxplot xlab ylab
 #' ggtitle theme_minimal geom_hline geom_abline scale_colour_manual
 #' scale_fill_manual
-#' @importFrom scater cpm<-
+#' @importFrom SingleCellExperiment cpm<-
 #' @export
-diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
-                        fits = TRUE, colours = NULL) {
+diffSCEs <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
+                     fits = TRUE, colours = NULL) {
 
-    checkmate::assertList(sces, types = "SCESet", any.missing = FALSE,
-                          min.len = 2, names = "unique")
+    checkmate::assertList(sces, types = "SingleCellExperiment",
+                          any.missing = FALSE, min.len = 2, names = "unique")
     checkmate::assertString(ref)
     checkmate::assertNumber(point.size, finite = TRUE)
     checkmate::assertNumber(point.alpha, lower = 0, upper = 1)
     checkmate::assertLogical(fits, any.missing = FALSE, len = 1)
 
     if (!(ref %in% names(sces))) {
-        stop("'ref' must be the name of an SCESet in 'sces'")
+        stop("'ref' must be the name of a SingleCellExperiment in 'sces'")
     } else {
         ref.idx <- which(names(sces) == ref)
     }
@@ -290,49 +298,54 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         if (!identical(dim(sce), ref.dim)) {
             stop("SCESets must have the same dimensions")
         }
-        fData(sce)$Dataset <- name
-        pData(sce)$Dataset <- name
+        rowData(sce)$Dataset <- name
+        colData(sce)$Dataset <- name
         sce <- scater::calculateQCMetrics(sce)
-        cpm(sce) <- edgeR::cpm(counts(sce))
+        cpm(sce) <- scater::calculateCPM(sce, use.size.factors = FALSE)
         sce <- addFeatureStats(sce, "counts")
         sce <- addFeatureStats(sce, "cpm", log = TRUE)
+        colData(sce)$PctZero <- 100 * (1 - colData(sce)$total_features /
+                                                              nrow(sce))
         sces[[name]] <- sce
     }
 
     ref.sce <- sces[[ref]]
 
-    ref.means <- sort(fData(ref.sce)$MeanLogCPM)
-    ref.vars <- sort(fData(ref.sce)$VarLogCPM)
-    ref.libs <- sort(pData(ref.sce)$total_counts)
-    ref.z.gene <- sort(fData(ref.sce)$pct_dropout)
-    ref.z.cell <- sort(pData(ref.sce)$pct_dropout)
+    ref.means <- sort(rowData(ref.sce)$MeanLogCPM)
+    ref.vars <- sort(rowData(ref.sce)$VarLogCPM)
+    ref.libs <- sort(colData(ref.sce)$total_counts)
+    ref.z.gene <- sort(rowData(ref.sce)$pct_dropout_counts)
+    ref.z.cell <- sort(colData(ref.sce)$PctZero)
 
-    ref.rank.ord <- order(fData(ref.sce)$exprs_rank)
-    ref.vars.rank <- fData(ref.sce)$VarLogCPM[ref.rank.ord]
-    ref.z.gene.rank <- fData(ref.sce)$pct_dropout[ref.rank.ord]
+    ref.rank.ord <- order(rowData(ref.sce)$rank_counts)
+    ref.vars.rank <- rowData(ref.sce)$VarLogCPM[ref.rank.ord]
+    ref.z.gene.rank <- rowData(ref.sce)$pct_dropout_counts[ref.rank.ord]
 
     for (name in names(sces)) {
         sce <- sces[[name]]
-        fData(sce)$RefRankMeanLogCPM <- ref.means[rank(fData(sce)$MeanLogCPM)]
-        fData(sce)$RankDiffMeanLogCPM <- fData(sce)$MeanLogCPM -
-            fData(sce)$RefRankMeanLogCPM
-        fData(sce)$RefRankVarLogCPM <- ref.vars[rank(fData(sce)$VarLogCPM)]
-        fData(sce)$RankDiffVarLogCPM <- fData(sce)$VarLogCPM -
-            fData(sce)$RefRankVarLogCPM
-        pData(sce)$RefRankLibSize <- ref.libs[rank(pData(sce)$total_counts)]
-        pData(sce)$RankDiffLibSize <- pData(sce)$total_counts -
-            pData(sce)$RefRankLibSize
-        fData(sce)$RefRankZeros <- ref.z.gene[rank(fData(sce)$pct_dropout)]
-        fData(sce)$RankDiffZeros <- fData(sce)$pct_dropout -
-            fData(sce)$RefRankZeros
-        pData(sce)$RefRankZeros <- ref.z.cell[rank(pData(sce)$pct_dropout)]
-        pData(sce)$RankDiffZeros <- pData(sce)$pct_dropout -
-            pData(sce)$RefRankZeros
-
-        fData(sce)$MeanRankVarDiff <- fData(sce)$VarLogCPM -
-            ref.vars.rank[fData(sce)$exprs_rank]
-        fData(sce)$MeanRankZerosDiff <- fData(sce)$pct_dropout -
-            ref.z.gene.rank[fData(sce)$exprs_rank]
+        rowData(sce)$RefRankMeanLogCPM <- ref.means[
+                                              rank(rowData(sce)$MeanLogCPM)]
+        rowData(sce)$RankDiffMeanLogCPM <- rowData(sce)$MeanLogCPM -
+            rowData(sce)$RefRankMeanLogCPM
+        rowData(sce)$RefRankVarLogCPM <- ref.vars[rank(rowData(sce)$VarLogCPM)]
+        rowData(sce)$RankDiffVarLogCPM <- rowData(sce)$VarLogCPM -
+            rowData(sce)$RefRankVarLogCPM
+        colData(sce)$RefRankLibSize <- ref.libs[rank(colData(sce)$total_counts)]
+        colData(sce)$RankDiffLibSize <- colData(sce)$total_counts -
+            colData(sce)$RefRankLibSize
+        rowData(sce)$RefRankZeros <- ref.z.gene[rank(
+                                               rowData(sce)$pct_dropout_counts)]
+        rowData(sce)$RankDiffZeros <- rowData(sce)$pct_dropout_counts -
+            rowData(sce)$RefRankZeros
+        colData(sce)$RefRankZeros <- ref.z.cell[rank(
+                                               colData(sce)$PctZero)]
+        colData(sce)$RankDiffZeros <- colData(sce)$PctZero -
+            colData(sce)$RefRankZeros
+
+        rowData(sce)$MeanRankVarDiff <- rowData(sce)$VarLogCPM -
+            ref.vars.rank[rowData(sce)$rank_counts]
+        rowData(sce)$MeanRankZerosDiff <- rowData(sce)$pct_dropout_counts -
+            ref.z.gene.rank[rowData(sce)$rank_counts]
 
         sces[[name]] <- sce
     }
@@ -340,21 +353,23 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
     ref.sce <- sces[[ref]]
     sces[[ref]] <- NULL
 
-    fData.all <- fData(sces[[1]])
-    pData.all <- pData(sces[[1]])
+    features <- rowData(sces[[1]])
+    cells <- colData(sces[[1]])
 
     if (length(sces) > 1) {
         for (name in names(sces)[-1]) {
             sce <- sces[[name]]
-            fData.all <- rbindMatched(fData.all, fData(sce))
-            pData.all <- rbindMatched(pData.all, pData(sce))
+            features <- rbindMatched(features, rowData(sce))
+            cells <- rbindMatched(cells, colData(sce))
         }
     }
 
-    fData.all$Dataset <- factor(fData.all$Dataset, levels = names(sces))
-    pData.all$Dataset <- factor(pData.all$Dataset, levels = names(sces))
+    features$Dataset <- factor(features$Dataset, levels = names(sces))
+    cells$Dataset <- factor(cells$Dataset, levels = names(sces))
+    features <- data.frame(features)
+    cells <- data.frame(cells)
 
-    means <- ggplot(fData.all,
+    means <- ggplot(features,
                     aes_string(x = "Dataset", y = "RankDiffMeanLogCPM",
                                colour = "Dataset")) +
         geom_hline(yintercept = 0, colour = "red") +
@@ -364,7 +379,7 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Difference in mean expression") +
         theme_minimal()
 
-    vars <- ggplot(fData.all,
+    vars <- ggplot(features,
                     aes_string(x = "Dataset", y = "RankDiffVarLogCPM",
                                colour = "Dataset")) +
         geom_hline(yintercept = 0, colour = "red") +
@@ -375,8 +390,8 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Difference in variance") +
         theme_minimal()
 
-    mean.var <- ggplot(fData.all,
-                       aes_string(x = "exprs_rank", y = "MeanRankVarDiff",
+    mean.var <- ggplot(features,
+                       aes_string(x = "rank_counts", y = "MeanRankVarDiff",
                                   colour = "Dataset", fill = "Dataset")) +
         geom_hline(yintercept = 0, colour = "red") +
         geom_point(size = point.size, alpha = point.alpha) +
@@ -388,7 +403,7 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Difference in mean-variance relationship") +
         theme_minimal()
 
-    libs <- ggplot(pData.all,
+    libs <- ggplot(cells,
                    aes_string(x = "Dataset", y = "RankDiffLibSize",
                               colour = "Dataset")) +
         geom_hline(yintercept = 0, colour = "red") +
@@ -398,7 +413,7 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Difference in library sizes") +
         theme_minimal()
 
-    z.gene <- ggplot(fData.all,
+    z.gene <- ggplot(features,
                      aes_string(x = "Dataset", y = "RankDiffZeros",
                                 colour = "Dataset")) +
         geom_hline(yintercept = 0, colour = "red") +
@@ -408,7 +423,7 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Difference in zeros per gene") +
         theme_minimal()
 
-    z.cell <- ggplot(pData.all,
+    z.cell <- ggplot(cells,
                      aes_string(x = "Dataset", y = "RankDiffZeros",
                                 colour = "Dataset")) +
         geom_hline(yintercept = 0, colour = "red") +
@@ -418,8 +433,8 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Difference in zeros per cell") +
         theme_minimal()
 
-    mean.zeros <- ggplot(fData.all,
-                       aes_string(x = "exprs_rank", y = "MeanRankZerosDiff",
+    mean.zeros <- ggplot(features,
+                       aes_string(x = "rank_counts", y = "MeanRankZerosDiff",
                                   colour = "Dataset", fill = "Dataset")) +
         geom_hline(yintercept = 0, colour = "red") +
         geom_point(size = point.size, alpha = point.alpha) +
@@ -430,7 +445,7 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Difference in mean-zeros relationship") +
         theme_minimal()
 
-    means.qq <- ggplot(fData.all,
+    means.qq <- ggplot(features,
                        aes_string(x = "RefRankMeanLogCPM", y = "MeanLogCPM",
                                   colour = "Dataset")) +
         geom_abline(intercept = 0, slope = 1, colour = "red") +
@@ -441,7 +456,7 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Ranked means") +
         theme_minimal()
 
-    vars.qq <- ggplot(fData.all,
+    vars.qq <- ggplot(features,
                       aes_string(x = "RefRankVarLogCPM", y = "VarLogCPM",
                                  colour = "Dataset")) +
         geom_abline(intercept = 0, slope = 1, colour = "red") +
@@ -452,7 +467,7 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Ranked variances") +
         theme_minimal()
 
-    libs.qq <- ggplot(pData.all,
+    libs.qq <- ggplot(cells,
                       aes_string(x = "RefRankLibSize", y = "total_counts",
                                  colour = "Dataset")) +
         geom_abline(intercept = 0, slope = 1, colour = "red") +
@@ -463,8 +478,8 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Ranked library sizes") +
         theme_minimal()
 
-    z.gene.qq <- ggplot(fData.all,
-                        aes_string(x = "RefRankZeros", y = "pct_dropout",
+    z.gene.qq <- ggplot(features,
+                        aes_string(x = "RefRankZeros", y = "pct_dropout_counts",
                                    colour = "Dataset")) +
         geom_abline(intercept = 0, slope = 1, colour = "red") +
         geom_point(size = point.size, alpha = point.alpha) +
@@ -474,8 +489,8 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
         ggtitle("Ranked percentage zeros per gene") +
         theme_minimal()
 
-    z.cell.qq <- ggplot(pData.all,
-                        aes_string(x = "RefRankZeros", y = "pct_dropout",
+    z.cell.qq <- ggplot(cells,
+                        aes_string(x = "RefRankZeros", y = "PctZero",
                                    colour = "Dataset")) +
         geom_abline(intercept = 0, slope = 1, colour = "red") +
         geom_point(size = point.size, alpha = point.alpha) +
@@ -491,8 +506,8 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
     }
 
     comparison <- list(Reference = ref.sce,
-                       FeatureData = fData.all,
-                       PhenoData = pData.all,
+                       FeatureData = features,
+                       PhenoData = cells,
                        Plots = list(Means = means,
                                     Variances = vars,
                                     MeanVar = mean.var,
@@ -511,9 +526,9 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
 
 #' Make comparison panel
 #'
-#' Combine the plots from \code{compareSCESets} into a single panel.
+#' Combine the plots from \code{compareSCEs} into a single panel.
 #'
-#' @param comp list returned by \code{\link{compareSCESets}}.
+#' @param comp list returned by \code{\link{compareSCEs}}.
 #' @param title title for the panel.
 #' @param labels vector of labels for each of the seven plots.
 #'
@@ -523,7 +538,7 @@ diffSCESets <- function(sces, ref, point.size = 0.1, point.alpha = 0.1,
 #' \dontrun{
 #' sim1 <- splatSimulate(nGenes = 1000, batchCells = 20)
 #' sim2 <- simpleSimulate(nGenes = 1000, nCells = 20)
-#' comparison <- compareSCESets(list(Splat = sim1, Simple = sim2))
+#' comparison <- compareSCEs(list(Splat = sim1, Simple = sim2))
 #' panel <- makeCompPanel(comparison)
 #' }
 #'
@@ -595,9 +610,9 @@ makeCompPanel <- function(comp, title = "Comparison",
 
 #' Make difference panel
 #'
-#' Combine the plots from \code{diffSCESets} into a single panel.
+#' Combine the plots from \code{diffSCEs} into a single panel.
 #'
-#' @param diff list returned by \code{\link{diffSCESets}}.
+#' @param diff list returned by \code{\link{diffSCEs}}.
 #' @param title title for the panel.
 #' @param labels vector of labels for each of the seven sections.
 #'
@@ -607,7 +622,7 @@ makeCompPanel <- function(comp, title = "Comparison",
 #' \dontrun{
 #' sim1 <- splatSimulate(nGenes = 1000, batchCells = 20)
 #' sim2 <- simpleSimulate(nGenes = 1000, nCells = 20)
-#' difference <- diffSCESets(list(Splat = sim1, Simple = sim2), ref = "Simple")
+#' difference <- diffSCEs(list(Splat = sim1, Simple = sim2), ref = "Simple")
 #' panel <- makeDiffPanel(difference)
 #' }
 #'
@@ -685,11 +700,11 @@ makeDiffPanel <- function(diff, title = "Difference comparison",
 
 #' Make overall panel
 #'
-#' Combine the plots from \code{compSCESets} and \code{diffSCESets} into a
+#' Combine the plots from \code{compSCEs} and \code{diffSCEs} into a
 #' single panel.
 #'
-#' @param comp list returned by \code{\link{compareSCESets}}.
-#' @param diff list returned by \code{\link{diffSCESets}}.
+#' @param comp list returned by \code{\link{compareSCEs}}.
+#' @param diff list returned by \code{\link{diffSCEs}}.
 #' @param title title for the panel.
 #' @param row.labels vector of labels for each of the seven rows.
 #'
@@ -788,19 +803,19 @@ makeOverallPanel <- function(comp, diff, title = "Overall comparison",
     return(panel)
 }
 
-#' Summarise diffSCESets
+#' Summarise diffSCESs
 #'
-#' Summarise the results of \code{\link{diffSCESets}}. Calculates the Median
+#' Summarise the results of \code{\link{diffSCEs}}. Calculates the Median
 #' Absolute Deviation (MAD), Mean Absolute Error (MAE) and Root Mean Squared
 #' Error (RMSE) for the various properties and ranks them.
 #'
-#' @param diff Output from \code{\link{diffSCESets}}
+#' @param diff Output from \code{\link{diffSCEs}}
 #'
 #' @return data.frame with MADs, MAEs, RMSEs, scaled statistics and ranks
 #' @examples
 #' sim1 <- splatSimulate(nGenes = 1000, batchCells = 20)
 #' sim2 <- simpleSimulate(nGenes = 1000, nCells = 20)
-#' difference <- diffSCESets(list(Splat = sim1, Simple = sim2), ref = "Simple")
+#' difference <- diffSCEs(list(Splat = sim1, Simple = sim2), ref = "Simple")
 #' summary <- summariseDiff(difference)
 #' head(summary)
 #' @export
diff --git a/R/listSims.R b/R/listSims.R
index a38d3d8d2298427ff3f4193ac8d0b8b007b326c1..fd19aab2e122981f4837a4ba02611c06f97c68e8 100644
--- a/R/listSims.R
+++ b/R/listSims.R
@@ -15,7 +15,8 @@ listSims <- function(print = TRUE) {
     sims <- list(c("Splat", "splat", "", "",
                    "The Splat simulation generates means from a gamma
                    distribution, adjusts them for BCV and generates counts from
-                   a gamma-poisson. Dropout can be optionally added."),
+                   a gamma-poisson. Dropout and batch effects can be optionally
+                   added."),
                  c("Splat Single", "splatSingle", "", "",
                    "The Splat simulation with a single population."),
                  c("Splat Groups", "splatGroups", "", "",
@@ -51,12 +52,26 @@ listSims <- function(print = TRUE) {
                    "catavallejos/BASiCS",
                    "The BASiCS simulation is based on a bayesian model used to
                    deconvolve biological and technical variation and
-                   includes spike-ins and batch effects."))
+                   includes spike-ins and batch effects."),
+                 c("mfa", "mfa", "10.12688/wellcomeopenres.11087.1",
+                   "kieranrcampbell/mfa",
+                   "The mfa simulation produces a bifurcating pseudotime
+                   trajectory. This can optionally include genes with transient
+                   changes in expression and added dropout."),
+                 c("PhenoPath", "pheno", "10.1101/159913",
+                   "kieranrcampbell/phenopath",
+                   "The PhenoPath simulation produces a pseudotime trajectory
+                   with different types of genes."),
+                 c("ZINB-WaVE", "zinb", "10.1101/125112",
+                   "drisso/zinbwave",
+                   "The ZINB-WaVE simulation simulates counts from a
+                   sophisticated zero-inflated negative-binomial distribution
+                   including cell and gene-level covariates."))
 
     sims.table <- data.frame(Name        = rep(NA, length(sims)),
                              Prefix      = rep(NA, length(sims)),
                              DOI         = rep(NA, length(sims)),
-                             Github      = rep(NA, length(sims)),
+                             GitHub      = rep(NA, length(sims)),
                              Description = rep(NA, length(sims)))
 
     for (idx in seq_along(sims)) {
@@ -70,7 +85,7 @@ listSims <- function(print = TRUE) {
         for (idx in seq_len(nrow(sims.table))) {
             sim <- as.character(sims.table[idx, ])
             cat(sim[1], paste0("(", sim[2], ")"), "\n")
-            cat("DOI:", sim[3], "\t", "Github:", sim[4], "\n")
+            cat("DOI:", sim[3], "\t", "GitHub:", sim[4], "\n")
             cat(sim[5], "\n\n")
         }
     }
diff --git a/R/lun-estimate.R b/R/lun-estimate.R
index 5cfc46bc81be175bc90af5c658f708f3c83e5a2a..3191a5d81b2ae16ce8c902f86faf7371830d1ad8 100644
--- a/R/lun-estimate.R
+++ b/R/lun-estimate.R
@@ -2,8 +2,8 @@
 #'
 #' Estimate simulation parameters for the Lun simulation from a real dataset.
 #'
-#' @param counts either a counts matrix or an SCESet object containing count
-#'        data to estimate parameters from.
+#' @param counts either a counts matrix or an SingleCellExperiment object
+#'        containing count data to estimate parameters from.
 #' @param params LunParams object to store estimated values in.
 #'
 #' @details
@@ -24,8 +24,8 @@ lunEstimate <- function(counts, params = newLunParams()) {
 
 #' @rdname lunEstimate
 #' @export
-lunEstimate.SCESet <- function(counts, params = newLunParams()) {
-    counts <- scater::counts(counts)
+lunEstimate.SingleCellExperiment <- function(counts, params = newLunParams()) {
+    counts <- BiocGenerics::counts(counts)
     lunEstimate(counts, params)
 }
 
@@ -39,4 +39,4 @@ lunEstimate.matrix <- function(counts, params = newLunParams()) {
                         groupCells = ncol(counts))
 
     return(params)
-}
\ No newline at end of file
+}
diff --git a/R/lun-simulate.R b/R/lun-simulate.R
index abeafcb3d851a0d972bdc09c8ff2fce39de1b0f3..aa7337c8d0541a04d307c70d7e8fd5b67e3b9d0c 100644
--- a/R/lun-simulate.R
+++ b/R/lun-simulate.R
@@ -19,8 +19,8 @@
 #'
 #' See \code{\link{LunParams}} for details of the parameters.
 #'
-#' @return SCESet object containing the simulated counts and intermediate
-#' values.
+#' @return SingleCellExperiment object containing the simulated counts and
+#' intermediate values.
 #'
 #' @references
 #' Lun ATL, Bach K, Marioni JC. Pooling across cells to normalize single-cell
@@ -33,9 +33,8 @@
 #' @examples
 #' sim <- lunSimulate()
 #'
-#' @importFrom Biobase fData fData<- pData pData<-
-#' @importFrom methods new
-#' @importFrom scater newSCESet set_exprs<-
+#' @importFrom SummarizedExperiment rowData rowData<- colData colData<-
+#' @importFrom SingleCellExperiment SingleCellExperiment
 #' @importFrom stats rnorm rgamma rnbinom
 #' @export
 lunSimulate <- function(params = newLunParams(), verbose = TRUE, ...) {
@@ -63,6 +62,9 @@ lunSimulate <- function(params = newLunParams(), verbose = TRUE, ...) {
     de.upFC <- getParam(params, "de.upFC")
     de.downFC <- getParam(params, "de.downFC")
 
+    cell.names <- paste0("Cell", seq_len(nCells))
+    gene.names <- paste0("Gene", seq_len(nGenes))
+
     if (verbose) {message("Simulating means...")}
     gene.means <- rgamma(nGenes, shape = mean.shape, rate = mean.rate)
 
@@ -99,39 +101,40 @@ lunSimulate <- function(params = newLunParams(), verbose = TRUE, ...) {
         cell.facs <- unlist(cell.facs)
         groups <- unlist(groups)
     }
+    colnames(cell.means) <- cell.names
+    rownames(cell.means) <- gene.names
 
     if (verbose) {message("Simulating counts...")}
     counts <- matrix(rnbinom(nGenes * nCells, mu = cell.means,
                              size = 1 / count.disp),
                      nrow = nGenes, ncol = nCells)
 
-    if (verbose) {message("Creating final SCESet...")}
-    cell.names <- paste0("Cell", seq_len(nCells))
-    gene.names <- paste0("Gene", seq_len(nGenes))
+    if (verbose) {message("Creating final dataset...")}
     rownames(counts) <- gene.names
     colnames(counts) <- cell.names
 
-    phenos <- new("AnnotatedDataFrame",
-                  data = data.frame(Cell = cell.names, CellFac = cell.facs))
-    rownames(phenos) <- cell.names
-    features <- new("AnnotatedDataFrame",
-                    data = data.frame(Gene = gene.names, GeneMean = gene.means))
-    rownames(features) <- gene.names
-    sim <- newSCESet(countData = counts, phenoData = phenos,
-                     featureData = features)
+    cells <- data.frame(Cell = cell.names, CellFac = cell.facs)
+    rownames(cells) <- cell.names
 
-    colnames(cell.means) <- cell.names
-    rownames(cell.means) <- gene.names
-    set_exprs(sim, "CellMeans") <- cell.means
+    features <- data.frame(Gene = gene.names, GeneMean = gene.means)
+    rownames(features) <- gene.names
 
     if (nGroups > 1) {
-        pData(sim)$Group <- groups
+        cells$Group <- groups
         for (idx in seq_along(de.facs)) {
-            fData(sim)[[paste0("DEFacGroup", idx)]] <- de.facs[[idx]]
-            fData(sim)[[paste0("GeneMeanGroup", idx)]] <- gene.means *
+            features[[paste0("DEFacGroup", idx)]] <- de.facs[[idx]]
+            features[[paste0("GeneMeanGroup", idx)]] <- gene.means *
                 de.facs[[idx]]
         }
     }
 
+    sim <- SingleCellExperiment(assays = list(counts = counts,
+                                              CellMeans = cell.means),
+                                rowData = features,
+                                colData = cells,
+                                metadata = list(params = params))
+
+    if (verbose) {message("Done!")}
+
     return(sim)
 }
diff --git a/R/lun2-estimate.R b/R/lun2-estimate.R
index cca9f6eb556b542c1d00d2a8e967e0a8a0aa684e..df51b84699291ace5b99df5da81caefd1d8c88c0 100644
--- a/R/lun2-estimate.R
+++ b/R/lun2-estimate.R
@@ -2,8 +2,8 @@
 #'
 #' Estimate simulation parameters for the Lun2 simulation from a real dataset.
 #'
-#' @param counts either a counts matrix or an SCESet object containing count
-#'        data to estimate parameters from.
+#' @param counts either a counts matrix or a SingleCellExperiment object
+#'        containing count data to estimate parameters from.
 #' @param plates integer vector giving the plate that each cell originated from.
 #' @param params Lun2Params object to store estimated values in.
 #' @param min.size minimum size of clusters when identifying group of cells in
@@ -36,10 +36,11 @@ lun2Estimate <- function(counts, plates, params = newLun2Params(),
 
 #' @rdname lun2Estimate
 #' @export
-lun2Estimate.SCESet <- function(counts, plates, params = newLun2Params(),
-                                min.size = 200, verbose = TRUE,
-                                BPPARAM = SerialParam()) {
-    counts <- scater::counts(counts)
+lun2Estimate.SingleCellExperiment <- function(counts, plates,
+                                              params = newLun2Params(),
+                                              min.size = 200, verbose = TRUE,
+                                              BPPARAM = SerialParam()) {
+    counts <- BiocGenerics::counts(counts)
     lun2Estimate(counts, plates, params, min.size = min.size, verbose = verbose)
 }
 
diff --git a/R/lun2-simulate.R b/R/lun2-simulate.R
index bc8d9b696ad8eeb0086c664ca8aa2028d281cd03..35329de75e4dd9f9fff1fb643c349e475c8997b4 100644
--- a/R/lun2-simulate.R
+++ b/R/lun2-simulate.R
@@ -26,7 +26,7 @@
 #' number in the dataset used in the estimation step but has the downside that
 #' some genes or cells may be simulated multiple times.
 #'
-#' @return SCESet containing simulated counts.
+#' @return SingleCellExperiment containing simulated counts.
 #'
 #' @references
 #' Lun ATL, Marioni JC. Overcoming confounding plate effects in differential
@@ -39,8 +39,8 @@
 #' @examples
 #' sim <- lun2Simulate()
 #' @export
-#' @importFrom methods new
-#' @importFrom scater newSCESet set_exprs<-
+#' @importFrom SummarizedExperiment assays<-
+#' @importFrom SingleCellExperiment SingleCellExperiment
 lun2Simulate <- function(params = newLun2Params(), zinb = FALSE,
                          verbose = TRUE, ...) {
 
@@ -91,31 +91,13 @@ lun2Simulate <- function(params = newLun2Params(), zinb = FALSE,
 
     de.nGenes <- getParam(params, "de.nGenes")
 
-    #if (name == "nGenes") {
-    #    old.nGenes <- getParam(object, "nGenes")
-    #    if (value != old.nGenes) {
-    #        warning("nGenes has been changed. Gene parameter vectors will be ",
-    #                "sampled to length new nGenes.")
-    #        selected <- sample(seq_len(old.nGenes), size = value,
-    #                           replace = TRUE)
-    #        for (parameter in grep("gene", slotNames(object), value = TRUE)) {
-    #            old.value <- getParam(object, parameter)
-    #            object <- setParamUnchecked(object, parameter,
-    #                                        old.value[selected])
-    #        }
-    #    }
-    #}
-
-
     # Set up objects to store intermediate values
     cell.names <- paste0("Cell", seq_len(nCells))
     gene.names <- paste0("Gene", seq_len(nGenes))
 
-    features <- new("AnnotatedDataFrame",
-                    data = data.frame(Gene = gene.names, GeneMean = gene.means,
-                                      GeneDisp = gene.disps))
-    phenos <- new("AnnotatedDataFrame",
-                  data = data.frame(Cell = cell.names, Plate = cell.plates))
+    features <- data.frame(Gene = gene.names, GeneMean = gene.means,
+                           GeneDisp = gene.disps)
+    cells <- data.frame(Cell = cell.names, Plate = cell.plates)
 
     if (zinb) {
         features$GeneZeroProp <- gene.ziProps
@@ -155,7 +137,7 @@ lun2Simulate <- function(params = newLun2Params(), zinb = FALSE,
         plate.means[, ingroup] <- plate.means[, ingroup] * de.facs
         plate.means[, -ingroup] <- plate.means[, -ingroup] * (1 / de.facs)
 
-        phenos$Ingroup <- cell.plates %in% plate.ingroup
+        cells$Ingroup <- cell.plates %in% plate.ingroup
         features$DEFacIngroup <- de.facs
         features$DEFacOutgroup <- 1 / de.facs
         for (idx in seq_len(nPlates)) {
@@ -166,7 +148,7 @@ lun2Simulate <- function(params = newLun2Params(), zinb = FALSE,
     if (verbose) {message("Simulating libray size factors...")}
     lib.facs <- lib.sizes / mean(lib.sizes)
     lib.facs <- sample(lib.facs, nCells, replace = TRUE) * lib.mod
-    phenos$LibSizeFac <- lib.facs
+    cells$LibSizeFac <- lib.facs
 
     if (verbose) {message("Simulating cell means...")}
     cell.means <- plate.means[, as.integer(cell.plates)]
@@ -185,27 +167,28 @@ lun2Simulate <- function(params = newLun2Params(), zinb = FALSE,
         counts[is.zero] <- 0
     }
 
-    if (verbose) {message("Creating final SCESet...")}
+    if (verbose) {message("Creating final dataset...")}
 
-    rownames(phenos) <- cell.names
+    rownames(cells) <- cell.names
     rownames(features) <- gene.names
     rownames(counts) <- gene.names
     colnames(counts) <- cell.names
-    sim <- newSCESet(countData = counts, phenoData = phenos,
-                     featureData = features)
-
     rownames(cell.means) <- gene.names
     colnames(cell.means) <- cell.names
-    set_exprs(sim, "CellMeans") <- cell.means
-
     rownames(true.counts) <- gene.names
     colnames(true.counts) <- cell.names
-    set_exprs(sim, "TrueCounts") <- true.counts
+
+    sim <- SingleCellExperiment(assays = list(counts = counts,
+                                              CellMeans = cell.means,
+                                              TrueCounts <- true.counts),
+                                rowData = features,
+                                colData = cells,
+                                metadata = list(params = params))
 
     if (zinb) {
         rownames(is.zero) <- gene.names
         colnames(is.zero) <- cell.names
-        set_exprs(sim, "ZeroInflation") <- is.zero
+        assays(sim)$ZeroInflation <- is.zero
     }
 
     if (verbose) {message("Done!")}
diff --git a/R/mfa-estimate.R b/R/mfa-estimate.R
new file mode 100644
index 0000000000000000000000000000000000000000..f3abf2f12b4f853fa060a2fdad398be24b077d57
--- /dev/null
+++ b/R/mfa-estimate.R
@@ -0,0 +1,46 @@
+#' Estimate mfa simulation parameters
+#'
+#' Estimate simulation parameters for the mfa simulation from a real dataset.
+#'
+#' @param counts either a counts matrix or a SingleCellExperiment object
+#'        containing count data to estimate parameters from.
+#' @param params MFAParams object to store estimated values in.
+#'
+#' @details
+#' The \code{nGenes} and \code{nCells} parameters are taken from the size of the
+#' input data. The dropout lambda parameter is estimate using
+#' \code{\link[mfa]{empirical_lambda}}. See \code{\link{MFAParams}} for more
+#' details on the parameters.
+#'
+#' @return MFAParams object containing the estimated parameters.
+#'
+#' @examples
+#' data("sc_example_counts")
+#' params <- mfaEstimate(sc_example_counts)
+#' params
+#' @export
+mfaEstimate <- function(counts, params = newMFAParams()) {
+    UseMethod("mfaEstimate")
+}
+
+#' @rdname mfaEstimate
+#' @export
+mfaEstimate.SingleCellExperiment <- function(counts,
+                                             params = newMFAParams()) {
+    counts <- BiocGenerics::counts(counts)
+    mfaEstimate(counts, params)
+}
+
+#' @rdname mfaEstimate
+#' @export
+mfaEstimate.matrix <- function(counts, params = newMFAParams()) {
+
+    checkmate::assertClass(params, "MFAParams")
+
+    dropout.lambda <- mfa::empirical_lambda(t(counts))
+
+    params <- setParams(params, nGenes = nrow(counts), nCells = ncol(counts),
+                        dropout.lambda = dropout.lambda)
+
+    return(params)
+}
diff --git a/R/mfa-simulate.R b/R/mfa-simulate.R
new file mode 100644
index 0000000000000000000000000000000000000000..b208bdeacd10aea2972644ad9aa27321618084ff
--- /dev/null
+++ b/R/mfa-simulate.R
@@ -0,0 +1,90 @@
+#' MFA simulation
+#'
+#' Simulate a bifurcating pseudotime path using the mfa method.
+#'
+#' @param params MFAParams object containing simulation parameters.
+#' @param verbose Logical. Whether to print progress messages.
+#' @param ... any additional parameter settings to override what is provided in
+#'        \code{params}.
+#'
+#' @details
+#' This function is just a wrapper around \code{\link[mfa]{create_synthetic}}
+#' that takes a \code{\link{MFAParams}}, runs the simulation then converts the
+#' output from log-expression to counts and returns a
+#' \code{\link[SingleCellExperiment]{SingleCellExperiment}} object. See
+#' \code{\link[mfa]{create_synthetic}} and the mfa paper for more details about
+#' how the simulation works.
+#'
+#' @return SingleCellExperiment containing simulated counts
+#'
+#' @references
+#' Campbell KR, Yau C. Probabilistic modeling of bifurcations in single-cell
+#' gene expression data using a Bayesian mixture of factor analyzers. Wellcome
+#' Open Research (2017).
+#'
+#' Paper: \url{10.12688/wellcomeopenres.11087.1}
+#'
+#' Code: \url{https://github.com/kieranrcampbell/mfa}
+#'
+#' @examples
+#' sim <- mfaSimulate()
+#' @export
+mfaSimulate <- function(params = newMFAParams(), verbose = TRUE, ...) {
+
+    checkmate::assertClass(params, "MFAParams")
+    params <- setParams(params, ...)
+
+    # Set random seed
+    seed <- getParam(params, "seed")
+    set.seed(seed)
+
+    # Get the parameters we are going to use
+    nCells <- getParam(params, "nCells")
+    nGenes <- getParam(params, "nGenes")
+    trans.prop <- getParam(params, "trans.prop")
+    zero.neg <- getParam(params, "zero.neg")
+    dropout.present <- getParam(params, "dropout.present")
+    dropout.lambda <- getParam(params, "dropout.lambda")
+
+    if (verbose) {message("Simulating counts...")}
+    mfa.sim <- mfa::create_synthetic(C = nCells,
+                                     G = nGenes,
+                                     p_transient = trans.prop,
+                                     zero_negative = zero.neg,
+                                     model_dropout = dropout.present,
+                                     lambda = dropout.lambda)
+
+    if (verbose) {message("Creating final dataset...")}
+    cell.names <- paste0("Cell", seq_len(nCells))
+    gene.names <- paste0("Gene", seq_len(nGenes))
+
+    exprs <- t(mfa.sim$X)
+    rownames(exprs) <- gene.names
+    colnames(exprs) <- cell.names
+
+    counts <- 2 ^ exprs - 1
+    counts[counts < 0] <- 0
+    counts <- round(counts)
+
+    cells <- data.frame(Cell = cell.names,
+                        Branch = mfa.sim$branch,
+                        Pseudotime = mfa.sim$pst)
+    rownames(cells) <- cell.names
+
+    features <- data.frame(Gene = gene.names,
+                           KBranch1 = mfa.sim$k[, 1],
+                           KBranch2 = mfa.sim$k[, 2],
+                           PhiBranch1 = mfa.sim$phi[, 1],
+                           PhiBranch2 = mfa.sim$phi[, 2],
+                           DeltaBranch1 = mfa.sim$delta[, 1],
+                           DeltaBranch2 = mfa.sim$delta[, 2])
+    rownames(features) <- gene.names
+
+    sim <- SingleCellExperiment(assays = list(counts = counts,
+                                              LogExprs = exprs),
+                                rowData = features,
+                                colData = cells,
+                                metadata = list(params = params))
+
+    return(sim)
+}
diff --git a/R/pheno-estimate.R b/R/pheno-estimate.R
new file mode 100644
index 0000000000000000000000000000000000000000..61cf4fc4541fa47916b120a9462338c3d1fa12a9
--- /dev/null
+++ b/R/pheno-estimate.R
@@ -0,0 +1,49 @@
+#' Estimate PhenoPath simulation parameters
+#'
+#' Estimate simulation parameters for the PhenoPath simulation from a real
+#' dataset.
+#'
+#' @param counts either a counts matrix or an SingleCellExperiment object
+#'        containing count data to estimate parameters from.
+#' @param params PhenoParams object to store estimated values in.
+#'
+#' @details
+#' The \code{nGenes} and \code{nCells} parameters are taken from the size of the
+#' input data. The total number of genes is evenly divided into the four types.
+#' See \code{\link{PhenoParams}} for more details on the parameters.
+#'
+#' @return PhenoParams object containing the estimated parameters.
+#'
+#' @examples
+#' data("sc_example_counts")
+#' params <- phenoEstimate(sc_example_counts)
+#' params
+#' @export
+phenoEstimate <- function(counts, params = newPhenoParams()) {
+    UseMethod("phenoEstimate")
+}
+
+#' @rdname phenoEstimate
+#' @export
+phenoEstimate.SingleCellExperiment <- function(counts,
+                                               params = newPhenoParams()) {
+    counts <- BiocGenerics::counts(counts)
+    phenoEstimate(counts, params)
+}
+
+#' @rdname phenoEstimate
+#' @export
+phenoEstimate.matrix <- function(counts, params = newPhenoParams()) {
+
+    checkmate::assertClass(params, "PhenoParams")
+
+    nGenes <- nrow(counts)
+    quarter <- floor(nGenes / 4)
+
+    params <- setParams(params, nCells = ncol(counts),
+                        n.de = nGenes - 3 * quarter,
+                        n.pst = quarter, n.pst.beta = quarter,
+                        n.de.pst.beta = quarter)
+
+    return(params)
+}
diff --git a/R/pheno-simulate.R b/R/pheno-simulate.R
new file mode 100644
index 0000000000000000000000000000000000000000..54b0f508e1ab56f0f68792d392aa804dfbda4e4f
--- /dev/null
+++ b/R/pheno-simulate.R
@@ -0,0 +1,90 @@
+#' PhenoPath simulation
+#'
+#' Simulate counts from a pseudotime trajectory using the PhenoPath method.
+#'
+#' @param params PhenoParams object containing simulation parameters.
+#' @param verbose logical. Whether to print progress messages
+#' @param ... any additional parameter settings to override what is provided in
+#'        \code{params}.
+#'
+#' @details
+#' This function is just a wrapper around
+#' \code{\link[phenopath]{simulate_phenopath}} that takes a
+#' \code{\link{PhenoParams}}, runs the simulation then converts the
+#' output from log-expression to counts and returns a
+#' \code{\link[SingleCellExperiment]{SingleCellExperiment}} object. The original
+#' simulated log-expression values are returned in the \code{LogExprs} asssay.
+#' See \code{\link[phenopath]{simulate_phenopath}} and the PhenoPath paper for
+#' more details about how the simulation works.
+#'
+#' @return SingleCellExperiment containing simulated counts
+#'
+#' @references
+#' Campbell K, Yau C. Uncovering genomic trajectories with heterogeneous genetic
+#' and environmental backgrounds across single-cells and populations. bioRxiv
+#' (2017).
+#'
+#' Paper: \url{10.1101/159913}
+#'
+#' Code: \url{https://github.com/kieranrcampbell/phenopath}
+#'
+#' @examples
+#' sim <- phenoSimulate()
+#'
+#' @export
+#' @importFrom SingleCellExperiment SingleCellExperiment
+phenoSimulate <- function(params = newPhenoParams(), verbose = TRUE, ...) {
+
+    checkmate::assertClass(params, "PhenoParams")
+    params <- setParams(params, ...)
+
+    # Set random seed
+    seed <- getParam(params, "seed")
+    set.seed(seed)
+
+    # Get the parameters we are going to use
+    nCells <- getParam(params, "nCells")
+    nGenes <- getParam(params, "nGenes")
+    n.de <- getParam(params, "n.de")
+    n.pst <- getParam(params, "n.pst")
+    n.pst.beta <- getParam(params, "n.pst.beta")
+    n.de.pst.beta <- getParam(params, "n.de.pst.beta")
+
+    if (verbose) {message("Simulating counts...")}
+    pheno.sim <- phenopath::simulate_phenopath(N = nCells,
+                                               G_de = n.de,
+                                               G_pst = n.pst,
+                                               G_pst_beta = n.pst.beta,
+                                               G_de_pst_beta = n.de.pst.beta)
+
+    if (verbose) {message("Creating final dataset...")}
+    cell.names <- paste0("Cell", seq_len(nCells))
+    gene.names <- paste0("Gene", seq_len(nGenes))
+
+    exprs <- t(pheno.sim$y)
+    counts <- 2 ^ exprs - 1
+    counts[counts < 0] <- 0
+    counts <- round(counts)
+    rownames(counts) <- gene.names
+    colnames(counts) <- cell.names
+
+    cells <- data.frame(Cell = cell.names,
+                        Covariate = pheno.sim$x,
+                        Pseudotime = pheno.sim$z)
+    rownames(cells) <- cell.names
+
+    features <- data.frame(Gene = gene.names,
+                           Alpha = pheno.sim$parameters$alpha,
+                           Lambda = pheno.sim$parameters$lambda,
+                           Beta = pheno.sim$parameters$beta,
+                           Regime = pheno.sim$parameters$regime)
+    rownames(features) <- gene.names
+
+    sim <- SingleCellExperiment(assays = list(counts = counts,
+                                              LogExprs = exprs),
+                                rowData = features,
+                                colData = cells,
+                                metadata = list(params = params))
+
+    return(sim)
+}
diff --git a/R/scDD-estimate.R b/R/scDD-estimate.R
index f1aba9c83c3be7343c1ddf9f1dd19cb0aa9f3c4a..9c213670a4aec8d72f1c08305aa4c4894e1f3fbb 100644
--- a/R/scDD-estimate.R
+++ b/R/scDD-estimate.R
@@ -2,15 +2,18 @@
 #'
 #' Estimate simulation parameters for the scDD simulation from a real dataset.
 #'
-#' @param counts either a counts matrix or an SCESet object containing count
-#'        data to estimate parameters from.
+#' @param counts either a counts matrix or a SingleCellExperiment object
+#'        containing count data to estimate parameters from.
 #' @param conditions Vector giving the condition that each cell belongs to.
 #'        Conditions can be 1 or 2.
+#' @param condition String giving the column that represents biological group of
+#'        interest.
 #' @param params SCDDParams object to store estimated values in.
 #' @param verbose logical. Whether to show progress messages.
 #' @param BPPARAM A \code{\link[BiocParallel]{BiocParallelParam}} instance
 #'        giving the parallel back-end to be used. Default is
 #'        \code{\link[BiocParallel]{SerialParam}} which uses a single core.
+#' @param ... further arguments passed to or from other methods.
 #'
 #' @details
 #' This function applies \code{\link[scDD]{preprocess}} to the counts then uses
@@ -29,62 +32,75 @@
 #' }
 #' @importFrom BiocParallel SerialParam
 #' @export
-scDDEstimate <- function(counts, conditions, params = newSCDDParams(),
-                         verbose = TRUE, BPPARAM = SerialParam()) {
-    UseMethod("scDDEstimate")
-}
+scDDEstimate <- function(counts, #conditions, condition,
+                         params = newSCDDParams(), verbose = TRUE,
+                         BPPARAM = SerialParam(), ...) {
 
-#' @rdname scDDEstimate
-#' @export
-scDDEstimate.SCESet <- function(counts, conditions, params = newSCDDParams(),
-                                verbose = TRUE, BPPARAM = SerialParam()) {
-    counts <- scater::counts(counts)
-    scDDEstimate(counts, conditions, params, verbose, BPPARAM)
+    if (!requireNamespace("scDD", quietly = TRUE)) {
+        stop("The scDD simulation requires the 'scDD' package.")
+    }
+
+    UseMethod("scDDEstimate")
 }
 
 #' @rdname scDDEstimate
-#' @importFrom methods as
+#' @importFrom SingleCellExperiment SingleCellExperiment
 #' @export
-scDDEstimate.matrix <- function(counts, conditions, params = newSCDDParams(),
-                                verbose = TRUE, BPPARAM = SerialParam()) {
+scDDEstimate.matrix <- function(counts, params = newSCDDParams(),
+                                verbose = TRUE, BPPARAM = SerialParam(),
+                                conditions, ...) {
 
-    if (!requireNamespace("scDD", quietly = TRUE)) {
-        stop("The scDD simulation requires the 'scDD' package.")
-    }
-
-    checkmate::assertClass(params, "SCDDParams")
     checkmate::assertMatrix(counts, mode = "numeric", any.missing = FALSE,
                             min.rows = 1, min.cols = 1, row.names = "unique",
                             col.names = "unique")
     checkmate::assertIntegerish(conditions, len = ncol(counts), lower = 1,
                                 upper = 2)
 
-    counts.list <- list(Cond1 = counts[, conditions == 1],
-                        Cond2 = counts[, conditions == 2])
+    counts <- SingleCellExperiment(assays = list(counts = counts),
+                                   colData = data.frame(condition = conditions))
+    scDDEstimate.default(counts, "condition", params, verbose, BPPARAM)
+}
+
+#' @rdname scDDEstimate
+#' @export
+scDDEstimate.SingleCellExperiment <- function(counts,
+                                              params = newSCDDParams(),
+                                              verbose = TRUE,
+                                              BPPARAM = SerialParam(),
+                                              condition = "condition", ...) {
+    scDDEstimate.default(counts, condition, params, verbose, BPPARAM)
+}
+
+#' @rdname scDDEstimate
+#' @importFrom methods as
+#' @export
+scDDEstimate.default <- function(counts,
+                                 params = newSCDDParams(), verbose = TRUE,
+                                 BPPARAM = SerialParam(), condition, ...) {
+
+    checkmate::assertClass(params, "SCDDParams")
+    checkmate::assertClass(counts, "SingleCellExperiment")
+    checkmate::assertCharacter(condition, min.chars = 1, any.missing = FALSE,
+                               len = 1)
+    if (!(condition %in% colnames(SummarizedExperiment::colData(counts)))) {
+        stop("'condition' must be the name of a column in `colData(counts)`")
+    }
 
     if (verbose) {
-        processed <- scDD::preprocess(counts.list, c("Cond1", "Cond2"),
-                                      median_norm = TRUE)
+        processed <- scDD::preprocess(counts, condition, median_norm = TRUE)
     } else {
         suppressMessages(
-        processed <- scDD::preprocess(counts.list, c("Cond1", "Cond2"),
-                                      median_norm = TRUE)
+        processed <- scDD::preprocess(counts, condition, median_norm = TRUE)
         )
     }
 
-    assays <- S4Vectors::SimpleList(NormCounts = processed)
-
-    colData <- S4Vectors::DataFrame(condition = conditions,
-                                    row.names = colnames(processed))
-
-    SCdat <- SummarizedExperiment::SummarizedExperiment(assays = assays,
-                                                        colData = colData)
-
     if (verbose) {
-        SCdat <- scDD::scDD(SCdat, testZeroes = FALSE, param = BPPARAM)
+        SCdat <- scDD::scDD(processed, testZeroes = FALSE, param = BPPARAM,
+                            condition = condition)
     } else {
         dummy <- utils::capture.output(suppressMessages(
-        SCdat <- scDD::scDD(SCdat, testZeroes = FALSE, param = BPPARAM)
+        SCdat <- scDD::scDD(processed, testZeroes = FALSE, param = BPPARAM,
+                            condition = condition)
         ))
     }
 
diff --git a/R/scDD-simulate.R b/R/scDD-simulate.R
index 478443f68054c276c49d75e9418c93e18b9d4046..a9dbd3fec07b80631c68f08886fba38fc9c8fdb9 100644
--- a/R/scDD-simulate.R
+++ b/R/scDD-simulate.R
@@ -16,10 +16,11 @@
 #' @details
 #' This function is just a wrapper around \code{\link[scDD]{simulateSet}} that
 #' takes a \code{\link{SCDDParams}}, runs the simulation then converts the
-#' output to an \code{\link[scater]{SCESet}} object. See
-#' \code{\link[scDD]{simulateSet}} for more details of how the simulation works.
+#' output to a \code{\link[SingleCellExperiment]{SingleCellExperiment}} object.
+#' See \code{\link[scDD]{simulateSet}} for more details about how the simulation
+#' works.
 #'
-#' @return SCESet containing simulated counts
+#' @return SingleCellExperiment containing simulated counts
 #'
 #' @references
 #' Korthauer KD, Chu L-F, Newton MA, Li Y, Thomson J, Stewart R, et al. A
@@ -35,8 +36,8 @@
 #' sim <- scDDSimulate()
 #' }
 #' @export
-#' @importFrom scater newSCESet
 #' @importFrom BiocParallel SerialParam
+#' @importFrom SingleCellExperiment SingleCellExperiment
 scDDSimulate <- function(params = newSCDDParams(), plots = FALSE,
                          plot.file = NULL, verbose = TRUE,
                          BPPARAM = SerialParam(), ...) {
@@ -90,26 +91,29 @@ scDDSimulate <- function(params = newSCDDParams(), plots = FALSE,
         )
     }
 
-    counts <- scDD.sim[[1]]
-    foldchanges <- scDD.sim[[2]]
-    de.status <- rownames(counts)
+    counts <- SummarizedExperiment::assays(scDD.sim)$normcounts
+    foldchanges <- SummarizedExperiment::rowData(scDD.sim)$FC
+    de.status <- SummarizedExperiment::rowData(scDD.sim)$Category
 
-    if (verbose) {message("Creating SCESet...")}
+    if (verbose) {message("Creating final dataset...")}
     cell.names <- paste0("Cell", seq_len(nCells * 2))
     gene.names <- paste0("Gene", seq_len(getParam(params, "nGenes")))
 
     rownames(counts) <- gene.names
     colnames(counts) <- cell.names
-    phenos <- new("AnnotatedDataFrame",
-                  data = data.frame(Cell = cell.names,
-                                    Condition = rep(1:2, each = nCells)))
-    rownames(phenos) <- cell.names
-    features <- new("AnnotatedDataFrame",
-                    data = data.frame(Gene = gene.names, DEStatus = de.status,
-                                      FoldChange = foldchanges))
+
+    cells <- data.frame(Cell = cell.names,
+                        Condition = rep(1:2, each = nCells))
+    rownames(cells) <- cell.names
+
+    features <- data.frame(Gene = gene.names, DEStatus = de.status,
+                           FoldChange = foldchanges)
     rownames(features) <- gene.names
-    sim <- newSCESet(countData = counts, phenoData = phenos,
-                     featureData = features)
+
+    sim <- SingleCellExperiment(assays = list(counts = counts),
+                                rowData = features,
+                                colData = cells,
+                                metadata = list(params = params))
 
     if (verbose) {message("Done!")}
 
diff --git a/R/simple-estimate.R b/R/simple-estimate.R
index 1225becae5483959cd4e85dee99449517ff22072..3a50a4143ad591c6f0ee1790cfedd2f5903b6f3e 100644
--- a/R/simple-estimate.R
+++ b/R/simple-estimate.R
@@ -2,8 +2,8 @@
 #'
 #' Estimate simulation parameters for the simple simulation from a real dataset.
 #'
-#' @param counts either a counts matrix or an SCESet object containing count
-#'        data to estimate parameters from.
+#' @param counts either a counts matrix or a SingleCellExperiment object
+#'        containing count data to estimate parameters from.
 #' @param params SimpleParams object to store estimated values in.
 #'
 #' @details
@@ -26,8 +26,9 @@ simpleEstimate <- function(counts, params = newSimpleParams()) {
 
 #' @rdname simpleEstimate
 #' @export
-simpleEstimate.SCESet <- function(counts, params = newSimpleParams()) {
-    counts <- scater::counts(counts)
+simpleEstimate.SingleCellExperiment <- function(counts,
+                                                params = newSimpleParams()) {
+    counts <- BiocGenerics::counts(counts)
     simpleEstimate(counts, params)
 }
 
@@ -53,4 +54,4 @@ simpleEstimate.matrix <- function(counts, params = newSimpleParams()) {
                         mean.rate = unname(means.fit$estimate["rate"]))
 
     return(params)
-}
\ No newline at end of file
+}
diff --git a/R/simple-simulate.R b/R/simple-simulate.R
index e52b216440bb1f567fdaa006e247f885e18361fd..3c074cee3ab9c42de8a42376d500121e6555b879 100644
--- a/R/simple-simulate.R
+++ b/R/simple-simulate.R
@@ -15,14 +15,14 @@
 #' \code{size = 1 / counts.disp}. See \code{\link{SimpleParams}} for more
 #' details of the parameters.
 #'
-#' @return SCESet containing simulated counts
+#' @return SingleCellExperiment containing simulated counts
 #' @examples
 #' sim <- simpleSimulate()
 #' # Override default parameters
 #' sim <- simpleSimulate(nGenes = 1000, nCells = 50)
 #' @export
 #' @importFrom stats rgamma rnbinom
-#' @importFrom scater newSCESet
+#' @importFrom SingleCellExperiment SingleCellExperiment
 simpleSimulate <- function(params = newSimpleParams(), verbose = TRUE, ...) {
 
     checkmate::assertClass(params, "SimpleParams")
@@ -47,19 +47,21 @@ simpleSimulate <- function(params = newSimpleParams(), verbose = TRUE, ...) {
                              size = 1 / count.disp),
                      nrow = nGenes, ncol = nCells)
 
-    if (verbose) {message("Creating final SCESet...")}
+    if (verbose) {message("Creating final dataset...")}
     cell.names <- paste0("Cell", seq_len(nCells))
     gene.names <- paste0("Gene", seq_len(nGenes))
 
     rownames(counts) <- gene.names
     colnames(counts) <- cell.names
-    phenos <- new("AnnotatedDataFrame", data = data.frame(Cell = cell.names))
-    rownames(phenos) <- cell.names
-    features <- new("AnnotatedDataFrame",
-                    data = data.frame(Gene = gene.names, GeneMean = means))
+    cells <- data.frame(Cell = cell.names)
+    rownames(cells) <- cell.names
+    features <- data.frame(Gene = gene.names, GeneMean = means)
     rownames(features) <- gene.names
-    sim <- newSCESet(countData = counts, phenoData = phenos,
-                     featureData = features)
+
+    sim <- SingleCellExperiment(assays = list(counts = counts),
+                                rowData = features,
+                                colData = cells,
+                                metadata = list(params = params))
 
     return(sim)
 }
diff --git a/R/splat-estimate.R b/R/splat-estimate.R
index 0c2b036dcccbd6bab3230179e12ea21d4dc9426b..ead3c49fe500c4173e69eab9bddb2ccc48ae758f 100644
--- a/R/splat-estimate.R
+++ b/R/splat-estimate.R
@@ -4,8 +4,8 @@
 #' dataset. See the individual estimation functions for more details on how this
 #' is done.
 #'
-#' @param counts either a counts matrix or an SCESet object containing count
-#'        data to estimate parameters from.
+#' @param counts either a counts matrix or a SingleCellExperiment object
+#'        containing count data to estimate parameters from.
 #' @param params SplatParams object to store estimated values in.
 #'
 #' @seealso
@@ -26,8 +26,9 @@ splatEstimate <- function(counts, params = newSplatParams()) {
 
 #' @rdname splatEstimate
 #' @export
-splatEstimate.SCESet <- function(counts, params = newSplatParams()) {
-    counts <- scater::counts(counts)
+splatEstimate.SingleCellExperiment <- function(counts,
+                                               params = newSplatParams()) {
+    counts <- BiocGenerics::counts(counts)
     splatEstimate(counts, params)
 }
 
diff --git a/R/splat-simulate.R b/R/splat-simulate.R
index 5256804ea4ee0dc210b9d3cfe502bb28ab041211..98dd989939ca7aa147716f880fea1c2850dae8b4 100644
--- a/R/splat-simulate.R
+++ b/R/splat-simulate.R
@@ -31,15 +31,16 @@
 #'     \item Simulate BCV adjusted cell means
 #'     \item Simulate true counts
 #'     \item Simulate dropout
-#'     \item Create final SCESet object
+#'     \item Create final dataset
 #' }
 #'
-#' The final output is an \code{\link[scater]{SCESet}} object that contains the
-#' simulated counts but also the values for various intermediate steps. These
-#' are stored in the \code{\link[Biobase]{phenoData}} (for cell specific
-#' information), \code{\link[Biobase]{featureData}} (for gene specific
-#' information) or \code{\link[Biobase]{assayData}} (for gene by cell matrices)
-#' slots. This additional information includes:
+#' The final output is a
+#' \code{\link[SingleCellExperiment]{SingleCellExperiment}} object that
+#' contains the simulated counts but also the values for various intermediate
+#' steps. These are stored in the \code{\link[SummarizedExperiment]{colData}}
+#' (for cell specific information), \code{\link[SummarizedExperiment]{rowData}}
+#' (for gene specific information) or \code{\link[SummarizedExperiment]{assays}}
+#' (for gene by cell matrices) slots. This additional information includes:
 #' \describe{
 #'     \item{\code{phenoData}}{
 #'         \describe{
@@ -83,12 +84,12 @@
 #'     }
 #' }
 #'
-#' Values that have been added by Splatter are named using \code{CamelCase} in
-#' order to differentiate them from the values added by Scater which uses
-#' \code{underscore_naming}.
+#' Values that have been added by Splatter are named using \code{UpperCamelCase}
+#' in order to differentiate them from the values added by analysis packages
+#' which typically use \code{underscore_naming}.
 #'
-#' @return SCESet object containing the simulated counts and intermediate
-#' values.
+#' @return SingleCellExperiment object containing the simulated counts and
+#' intermediate values.
 #'
 #' @seealso
 #' \code{\link{splatSimLibSizes}}, \code{\link{splatSimGeneMeans}},
@@ -99,8 +100,8 @@
 #'
 #' @examples
 #' # Simulation with default parameters
-#' \dontrun{
 #' sim <- splatSimulate()
+#' \dontrun{
 #' # Simulation with different number of genes
 #' sim <- splatSimulate(nGenes = 1000)
 #' # Simulation with custom parameters
@@ -113,9 +114,9 @@
 #' # Simulate paths
 #' sim <- splatSimulate(method = "paths")
 #' }
-#' @importFrom Biobase fData pData pData<- assayData
+#' @importFrom SummarizedExperiment rowData colData colData<- assays
+#' @importFrom SingleCellExperiment SingleCellExperiment
 #' @importFrom methods validObject
-#' @importFrom scater newSCESet counts set_exprs<- get_exprs
 #' @export
 splatSimulate <- function(params = newSplatParams(),
                           method = c("single", "groups", "paths"),
@@ -158,28 +159,25 @@ splatSimulate <- function(params = newSplatParams(),
         group.names <- paste0("Path", seq_len(nGroups))
     }
 
-    # Create SCESet with dummy counts to store simulation
-    dummy.counts <- matrix(1, ncol = nCells, nrow = nGenes)
-    rownames(dummy.counts) <- gene.names
-    colnames(dummy.counts) <- cell.names
-    phenos <- new("AnnotatedDataFrame", data = data.frame(Cell = cell.names))
-    rownames(phenos) <- cell.names
-    features <- new("AnnotatedDataFrame", data = data.frame(Gene = gene.names))
+    # Create SingleCellExperiment to store simulation
+    cells <-  data.frame(Cell = cell.names)
+    rownames(cells) <- cell.names
+    features <- data.frame(Gene = gene.names)
     rownames(features) <- gene.names
-    sim <- newSCESet(countData = dummy.counts, phenoData = phenos,
-                     featureData = features)
+    sim <- SingleCellExperiment(rowData = features, colData = cells,
+                                metadata = list(params = params))
 
     # Make batches vector which is the index of param$batchCells repeated
     # params$batchCells[index] times
     batches <- lapply(seq_len(nBatches), function(i, b) {rep(i, b[i])},
                       b = batch.cells)
     batches <- unlist(batches)
-    pData(sim)$Batch <- batch.names[batches]
+    colData(sim)$Batch <- batch.names[batches]
 
     if (method != "single") {
         groups <- sample(seq_len(nGroups), nCells, prob = group.prob,
                          replace = TRUE)
-        pData(sim)$Group <- group.names[groups]
+        colData(sim)$Group <- group.names[groups]
     }
 
     if (verbose) {message("Simulating library sizes...")}
@@ -211,21 +209,8 @@ splatSimulate <- function(params = newSplatParams(),
     if (verbose) {message("Simulating dropout (if needed)...")}
     sim <- splatSimDropout(sim, params)
 
-    if (verbose) {message("Creating final SCESet...")}
-    # Create new SCESet to make sure values are calculated correctly
-    sce <- newSCESet(countData = counts(sim),
-                     phenoData = new("AnnotatedDataFrame", data = pData(sim)),
-                     featureData = new("AnnotatedDataFrame", data = fData(sim)))
-
-    # Add intermediate matrices stored in assayData
-    for (assay.name in names(assayData(sim))) {
-        if (!(assay.name %in% names(assayData(sce)))) {
-            set_exprs(sce, assay.name) <- get_exprs(sim, assay.name)
-        }
-    }
-
     if (verbose) {message("Done!")}
-    return(sce)
+    return(sim)
 }
 
 #' @rdname splatSimulate
@@ -258,12 +243,12 @@ splatSimulatePaths <- function(params = newSplatParams(), verbose = TRUE, ...) {
 #'
 #' Simulate expected library sizes from a log-normal distribution
 #'
-#' @param sim SCESet to add library size to.
+#' @param sim SingleCellExperiment to add library size to.
 #' @param params SplatParams object with simulation parameters.
 #'
-#' @return SCESet with simulated library sizes.
+#' @return SingleCellExperiment with simulated library sizes.
 #'
-#' @importFrom Biobase pData pData<-
+#' @importFrom SummarizedExperiment colData colData<-
 #' @importFrom stats rlnorm
 splatSimLibSizes <- function(sim, params) {
 
@@ -272,7 +257,7 @@ splatSimLibSizes <- function(sim, params) {
     lib.scale <- getParam(params, "lib.scale")
 
     exp.lib.sizes <- rlnorm(nCells, lib.loc, lib.scale)
-    pData(sim)$ExpLibSize <- exp.lib.sizes
+    colData(sim)$ExpLibSize <- exp.lib.sizes
 
     return(sim)
 }
@@ -283,12 +268,12 @@ splatSimLibSizes <- function(sim, params) {
 #' expression factors. Genes with an outlier factor not equal to 1 are replaced
 #' with the median mean expression multiplied by the outlier factor.
 #'
-#' @param sim SCESet to add gene means to.
+#' @param sim SingleCellExperiment to add gene means to.
 #' @param params SplatParams object with simulation parameters.
 #'
-#' @return SCESet with simulated gene means.
+#' @return SingleCellExperiment with simulated gene means.
 #'
-#' @importFrom Biobase fData fData<-
+#' @importFrom SummarizedExperiment rowData rowData<-
 #' @importFrom stats rgamma median
 splatSimGeneMeans <- function(sim, params) {
 
@@ -311,9 +296,9 @@ splatSimGeneMeans <- function(sim, params) {
     means.gene <- base.means.gene
     means.gene[is.outlier] <- outlier.means[is.outlier]
 
-    fData(sim)$BaseGeneMean <- base.means.gene
-    fData(sim)$OutlierFactor <- outlier.facs
-    fData(sim)$GeneMean <- means.gene
+    rowData(sim)$BaseGeneMean <- base.means.gene
+    rowData(sim)$OutlierFactor <- outlier.facs
+    rowData(sim)$GeneMean <- means.gene
 
     return(sim)
 }
@@ -324,25 +309,25 @@ splatSimGeneMeans <- function(sim, params) {
 #' using \code{\link{getLNormFactors}} and these are added along with updated
 #' means for each batch.
 #'
-#' @param sim SCESet to add batch effects to.
+#' @param sim SingleCellExperiment to add batch effects to.
 #' @param params SplatParams object with simulation parameters.
 #'
-#' @return SCESet with simulated batch effects.
+#' @return SingleCellExperiment with simulated batch effects.
 #'
-#' @importFrom Biobase fData fData<-
+#' @importFrom SummarizedExperiment rowData rowData<-
 splatSimBatchEffects <- function(sim, params) {
 
     nGenes <- getParam(params, "nGenes")
     nBatches <- getParam(params, "nBatches")
     batch.facLoc <- getParam(params, "batch.facLoc")
     batch.facScale <- getParam(params, "batch.facScale")
-    means.gene <- fData(sim)$GeneMean
+    means.gene <- rowData(sim)$GeneMean
 
     for (idx in seq_len(nBatches)) {
         batch.facs <- getLNormFactors(nGenes, 1, 0.5, batch.facLoc[idx],
                                         batch.facScale[idx])
         batch.means.gene <- means.gene * batch.facs
-        fData(sim)[[paste0("BatchFacBatch", idx)]] <- batch.facs
+        rowData(sim)[[paste0("BatchFacBatch", idx)]] <- batch.facs
     }
 
     return(sim)
@@ -353,26 +338,26 @@ splatSimBatchEffects <- function(sim, params) {
 #' Simulate a mean for each gene in each cell incorporating batch effect
 #' factors.
 #'
-#' @param sim SCESet to add batch means to.
+#' @param sim SingleCellExperiment to add batch means to.
 #' @param params SplatParams object with simulation parameters.
 #'
-#' @return SCESet with simulated batch means.
+#' @return SingleCellExperiment with simulated batch means.
 #'
-#' @importFrom Biobase fData fData<-
+#' @importFrom SummarizedExperiment rowData rowData<-
 splatSimBatchCellMeans <- function(sim, params) {
 
     nBatches <- getParam(params, "nBatches")
-    cell.names <- pData(sim)$Cell
-    gene.names <- fData(sim)$Gene
-    gene.means <- fData(sim)$GeneMean
+    cell.names <- colData(sim)$Cell
+    gene.names <- rowData(sim)$Gene
+    gene.means <- rowData(sim)$GeneMean
 
     if (nBatches > 1) {
-        batches <- pData(sim)$Batch
+        batches <- colData(sim)$Batch
         batch.names <- unique(batches)
 
-        batch.facs.gene <- fData(sim)[, paste0("BatchFac", batch.names)]
-        batch.facs.cell <- as.matrix(batch.facs.gene[, factor(batches)])
-
+        batch.facs.gene <- rowData(sim)[, paste0("BatchFac", batch.names)]
+        batch.facs.cell <- as.matrix(batch.facs.gene[,
+                                                  as.numeric(factor(batches))])
     } else {
         nCells <- getParam(params, "nCells")
         nGenes <- getParam(params, "nGenes")
@@ -384,7 +369,7 @@ splatSimBatchCellMeans <- function(sim, params) {
 
     colnames(batch.means.cell) <- cell.names
     rownames(batch.means.cell) <- gene.names
-    set_exprs(sim, "BatchCellMeans") <- batch.means.cell
+    assays(sim)$BatchCellMeans <- batch.means.cell
 
     return(sim)
 }
@@ -396,16 +381,16 @@ splatSimBatchCellMeans <- function(sim, params) {
 #' along with updated means for each group. For paths care is taked to make sure
 #' they are simulated in the correct order.
 #'
-#' @param sim SCESet to add differential expression to.
+#' @param sim SingleCellExperiment to add differential expression to.
 #' @param params splatParams object with simulation parameters.
 #'
-#' @return SCESet with simulated differential expression.
+#' @return SingleCellExperiment with simulated differential expression.
 #'
 #' @name splatSimDE
 NULL
 
 #' @rdname splatSimDE
-#' @importFrom Biobase fData
+#' @importFrom SummarizedExperiment rowData
 splatSimGroupDE <- function(sim, params) {
 
     nGenes <- getParam(params, "nGenes")
@@ -414,20 +399,20 @@ splatSimGroupDE <- function(sim, params) {
     de.downProb <- getParam(params, "de.downProb")
     de.facLoc <- getParam(params, "de.facLoc")
     de.facScale <- getParam(params, "de.facScale")
-    means.gene <- fData(sim)$GeneMean
+    means.gene <- rowData(sim)$GeneMean
 
     for (idx in seq_len(nGroups)) {
         de.facs <- getLNormFactors(nGenes, de.prob[idx], de.downProb[idx],
                                    de.facLoc[idx], de.facScale[idx])
         group.means.gene <- means.gene * de.facs
-        fData(sim)[[paste0("DEFacGroup", idx)]] <- de.facs
+        rowData(sim)[[paste0("DEFacGroup", idx)]] <- de.facs
     }
 
     return(sim)
 }
 
 #' @rdname splatSimDE
-#' @importFrom Biobase fData
+#' @importFrom SummarizedExperiment rowData
 splatSimPathDE <- function(sim, params) {
 
     nGenes <- getParam(params, "nGenes")
@@ -441,14 +426,14 @@ splatSimPathDE <- function(sim, params) {
     for (path in path.order) {
         from <- path.from[path]
         if (from == 0) {
-            means.gene <- fData(sim)$GeneMean
+            means.gene <- rowData(sim)$GeneMean
         } else {
-            means.gene <- fData(sim)[[paste0("GeneMeanPath", from)]]
+            means.gene <- rowData(sim)[[paste0("GeneMeanPath", from)]]
         }
         de.facs <- getLNormFactors(nGenes, de.prob[path], de.downProb[path],
                                    de.facLoc[path], de.facScale[path])
         path.means.gene <- means.gene * de.facs
-        fData(sim)[[paste0("DEFacPath", path)]] <- de.facs
+        rowData(sim)[[paste0("DEFacPath", path)]] <- de.facs
     }
 
     return(sim)
@@ -462,24 +447,23 @@ splatSimPathDE <- function(sim, params) {
 #' random position on the appropriate path (when simulating paths). The selected
 #' means are adjusted for each cell's expected library size.
 #'
-#' @param sim SCESet to add cell means to.
+#' @param sim SingleCellExperiment to add cell means to.
 #' @param params SplatParams object with simulation parameters.
 #'
-#' @return SCESet with added cell means.
+#' @return SingleCellExperiment with added cell means.
 #'
 #' @name splatSimCellMeans
 NULL
 
 #' @rdname splatSimCellMeans
-#' @importFrom Biobase fData pData
-#' @importFrom scater set_exprs<- get_exprs
+#' @importFrom SummarizedExperiment rowData colData assays assays<-
 splatSimSingleCellMeans <- function(sim, params) {
 
     nCells <- getParam(params, "nCells")
-    cell.names <- pData(sim)$Cell
-    gene.names <- fData(sim)$Gene
-    exp.lib.sizes <- pData(sim)$ExpLibSize
-    batch.means.cell <- get_exprs(sim, "BatchCellMeans")
+    cell.names <- colData(sim)$Cell
+    gene.names <- rowData(sim)$Gene
+    exp.lib.sizes <- colData(sim)$ExpLibSize
+    batch.means.cell <- assays(sim)$BatchCellMeans
 
     cell.means.gene <- batch.means.cell
     cell.props.gene <- t(t(cell.means.gene) / colSums(cell.means.gene))
@@ -487,56 +471,54 @@ splatSimSingleCellMeans <- function(sim, params) {
 
     colnames(base.means.cell) <- cell.names
     rownames(base.means.cell) <- gene.names
-    set_exprs(sim, "BaseCellMeans") <- base.means.cell
+    assays(sim)$BaseCellMeans <- base.means.cell
 
     return(sim)
 }
 
 #' @rdname splatSimCellMeans
-#' @importFrom Biobase fData pData
-#' @importFrom scater get_exprs set_exprs<-
+#' @importFrom SummarizedExperiment rowData colData assays assays<-
 splatSimGroupCellMeans <- function(sim, params) {
 
     nGroups <- getParam(params, "nGroups")
-    cell.names <- pData(sim)$Cell
-    gene.names <- fData(sim)$Gene
-    groups <- pData(sim)$Group
+    cell.names <- colData(sim)$Cell
+    gene.names <- rowData(sim)$Gene
+    groups <- colData(sim)$Group
     group.names <- sort(unique(groups))
-    exp.lib.sizes <- pData(sim)$ExpLibSize
-    batch.means.cell <- get_exprs(sim, "BatchCellMeans")
+    exp.lib.sizes <- colData(sim)$ExpLibSize
+    batch.means.cell <- assays(sim)$BatchCellMeans
 
-    group.facs.gene <- fData(sim)[, paste0("DEFac", group.names)]
-    cell.facs.gene <- as.matrix(group.facs.gene[, factor(groups)])
+    group.facs.gene <- rowData(sim)[, paste0("DEFac", group.names)]
+    cell.facs.gene <- as.matrix(group.facs.gene[, paste0("DEFac", groups)])
     cell.means.gene <- batch.means.cell * cell.facs.gene
     cell.props.gene <- t(t(cell.means.gene) / colSums(cell.means.gene))
     base.means.cell <- t(t(cell.props.gene) * exp.lib.sizes)
 
     colnames(base.means.cell) <- cell.names
     rownames(base.means.cell) <- gene.names
-    set_exprs(sim, "BaseCellMeans") <- base.means.cell
+    assays(sim)$BaseCellMeans <- base.means.cell
 
     return(sim)
 }
 
 #' @rdname splatSimCellMeans
-#' @importFrom Biobase fData pData
-#' @importFrom scater set_exprs<-
+#' @importFrom SummarizedExperiment rowData colData colData<- assays assays<-
 #' @importFrom stats rbinom
 splatSimPathCellMeans <- function(sim, params) {
 
     nGenes <- getParam(params, "nGenes")
     nCells <- getParam(params, "nCells")
     nGroups <- getParam(params, "nGroups")
-    cell.names <- pData(sim)$Cell
-    gene.names <- fData(sim)$Gene
+    cell.names <- colData(sim)$Cell
+    gene.names <- rowData(sim)$Gene
     path.from <- getParam(params, "path.from")
     path.length <- getParam(params, "path.length")
     path.skew <- getParam(params, "path.skew")
     path.nonlinearProb <- getParam(params, "path.nonlinearProb")
     path.sigmaFac <- getParam(params, "path.sigmaFac")
-    groups <- pData(sim)$Group
-    exp.lib.sizes <- pData(sim)$ExpLibSize
-    batch.means.cell <- get_exprs(sim, "BatchCellMeans")
+    groups <- colData(sim)$Group
+    exp.lib.sizes <- colData(sim)$ExpLibSize
+    batch.means.cell <- assays(sim)$BatchCellMeans
 
     group.sizes <- table(groups)
 
@@ -546,7 +528,7 @@ splatSimPathCellMeans <- function(sim, params) {
         is.nonlinear <- as.logical(rbinom(nGenes, 1, path.nonlinearProb))
         sigma.facs <- rep(0, nGenes)
         sigma.facs[is.nonlinear] <- path.sigmaFac
-        fData(sim)[[paste0("SigmaFacPath", idx)]] <- sigma.facs
+        rowData(sim)[[paste0("SigmaFacPath", idx)]] <- sigma.facs
     }
 
     # Generate non-linear path factors
@@ -555,7 +537,7 @@ splatSimPathCellMeans <- function(sim, params) {
         is.nonlinear <- as.logical(rbinom(nGenes, 1, path.nonlinearProb))
         sigma.facs <- rep(0, nGenes)
         sigma.facs[is.nonlinear] <- path.sigmaFac
-        fData(sim)[[paste0("SigmaFacPath", idx)]] <- sigma.facs
+        rowData(sim)[[paste0("SigmaFacPath", idx)]] <- sigma.facs
     }
 
     # Generate paths. Each path is a matrix with path.length columns and
@@ -566,13 +548,13 @@ splatSimPathCellMeans <- function(sim, params) {
         if (from == 0) {
             facs.start <- rep(1, nGenes)
         } else {
-            facs.start <- fData(sim)[[paste0("DEFacPath", from)]]
+            facs.start <- rowData(sim)[[paste0("DEFacPath", from)]]
         }
         # Find the factors at the end position
-        facs.end <- fData(sim)[[paste0("DEFacPath", idx)]]
+        facs.end <- rowData(sim)[[paste0("DEFacPath", idx)]]
 
         # Get the non-linear factors
-        sigma.facs <- fData(sim)[[paste0("SigmaFacPath", idx)]]
+        sigma.facs <- rowData(sim)[[paste0("SigmaFacPath", idx)]]
 
         # Build Brownian bridges from start to end
         steps <- buildBridges(facs.start, facs.end, n = path.length[idx],
@@ -609,9 +591,8 @@ splatSimPathCellMeans <- function(sim, params) {
     colnames(base.means.cell) <- cell.names
     rownames(base.means.cell) <- gene.names
 
-    #pData(sim)$Step <- unlist(cell.steps)
-    pData(sim)$Step <- steps
-    set_exprs(sim, "BaseCellMeans") <- base.means.cell
+    colData(sim)$Step <- steps
+    assays(sim)$BaseCellMeans <- base.means.cell
 
     return(sim)
 }
@@ -622,23 +603,22 @@ splatSimPathCellMeans <- function(sim, params) {
 #' mean-variance trend using Biological Coefficient of Variation taken from
 #' and inverse gamma distribution.
 #'
-#' @param sim SCESet to add BCV means to.
+#' @param sim SingleCellExperiment to add BCV means to.
 #' @param params SplatParams object with simulation parameters.
 #'
-#' @return SCESet with simulated BCV means.
+#' @return SingleCellExperiment with simulated BCV means.
 #'
-#' @importFrom Biobase fData pData
-#' @importFrom scater get_exprs set_exprs<-
+#' @importFrom SummarizedExperiment rowData colData assays assays<-
 #' @importFrom stats rchisq rgamma
 splatSimBCVMeans <- function(sim, params) {
 
-    cell.names <- pData(sim)$Cell
-    gene.names <- fData(sim)$Gene
+    cell.names <- colData(sim)$Cell
+    gene.names <- rowData(sim)$Gene
     nGenes <- getParam(params, "nGenes")
     nCells <- getParam(params, "nCells")
     bcv.common <- getParam(params, "bcv.common")
     bcv.df <- getParam(params, "bcv.df")
-    base.means.cell <- get_exprs(sim, "BaseCellMeans")
+    base.means.cell <- assays(sim)$BaseCellMeans
 
     if (is.finite(bcv.df)) {
         bcv <- (bcv.common + (1 / sqrt(base.means.cell))) *
@@ -655,8 +635,8 @@ splatSimBCVMeans <- function(sim, params) {
     colnames(means.cell) <- cell.names
     rownames(means.cell) <- gene.names
 
-    set_exprs(sim, "BCV") <- bcv
-    set_exprs(sim, "CellMeans") <- means.cell
+    assays(sim)$BCV <- bcv
+    assays(sim)$CellMeans <- means.cell
 
     return(sim)
 }
@@ -667,21 +647,20 @@ splatSimBCVMeans <- function(sim, params) {
 #' distribution where Each gene in each cell has it's own mean based on the
 #' group (or path position), expected library size and BCV.
 #'
-#' @param sim SCESet to add true counts to.
+#' @param sim SingleCellExperiment to add true counts to.
 #' @param params SplatParams object with simulation parameters.
 #'
-#' @return SCESet with simulated true counts.
+#' @return SingleCellExperiment with simulated true counts.
 #'
-#' @importFrom Biobase fData pData
-#' @importFrom scater get_exprs set_exprs<-
+#' @importFrom SummarizedExperiment rowData colData assays assays<-
 #' @importFrom stats rpois
 splatSimTrueCounts <- function(sim, params) {
 
-    cell.names <- pData(sim)$Cell
-    gene.names <- fData(sim)$Gene
+    cell.names <- colData(sim)$Cell
+    gene.names <- rowData(sim)$Gene
     nGenes <- getParam(params, "nGenes")
     nCells <- getParam(params, "nCells")
-    cell.means <- get_exprs(sim, "CellMeans")
+    cell.means <- assays(sim)$CellMeans
 
     true.counts <- matrix(rpois(nGenes * nCells, lambda = cell.means),
                           nrow = nGenes, ncol = nCells)
@@ -689,7 +668,7 @@ splatSimTrueCounts <- function(sim, params) {
     colnames(true.counts) <- cell.names
     rownames(true.counts) <- gene.names
 
-    set_exprs(sim, "TrueCounts") <- true.counts
+    assays(sim)$TrueCounts <- true.counts
 
     return(sim)
 }
@@ -701,27 +680,26 @@ splatSimTrueCounts <- function(sim, params) {
 #' gene in each cell. These probabilities are used in a Bernoulli distribution
 #' to decide which counts should be dropped.
 #'
-#' @param sim SCESet to add dropout to.
+#' @param sim SingleCellExperiment to add dropout to.
 #' @param params SplatParams object with simulation parameters.
 #'
-#' @return SCESet with simulated dropout and observed counts.
+#' @return SingleCellExperiment with simulated dropout and observed counts.
 #'
-#' @importFrom Biobase fData pData
-#' @importFrom scater get_exprs set_exprs<-
+#' @importFrom SummarizedExperiment rowData colData assays assays<-
 #' @importFrom stats rbinom
 splatSimDropout <- function(sim, params) {
 
     dropout.present <- getParam(params, "dropout.present")
-    true.counts <- get_exprs(sim, "TrueCounts")
+    true.counts <- assays(sim)$TrueCounts
 
     if (dropout.present) {
-        cell.names <- pData(sim)$Cell
-        gene.names <- fData(sim)$Gene
+        cell.names <- colData(sim)$Cell
+        gene.names <- rowData(sim)$Gene
         nCells <- getParam(params, "nCells")
         nGenes <- getParam(params, "nGenes")
         dropout.mid <- getParam(params, "dropout.mid")
         dropout.shape <- getParam(params, "dropout.shape")
-        cell.means <- get_exprs(sim, "CellMeans")
+        cell.means <- assays(sim)$CellMeans
 
         # Generate probabilites based on expression
         drop.prob <- sapply(seq_len(nCells), function(idx) {
@@ -740,13 +718,13 @@ splatSimDropout <- function(sim, params) {
         colnames(keep) <- cell.names
         rownames(keep) <- gene.names
 
-        set_exprs(sim, "DropProb") <- drop.prob
-        set_exprs(sim, "Dropout") <- !keep
+        assays(sim)$DropProb <- drop.prob
+        assays(sim)$Dropout <- !keep
     } else {
         counts <- true.counts
     }
 
-    scater::counts(sim) <- counts
+    BiocGenerics::counts(sim) <- counts
 
     return(sim)
 }
diff --git a/R/zinb-estimate.R b/R/zinb-estimate.R
new file mode 100644
index 0000000000000000000000000000000000000000..2a14443ccba5949f9cfba69730a0887b7b4ecdb3
--- /dev/null
+++ b/R/zinb-estimate.R
@@ -0,0 +1,97 @@
+#' Estimate ZINB-WaVE simulation parameters
+#'
+#' Estimate simulation parameters for the ZINB-WaVE simulation from a real
+#' dataset.
+#'
+#' @param counts either a counts matrix or a SingleCellExperiment object
+#'        containing count data to estimate parameters from.
+#' @param design.samples design matrix of sample-level covariates.
+#' @param design.genes design matrix of gene-level covariates.
+#' @param common.disp logical. Whether or not a single dispersion for all
+#'        features is estimated.
+#' @param iter.init number of iterations to use for initalization.
+#' @param iter.opt number of iterations to use for optimization.
+#' @param stop.opt stopping criterion for optimization.
+#' @param params ZINBParams object to store estimated values in.
+#' @param verbose logical. Whether to print progress messages.
+#' @param BPPARAM A \code{\link[BiocParallel]{BiocParallelParam}} instance
+#'        giving the parallel back-end to be used. Default is
+#'        \code{\link[BiocParallel]{SerialParam}} which uses a single core.
+#' @param ... additional arguments passes to \code{\link[zinbwave]{zinbFit}}.
+#'
+#' @details
+#' The function is a wrapper around \code{\link[zinbwave]{zinbFit}} that takes
+#' the fitted model and inserts it into a \code{\link{ZINBParams}} object. See
+#' \code{\link{ZINBParams}} for more details on the parameters and
+#' \code{\link[zinbwave]{zinbFit}} for details of the estimation procedure.
+#'
+#' @return ZINBParams object containing the estimated parameters.
+#'
+#' @examples
+#' \dontrun{
+#' data("sc_example_counts")
+#' params <- zinbEstimate(sc_example_counts)
+#' params
+#' }
+#' @importFrom BiocParallel SerialParam
+#' @export
+zinbEstimate <- function(counts, design.samples = NULL, design.genes = NULL,
+                         common.disp = TRUE, iter.init = 2, iter.opt = 25,
+                         stop.opt = 1e-04, params = newZINBParams(),
+                         verbose = TRUE, BPPARAM = SerialParam(), ...) {
+    UseMethod("zinbEstimate")
+}
+
+#' @rdname zinbEstimate
+#' @export
+zinbEstimate.SingleCellExperiment <- function(counts, design.samples = NULL,
+                                              design.genes = NULL,
+                                              common.disp = TRUE,
+                                              iter.init = 2, iter.opt = 25,
+                                              stop.opt = 1e-04,
+                                              params = newZINBParams(),
+                                              verbose = TRUE,
+                                              BPPARAM = SerialParam(), ...) {
+    counts <- BiocGenerics::counts(counts)
+    zinbEstimate(counts, design.samples, design.genes, common.disp,
+                 iter.init, iter.opt, stop.opt, params, verbose, BPPARAM, ...)
+}
+
+#' @rdname zinbEstimate
+#' @export
+zinbEstimate.matrix <- function(counts, design.samples = NULL,
+                                design.genes = NULL, common.disp = TRUE,
+                                iter.init = 2, iter.opt = 25, stop.opt = 1e-04,
+                                params = newZINBParams(), verbose = TRUE,
+                                BPPARAM = SerialParam(), ...) {
+
+    checkmate::assertClass(params, "ZINBParams")
+
+    if (verbose) {message("Removing all zero genes...")}
+    counts <- counts[rowSums(counts) > 0, ]
+
+    args.list <- list(Y = counts,
+                      commondispersion = common.disp,
+                      verbose = verbose,
+                      nb.repeat.initialize = iter.init,
+                      maxiter.optimize = iter.opt,
+                      stop.epsilon.optimize = stop.opt,
+                      BPPARAM = BPPARAM)
+
+    if (!is.null(design.samples)) {
+        args.list$X <- design.samples
+    }
+
+    if (!is.null(design.genes)) {
+        args.list$V <- design.genes
+    }
+
+    args.list <- c(args.list, list(...))
+
+    if (verbose) {message("Fitting model...")}
+    model <- do.call(zinbwave::zinbFit, args.list)
+
+    params <- setParams(params, model = model)
+
+    return(params)
+}
diff --git a/R/zinb-simulate.R b/R/zinb-simulate.R
new file mode 100644
index 0000000000000000000000000000000000000000..92e93c5aae1c4608da315c1dbecb44c546965804
--- /dev/null
+++ b/R/zinb-simulate.R
@@ -0,0 +1,74 @@
+#' ZINB-WaVE simulation
+#'
+#' Simulate counts using the ZINB-WaVE method.
+#'
+#' @param params ZINBParams object containing simulation parameters.
+#' @param verbose logical. Whether to print progress messages
+#' @param ... any additional parameter settings to override what is provided in
+#'        \code{params}.
+#'
+#' @details
+#' This function is just a wrapper around \code{\link[zinbwave]{zinbSim}} that
+#' takes a \code{\link{ZINBParams}}, runs the simulation then converts the
+#' output to a \code{\link[SingleCellExperiment]{SingleCellExperiment}} object.
+#' See \code{\link[zinbwave]{zinbSim}} and the ZINB-WaVE paper for
+#' more details about how the simulation works.
+#'
+#' @return SingleCellExperiment containing simulated counts
+#'
+#' @references
+#' Campbell K, Yau C. Uncovering genomic trajectories with heterogeneous genetic
+#' and environmental backgrounds across single-cells and populations. bioRxiv
+#' (2017).
+#'
+#' Risso D, Perraudeau F, Gribkova S, Dudoit S, Vert J-P. ZINB-WaVE: A general
+#' and flexible method for signal extraction from single-cell RNA-seq data
+#' bioRxiv (2017).
+#'
+#' Paper: \url{10.1101/125112}
+#'
+#' Code: \url{https://github.com/drisso/zinbwave}
+#'
+#' @examples
+#' sim <- zinbSimulate()
+#'
+#' @export
+#' @importFrom SingleCellExperiment SingleCellExperiment
+zinbSimulate <- function(params = newZINBParams(), verbose = TRUE, ...) {
+
+    checkmate::assertClass(params, "ZINBParams")
+    params <- setParams(params, ...)
+
+    # Get the parameters we are going to use
+    nCells <- getParam(params, "nCells")
+    nGenes <- getParam(params, "nGenes")
+    model <- getParam(params, "model")
+    seed <- getParam(params, "seed")
+
+    if (verbose) {message("Simulating counts...")}
+    zinb.sim <- zinbwave::zinbSim(model, seed)
+
+    if (verbose) {message("Creating final dataset...")}
+    cell.names <- paste0("Cell", seq_len(nCells))
+    gene.names <- paste0("Gene", seq_len(nGenes))
+
+    for (item in c("counts", "dataNB", "dataDropouts")) {
+        rownames(zinb.sim[[item]]) <- gene.names
+        colnames(zinb.sim[[item]]) <- cell.names
+    }
+
+    cells <- data.frame(Cell = cell.names)
+    rownames(cells) <- cell.names
+
+    features <- data.frame(Gene = gene.names)
+    rownames(features) <- gene.names
+
+    sim <- SingleCellExperiment(assays = list(counts = zinb.sim$counts,
+                                              TrueCounts = zinb.sim$dataNB,
+                                              Dropouts = zinb.sim$dataDropouts),
+                                rowData = features,
+                                colData = cells,
+                                metadata = list(params = params))
+
+    return(sim)
+}
diff --git a/README.md b/README.md
index 13929569ff682e7a02abe8a78224279bc0895811..fc48816dbe07841eea2f928879ef3aff56200cb2 100644
--- a/README.md
+++ b/README.md
@@ -14,8 +14,8 @@ data. Splatter provides a common interface to multiple simulations that have:
 * Functions for simulating counts using those parameters
 
 Splatter is built on top of [`scater`][scater] and stores simulations in
-`SCESet` objects. Splatter also has functions for comparing simulations and real
-datasets.
+[`SingleCellExperiment`][SCE] objects. Splatter also has functions for comparing
+simulations and real datasets.
 
 ## Installation.
 
@@ -76,6 +76,7 @@ doi:10.1101/133173"][preprint].
 ```
 
 [scater]: https://github.com/davismcc/scater
+[SCE]: https://github.com/drisso/SingleCellExperiment
 [contrib]: https://github.com/Bioconductor/Contributions/issues/209
 [bioc]: https://bioconductor.org/packages/devel/bioc/html/splatter.html
 [vignette]: https://bioconductor.org/packages/devel/bioc/vignettes/splatter/inst/doc/splatter.html
diff --git a/_pkgdown.yml b/_pkgdown.yml
index d5463906634dae3c8efcb557e6a753393e53ce23..74aacfba6c37242e8a30deae1f51dd0cf058329a 100644
--- a/_pkgdown.yml
+++ b/_pkgdown.yml
@@ -12,18 +12,23 @@ reference:
       - '`getParams`'
       - '`Lun2Params`'
       - '`LunParams`'
+      - '`MFAParams`'
       - '`newParams`'
       - '`Params`'
+      - '`PhenoParams`'
       - '`SCDDParams`'
       - '`SimpleParams`'
       - '`SplatParams`'
       - '`setParam`'
       - '`setParams`'
+      - '`ZINBParams`'
   - title: Estimation
     desc: Functions for estimating parameters
     contents:
       - '`lun2Estimate`'
       - '`lunEstimate`'
+      - '`mfaEstimate`'
+      - '`phenoEstimate`'
       - '`scDDEstimate`'
       - '`simpleEstimate`'
       - '`splatEstBCV`'
@@ -32,11 +37,14 @@ reference:
       - '`splatEstLib`'
       - '`splatEstMean`'
       - '`splatEstOutlier`'
+      - '`zinbEstimate`'
   - title: Simulation
     desc: Functions for simulating datasets
     contents:
       - '`lun2Simulate`'
       - '`lunSimulate`'
+      - '`mfaSimulate`'
+      - '`phenoEstimate`'
       - '`scDDSimulate`'
       - '`simpleSimulate`'
       - '`splatSimBatchCellMeans`'
@@ -49,11 +57,12 @@ reference:
       - '`splatSimLibSizes`'
       - '`splatSimTrueCounts`'
       - '`splatSimulate`'
+      - '`zinbSimulate`'
   - title: Comparison functions
     desc: Functions for comparing datasets
     contents:
-      - '`compareSCESets`'
-      - '`diffSCESets`'
+      - '`compareSCEs`'
+      - '`diffSCEs`'
       - '`makeCompPanel`'
       - '`makeDiffPanel`'
       - '`makeOverallPanel`'
diff --git a/docs/articles/index.html b/docs/articles/index.html
index 46ce1cc6fe95dc63ebb19c658b246e029ab4a381..3a8201b24fa0eb72c1e919ca03dd7abcd1891335 100644
--- a/docs/articles/index.html
+++ b/docs/articles/index.html
@@ -96,7 +96,7 @@
       </header>
 
       <div class="page-header">
-  <h1>Articles <small>version&nbsp;1.1.4</small></h1>
+  <h1>Articles <small>version&nbsp;1.1.7</small></h1>
 </div>
 
 <div class="row">
diff --git a/docs/articles/splatter.html b/docs/articles/splatter.html
index 9961e50cc94558a0258ad34055ed2fbc3a95cbf6..93aae153288311a4c6e9d4504519e98587ba1ae0 100644
--- a/docs/articles/splatter.html
+++ b/docs/articles/splatter.html
@@ -76,7 +76,7 @@
       <h1>Introduction to Splatter</h1>
                         <h4 class="author">Luke Zappia</h4>
             
-            <h4 class="date">2017-08-04</h4>
+            <h4 class="date">2017-10-05</h4>
           </div>
 
     
@@ -131,8 +131,38 @@
 ##     'browseVignettes()'. To cite Bioconductor, see
 ##     'citation("Biobase")', and for packages 'citation("pkgname")'.</code></pre>
 <pre><code>## Loading required package: ggplot2</code></pre>
+<pre><code>## Loading required package: SingleCellExperiment</code></pre>
+<pre><code>## Loading required package: SummarizedExperiment</code></pre>
+<pre><code>## Loading required package: GenomicRanges</code></pre>
+<pre><code>## Loading required package: stats4</code></pre>
+<pre><code>## Loading required package: S4Vectors</code></pre>
+<pre><code>## 
+## Attaching package: 'S4Vectors'</code></pre>
+<pre><code>## The following object is masked from 'package:base':
+## 
+##     expand.grid</code></pre>
+<pre><code>## Loading required package: IRanges</code></pre>
+<pre><code>## Loading required package: GenomeInfoDb</code></pre>
+<pre><code>## Loading required package: DelayedArray</code></pre>
+<pre><code>## Loading required package: matrixStats</code></pre>
+<pre><code>## 
+## Attaching package: 'matrixStats'</code></pre>
+<pre><code>## The following objects are masked from 'package:Biobase':
+## 
+##     anyMissing, rowMedians</code></pre>
+<pre><code>## 
+## Attaching package: 'DelayedArray'</code></pre>
+<pre><code>## The following objects are masked from 'package:matrixStats':
+## 
+##     colMaxs, colMins, colRanges, rowMaxs, rowMins, rowRanges</code></pre>
+<pre><code>## The following object is masked from 'package:base':
+## 
+##     apply</code></pre>
 <pre><code>## 
 ## Attaching package: 'scater'</code></pre>
+<pre><code>## The following object is masked from 'package:S4Vectors':
+## 
+##     rename</code></pre>
 <pre><code>## The following object is masked from 'package:stats':
 ## 
 ##     filter</code></pre>
@@ -149,7 +179,6 @@ sim &lt;-<span class="st"> </span><span class="kw"><a href="../reference/splatSi
 <pre><code>## Simulating BCV...</code></pre>
 <pre><code>## Simulating counts..</code></pre>
 <pre><code>## Simulating dropout (if needed)...</code></pre>
-<pre><code>## Creating final SCESet...</code></pre>
 <pre><code>## Done!</code></pre>
 <p>These steps will be explained in detail in the following sections but briefly the first step takes a dataset and estimates simulation parameters from it and the second step takes those parameters and simulates a new dataset.</p>
 </div>
@@ -288,7 +317,7 @@ params</code></pre></div>
 ## 
 ## Global: 
 ## (Genes)  (Cells)   [Seed]  
-##   10000      100    98513  
+##   10000      100   882480  
 ## 
 ## 27 additional parameters 
 ## 
@@ -361,7 +390,7 @@ params</code></pre></div>
 ## 
 ## Global: 
 ## (GENES)  (Cells)   [Seed]  
-##    8000      100    98513  
+##    8000      100   882480  
 ## 
 ## 27 additional parameters 
 ## 
@@ -434,7 +463,7 @@ sc_example_counts[<span class="dv">1</span><span class="op">:</span><span class=
 ## Gene_0004        0        1        0        0        0
 ## Gene_0005        0        0       11        0        0</code></pre>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">params &lt;-<span class="st"> </span><span class="kw"><a href="../reference/splatEstimate.html">splatEstimate</a></span>(sc_example_counts)</code></pre></div>
-<p>Here we estimated parameters from a counts matrix but <code>splatEstimate</code> can also take an <code>SCESet</code> object from the <code>scater</code> package. The estimation process has the following steps:</p>
+<p>Here we estimated parameters from a counts matrix but <code>splatEstimate</code> can also take a <code>SingleCellExperiment</code> object. The estimation process has the following steps:</p>
 <ol style="list-style-type: decimal">
 <li>Mean parameters are estimated by fitting a gamma distribution to the mean expression levels.</li>
 <li>Library size parameters are estimated by fitting a log-normal distribution to the library sizes.</li>
@@ -456,67 +485,66 @@ sc_example_counts[<span class="dv">1</span><span class="op">:</span><span class=
 <pre><code>## Simulating BCV...</code></pre>
 <pre><code>## Simulating counts..</code></pre>
 <pre><code>## Simulating dropout (if needed)...</code></pre>
-<pre><code>## Creating final SCESet...</code></pre>
 <pre><code>## Done!</code></pre>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">sim</code></pre></div>
-<pre><code>## SCESet (storageMode: lockedEnvironment)
-## assayData: 1000 features, 40 samples 
-##   element names: BaseCellMeans, BatchCellMeans, BCV, CellMeans, counts, exprs, TrueCounts 
-## protocolData: none
-## phenoData
-##   sampleNames: Cell1 Cell2 ... Cell40 (40 total)
-##   varLabels: Cell Batch ExpLibSize
-##   varMetadata: labelDescription
-## featureData
-##   featureNames: Gene1 Gene2 ... Gene1000 (1000 total)
-##   fvarLabels: Gene BaseGeneMean OutlierFactor GeneMean
-##   fvarMetadata: labelDescription
-## experimentData: use 'experimentData(object)'
-## Annotation:</code></pre>
-<p>Looking at the output of <code>splatSimulate</code> we can see that <code>sim</code> is an <code>SCESet</code> object with 1000 features (genes) and 40 samples (cells). The main part of this object is a features by samples matrix containing the simulated counts (accessed using <code>counts</code>), although it can also hold other expression measures such as FPKM or TPM. Additionaly an <code>SCESet</code> contains phenotype information about each cell (accessed using <code>pData</code>) and feature information about each gene (accessed using <code>fData</code>). Splatter uses these slots to store information about the intermediate values of the simulation.</p>
+<pre><code>## class: SingleCellExperiment 
+## dim: 1000 40 
+## metadata(1): params
+## assays(6): BatchCellMeans BaseCellMeans ... TrueCounts counts
+## rownames(1000): Gene1 Gene2 ... Gene999 Gene1000
+## rowData names(4): Gene BaseGeneMean OutlierFactor GeneMean
+## colnames(40): Cell1 Cell2 ... Cell39 Cell40
+## colData names(3): Cell Batch ExpLibSize
+## reducedDimNames(0):
+## spikeNames(0):</code></pre>
+<p>Looking at the output of <code>splatSimulate</code> we can see that <code>sim</code> is <code>SingleCellExperiment</code> object with 1000 features (genes) and 40 samples (cells). The main part of this object is a features by samples matrix containing the simulated counts (accessed using <code>counts</code>), although it can also hold other expression measures such as FPKM or TPM. Additionaly a <code>SingleCellExperiment</code> contains phenotype information about each cell (accessed using <code>colData</code>) and feature information about each gene (accessed using <code>rowData</code>). Splatter uses these slots, as well as <code>assays</code>, to store information about the intermediate values of the simulation.</p>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># Access the counts</span>
 <span class="kw">counts</span>(sim)[<span class="dv">1</span><span class="op">:</span><span class="dv">5</span>, <span class="dv">1</span><span class="op">:</span><span class="dv">5</span>]</code></pre></div>
 <pre><code>##       Cell1 Cell2 Cell3 Cell4 Cell5
-## Gene1    71    18     0     0     0
-## Gene2     0   202    97     0    13
-## Gene3    76     0    70     0  4352
-## Gene4    13     0     0     0     0
-## Gene5   563    89    77     0    17</code></pre>
+## Gene1     0     0     2     0    22
+## Gene2 25024   156     1    24     0
+## Gene3   185   126     2     0     0
+## Gene4    17     0     1     0     0
+## Gene5     0     0     0     0     0</code></pre>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># Information about genes</span>
-<span class="kw">head</span>(<span class="kw">fData</span>(sim))</code></pre></div>
-<pre><code>##        Gene BaseGeneMean OutlierFactor  GeneMean
-## Gene1 Gene1     12.15713             1  12.15713
-## Gene2 Gene2     24.31063             1  24.31063
-## Gene3 Gene3    297.25887             1 297.25887
-## Gene4 Gene4     59.50166             1  59.50166
-## Gene5 Gene5     22.53820             1  22.53820
-## Gene6 Gene6     20.61026             1  20.61026</code></pre>
+<span class="kw">head</span>(<span class="kw">rowData</span>(sim))</code></pre></div>
+<pre><code>## DataFrame with 6 rows and 4 columns
+##       Gene BaseGeneMean OutlierFactor     GeneMean
+##   &lt;factor&gt;    &lt;numeric&gt;     &lt;numeric&gt;    &lt;numeric&gt;
+## 1    Gene1 5.975143e+00             1 5.975143e+00
+## 2    Gene2 6.047020e+02             1 6.047020e+02
+## 3    Gene3 3.407454e+02             1 3.407454e+02
+## 4    Gene4 1.041869e+00             1 1.041869e+00
+## 5    Gene5 6.429022e-03             1 6.429022e-03
+## 6    Gene6 5.051255e+02             1 5.051255e+02</code></pre>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># Information about cells</span>
-<span class="kw">head</span>(<span class="kw">pData</span>(sim))</code></pre></div>
-<pre><code>##        Cell  Batch ExpLibSize
-## Cell1 Cell1 Batch1   95909.41
-## Cell2 Cell2 Batch1  244118.47
-## Cell3 Cell3 Batch1  240747.25
-## Cell4 Cell4 Batch1  271459.87
-## Cell5 Cell5 Batch1  424160.08
-## Cell6 Cell6 Batch1  228110.31</code></pre>
+<span class="kw">head</span>(<span class="kw">colData</span>(sim))</code></pre></div>
+<pre><code>## DataFrame with 6 rows and 3 columns
+##           Cell       Batch ExpLibSize
+##       &lt;factor&gt; &lt;character&gt;  &lt;numeric&gt;
+## Cell1    Cell1      Batch1   413957.7
+## Cell2    Cell2      Batch1   476887.9
+## Cell3    Cell3      Batch1   367310.0
+## Cell4    Cell4      Batch1   147775.6
+## Cell5    Cell5      Batch1   193681.3
+## Cell6    Cell6      Batch1   590802.3</code></pre>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># Gene by cell matrices</span>
-<span class="kw">names</span>(<span class="kw">assayData</span>(sim))</code></pre></div>
-<pre><code>## [1] "TrueCounts"     "BaseCellMeans"  "BatchCellMeans" "counts"        
-## [5] "BCV"            "CellMeans"      "exprs"</code></pre>
+<span class="kw">names</span>(<span class="kw">assays</span>(sim))</code></pre></div>
+<pre><code>## [1] "BatchCellMeans" "BaseCellMeans"  "BCV"            "CellMeans"     
+## [5] "TrueCounts"     "counts"</code></pre>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># Example of cell means matrix</span>
-<span class="kw">get_exprs</span>(sim, <span class="st">"CellMeans"</span>)[<span class="dv">1</span><span class="op">:</span><span class="dv">5</span>, <span class="dv">1</span><span class="op">:</span><span class="dv">5</span>]</code></pre></div>
-<pre><code>##             Cell1        Cell2        Cell3        Cell4        Cell5
-## Gene1  65.5696590 1.391352e+01   0.06193530 2.453784e-02 1.355897e-03
-## Gene2   0.4790134 2.126821e+02 102.46301607 3.225135e-09 9.960240e+00
-## Gene3  67.4445673 4.695054e-05  71.05222310 6.950506e-11 4.334285e+03
-## Gene4  10.4052334 9.127828e-08   0.01250279 1.721067e-07 1.163755e-16
-## Gene5 556.8580925 8.854150e+01  67.68883291 1.097594e-06 1.449732e+01</code></pre>
-<p>An additional (big) advantage of outputting an <code>SCESet</code> is that we get immediate access to all of the <code>scater</code> functions. For example we can make a PCA plot:</p>
-<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plotPCA</span>(sim)</code></pre></div>
+<span class="kw">assays</span>(sim)<span class="op">$</span>CellMeans[<span class="dv">1</span><span class="op">:</span><span class="dv">5</span>, <span class="dv">1</span><span class="op">:</span><span class="dv">5</span>]</code></pre></div>
+<pre><code>##              Cell1        Cell2      Cell3        Cell4        Cell5
+## Gene1 4.400164e-01 6.304542e-02 1.10406696 8.139464e-10 2.335664e+01
+## Gene2 2.526252e+04 1.595860e+02 0.03470768 2.065810e+01 6.231519e-02
+## Gene3 1.899993e+02 1.229909e+02 1.03528470 4.606624e-03 1.921180e-06
+## Gene4 1.421395e+01 5.383794e-10 0.34678991 7.669389e-03 2.339044e-18
+## Gene5 3.522450e-87 2.621383e-03 0.01039596 3.410733e-82 1.870620e-46</code></pre>
+<p>An additional (big) advantage of outputting a <code>SingleCellExperiment</code> is that we get immediate access to other analysis packages, such as the plotting functions in <code>scater</code>. For example we can make a PCA plot:</p>
+<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plotPCA</span>(sim, <span class="dt">exprs_values =</span> <span class="st">"counts"</span>)</code></pre></div>
 <p><img src="splatter_files/figure-html/pca-1.png" width="576" style="display: block; margin: auto;"></p>
 <p>(<strong>NOTE:</strong> Your values and plots may look different as the simulation is random and produces different results each time it is run.)</p>
-<p>For more details of the <code>SCESet</code> and what you can do with <code>scater</code> refer to the <code>scater</code> documentation and <a href="https://bioconductor.org/packages/release/bioc/vignettes/scater/inst/doc/vignette.html">vignette</a>.</p>
+<p>For more details about the <code>SingleCellExperiment</code> object refer to the <a href="https://bioconductor.org/packages/devel/bioc/vignettes/SingleCellExperiment/inst/doc/intro.html">vignette</a>. For information about what you can do with <code>scater</code> refer to the <code>scater</code> documentation and <a href="https://bioconductor.org/packages/release/bioc/vignettes/scater/inst/doc/vignette.html">vignette</a>.</p>
 <p>The <code>splatSimulate</code> function outputs the following additional information about the simulation:</p>
 <ul>
 <li>
@@ -565,7 +593,7 @@ sc_example_counts[<span class="dv">1</span><span class="op">:</span><span class=
 </ul>
 </li>
 </ul>
-<p>Values that have been added by Splatter are named using <code>UpperCamelCase</code> to separate them from the <code>underscore_naming</code> used by <code>scater</code>. For more information on the simulation see <code><a href="../reference/splatSimulate.html">?splatSimulate</a></code>.</p>
+<p>Values that have been added by Splatter are named using <code>UpperCamelCase</code> to separate them from the <code>underscore_naming</code> used by <code>scater</code> and other packages. For more information on the simulation see <code><a href="../reference/splatSimulate.html">?splatSimulate</a></code>.</p>
 <div id="simulating-groups" class="section level2">
 <h2 class="hasAnchor">
 <a href="#simulating-groups" class="anchor"></a>Simulating groups</h2>
@@ -573,7 +601,7 @@ sc_example_counts[<span class="dv">1</span><span class="op">:</span><span class=
 <p>(<strong>NOTE:</strong> We have also set the <code>verbose</code> argument to <code>FALSE</code> to stop Splatter printing progress messages.)</p>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">sim.groups &lt;-<span class="st"> </span><span class="kw"><a href="../reference/splatSimulate.html">splatSimulate</a></span>(<span class="dt">group.prob =</span> <span class="kw">c</span>(<span class="fl">0.5</span>, <span class="fl">0.5</span>), <span class="dt">method =</span> <span class="st">"groups"</span>,
                             <span class="dt">verbose =</span> <span class="ot">FALSE</span>)
-<span class="kw">plotPCA</span>(sim.groups, <span class="dt">colour_by =</span> <span class="st">"Group"</span>)</code></pre></div>
+<span class="kw">plotPCA</span>(sim.groups, <span class="dt">colour_by =</span> <span class="st">"Group"</span>, <span class="dt">exprs_values =</span> <span class="st">"counts"</span>)</code></pre></div>
 <p><img src="splatter_files/figure-html/groups-1.png" width="576" style="display: block; margin: auto;"></p>
 <p>As we have set both the group probabilites to 0.5 we should get approximately equal numbers of cells in each group (around 50 in this case). If we wanted uneven groups we could set <code>group.prob</code> to any set of probabilites that sum to 1.</p>
 </div>
@@ -582,7 +610,7 @@ sc_example_counts[<span class="dv">1</span><span class="op">:</span><span class=
 <a href="#simulating-paths" class="anchor"></a>Simulating paths</h2>
 <p>The other situation that is often of interest is a differentiation process where one cell type is changing into another. Splatter approximates this process by simulating a series of steps between two groups and randomly assigning each cell to a step. We can create this kind of simulation using the <code>"paths"</code> method.</p>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">sim.paths &lt;-<span class="st"> </span><span class="kw"><a href="../reference/splatSimulate.html">splatSimulate</a></span>(<span class="dt">method =</span> <span class="st">"paths"</span>, <span class="dt">verbose =</span> <span class="ot">FALSE</span>)
-<span class="kw">plotPCA</span>(sim.paths, <span class="dt">colour_by =</span> <span class="st">"Step"</span>)</code></pre></div>
+<span class="kw">plotPCA</span>(sim.paths, <span class="dt">colour_by =</span> <span class="st">"Step"</span>, <span class="dt">exprs_values =</span> <span class="st">"counts"</span>)</code></pre></div>
 <p><img src="splatter_files/figure-html/paths-1.png" width="576" style="display: block; margin: auto;"></p>
 <p>Here the colours represent the “step” of each cell or how far along the differentiation path it is. We can see that the cells with dark colours are more similar to the originating cell type and the light coloured cells are closer to the final, differentiated, cell type. By setting additional parameters it is possible to simulate more complex process (for example multiple mature cell types from a single progenitor).</p>
 </div>
@@ -591,12 +619,13 @@ sc_example_counts[<span class="dv">1</span><span class="op">:</span><span class=
 <a href="#batch-effects" class="anchor"></a>Batch effects</h2>
 <p>Another factor that is important in the analysis of any sequencing experiment are batch effects, technical variation that is common to a set of samples processed at the same time. We apply batch effects by telling Splatter how many cells are in each batch:</p>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">sim.batches &lt;-<span class="st"> </span><span class="kw"><a href="../reference/splatSimulate.html">splatSimulate</a></span>(<span class="dt">batchCells =</span> <span class="kw">c</span>(<span class="dv">50</span>, <span class="dv">50</span>), <span class="dt">verbose =</span> <span class="ot">FALSE</span>)
-<span class="kw">plotPCA</span>(sim.batches, <span class="dt">colour_by =</span> <span class="st">"Batch"</span>)</code></pre></div>
+<span class="kw">plotPCA</span>(sim.batches, <span class="dt">colour_by =</span> <span class="st">"Batch"</span>, <span class="dt">exprs_values =</span> <span class="st">"counts"</span>)</code></pre></div>
 <p><img src="splatter_files/figure-html/batches-1.png" width="576" style="display: block; margin: auto;"></p>
 <p>This looks at lot like when we simulated groups and that is because the process is very similar. The difference is that batch effects are applied to all genes, not just those that are differentially expressed, and the effects are usually smaller. By combining groups and batches we can simulate both unwanted variation that we aren’t interested in (batch) and the wanted variation we are looking for (group):</p>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">sim.groups &lt;-<span class="st"> </span><span class="kw"><a href="../reference/splatSimulate.html">splatSimulate</a></span>(<span class="dt">batchCells =</span> <span class="kw">c</span>(<span class="dv">50</span>, <span class="dv">50</span>), <span class="dt">group.prob =</span> <span class="kw">c</span>(<span class="fl">0.5</span>, <span class="fl">0.5</span>),
                             <span class="dt">method =</span> <span class="st">"groups"</span>, <span class="dt">verbose =</span> <span class="ot">FALSE</span>)
-<span class="kw">plotPCA</span>(sim.groups, <span class="dt">shape_by =</span> <span class="st">"Batch"</span>, <span class="dt">colour_by =</span> <span class="st">"Group"</span>)</code></pre></div>
+<span class="kw">plotPCA</span>(sim.groups, <span class="dt">shape_by =</span> <span class="st">"Batch"</span>, <span class="dt">colour_by =</span> <span class="st">"Group"</span>,
+        <span class="dt">exprs_values =</span> <span class="st">"counts"</span>)</code></pre></div>
 <p><img src="splatter_files/figure-html/batch-groups-1.png" width="576" style="display: block; margin: auto;"></p>
 <p>Here we see that the effects of the group (first component) are stronger than the batch effects (second component) but by adjusting the parameters we could made the batch effects dominate.</p>
 </div>
@@ -611,39 +640,43 @@ sc_example_counts[<span class="dv">1</span><span class="op">:</span><span class=
 <a href="#other-simulations" class="anchor"></a>Other simulations</h1>
 <p>As well as it’s own Splat simulation method the Splatter package contains implementations of other single-cell RNA-seq simulations that have been published or wrappers around simulations included in other packages. To see all the available simulations run the <code><a href="../reference/listSims.html">listSims()</a></code> function:</p>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw"><a href="../reference/listSims.html">listSims</a></span>()</code></pre></div>
-<pre><code>## Splatter currently contains 8 simulations 
+<pre><code>## Splatter currently contains 9 simulations 
 ## 
 ## Splat (splat) 
-## DOI:      Github:  
-## The Splat simulation generates means from a gamma distribution, adjusts them for BCV and generates counts from a gamma-poisson. Dropout can be optionally added. 
+## DOI:      GitHub:  
+## The Splat simulation generates means from a gamma distribution, adjusts them for BCV and generates counts from a gamma-poisson. Dropout and batch effects can be optionally added. 
 ## 
 ## Splat Single (splatSingle) 
-## DOI:      Github:  
+## DOI:      GitHub:  
 ## The Splat simulation with a single population. 
 ## 
 ## Splat Groups (splatGroups) 
-## DOI:      Github:  
+## DOI:      GitHub:  
 ## The Splat simulation with multiple groups. Each group can have it's own differential expression probability and fold change distribution. 
 ## 
 ## Splat Paths (splatPaths) 
-## DOI:      Github:  
+## DOI:      GitHub:  
 ## The Splat simulation with differentiation paths. Each path can have it's own length, skew and probability. Genes can change in non-linear ways. 
 ## 
 ## Simple (simple) 
-## DOI:      Github:  
+## DOI:      GitHub:  
 ## A simple simulation with gamma means and negative binomial counts. 
 ## 
 ## Lun (lun) 
-## DOI: 10.1186/s13059-016-0947-7    Github: MarioniLab/Deconvolution2016 
+## DOI: 10.1186/s13059-016-0947-7    GitHub: MarioniLab/Deconvolution2016 
 ## Gamma distributed means and negative binomial counts. Cells are given a size factor and differential expression can be simulated with fixed fold changes. 
 ## 
 ## Lun 2 (lun2) 
-## DOI: 10.1101/073973   Github: MarioniLab/PlateEffects2016 
+## DOI: 10.1101/073973   GitHub: MarioniLab/PlateEffects2016 
 ## Negative binomial counts where the means and dispersions have been sampled from a real dataset. The core feature of the Lun 2 simulation is the addition of plate effects. Differential expression can be added between two groups of plates and optionally a zero-inflated negative-binomial can be used. 
 ## 
 ## scDD (scDD) 
-## DOI: 10.1186/s13059-016-1077-y    Github: kdkorthauer/scDD 
-## The scDD simulation samples a given dataset and can simulate differentially expressed and differentially distributed genes between two conditions.</code></pre>
+## DOI: 10.1186/s13059-016-1077-y    GitHub: kdkorthauer/scDD 
+## The scDD simulation samples a given dataset and can simulate differentially expressed and differentially distributed genes between two conditions. 
+## 
+## mfa (mfa) 
+## DOI: 10.12688/wellcomeopenres.11087.1     GitHub: kieranrcampbell/mfa 
+## The mfa simulation produces a bifurcating pseudotime trajectory. This can optionally include genes with transient changes in expression and added dropout.</code></pre>
 <p>(or more conveniently for the vignette as a table)</p>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">knitr<span class="op">::</span><span class="kw"><a href="http://www.rdocumentation.org/packages/knitr/topics/kable">kable</a></span>(<span class="kw"><a href="../reference/listSims.html">listSims</a></span>(<span class="dt">print =</span> <span class="ot">FALSE</span>))</code></pre></div>
 <table class="table">
@@ -651,7 +684,7 @@ sc_example_counts[<span class="dv">1</span><span class="op">:</span><span class=
 <th align="left">Name</th>
 <th align="left">Prefix</th>
 <th align="left">DOI</th>
-<th align="left">Github</th>
+<th align="left">GitHub</th>
 <th align="left">Description</th>
 </tr></thead>
 <tbody>
@@ -660,7 +693,7 @@ sc_example_counts[<span class="dv">1</span><span class="op">:</span><span class=
 <td align="left">splat</td>
 <td align="left"></td>
 <td align="left"></td>
-<td align="left">The Splat simulation generates means from a gamma distribution, adjusts them for BCV and generates counts from a gamma-poisson. Dropout can be optionally added.</td>
+<td align="left">The Splat simulation generates means from a gamma distribution, adjusts them for BCV and generates counts from a gamma-poisson. Dropout and batch effects can be optionally added.</td>
 </tr>
 <tr class="even">
 <td align="left">Splat Single</td>
@@ -711,42 +744,51 @@ sc_example_counts[<span class="dv">1</span><span class="op">:</span><span class=
 <td align="left">kdkorthauer/scDD</td>
 <td align="left">The scDD simulation samples a given dataset and can simulate differentially expressed and differentially distributed genes between two conditions.</td>
 </tr>
+<tr class="odd">
+<td align="left">mfa</td>
+<td align="left">mfa</td>
+<td align="left">10.12688/wellcomeopenres.11087.1</td>
+<td align="left">kieranrcampbell/mfa</td>
+<td align="left">The mfa simulation produces a bifurcating pseudotime trajectory. This can optionally include genes with transient changes in expression and added dropout.</td>
+</tr>
 </tbody>
 </table>
-<p>Each simulation has it’s own prefix which gives the name of the functions associated with that simulation. For example the prefix for the simple simulation is <code>simple</code> so it would store it’s parameters in a <code>SimpleParams</code> object that can be created using <code><a href="../reference/newParams.html">newSimpleParams()</a></code> or estimated from real data using <code><a href="../reference/simpleEstimate.html">simpleEstimate()</a></code>. To simulate data using that simulation you would use <code><a href="../reference/simpleSimulate.html">simpleSimulate()</a></code>. Each simulation returns an <code>SCESet</code> object with intermediate values similar to that returned by <code><a href="../reference/splatSimulate.html">splatSimulate()</a></code>. For more detailed information on each simulation see the appropriate help page (eg. <code><a href="../reference/simpleSimulate.html">?simpleSimulate</a></code> for information on how the simple simulation works or <code><a href="../reference/lun2Estimate.html">?lun2Estimate</a></code> for details of how the Lun 2 simulation estimates parameters) or refer to the appropriate paper or package.</p>
+<p>Each simulation has it’s own prefix which gives the name of the functions associated with that simulation. For example the prefix for the simple simulation is <code>simple</code> so it would store it’s parameters in a <code>SimpleParams</code> object that can be created using <code><a href="../reference/newParams.html">newSimpleParams()</a></code> or estimated from real data using <code><a href="../reference/simpleEstimate.html">simpleEstimate()</a></code>. To simulate data using that simulation you would use <code><a href="../reference/simpleSimulate.html">simpleSimulate()</a></code>. Each simulation returns a <code>SingleCellExperiment</code> object with intermediate values similar to that returned by <code><a href="../reference/splatSimulate.html">splatSimulate()</a></code>. For more detailed information on each simulation see the appropriate help page (eg. <code><a href="../reference/simpleSimulate.html">?simpleSimulate</a></code> for information on how the simple simulation works or <code><a href="../reference/lun2Estimate.html">? lun2Estimate</a></code> for details of how the Lun 2 simulation estimates parameters) or refer to the appropriate paper or package.</p>
 </div>
 <div id="other-expression-values" class="section level1">
 <h1 class="hasAnchor">
 <a href="#other-expression-values" class="anchor"></a>Other expression values</h1>
-<p>Splatter is designed to simulate count data but some analysis methods expect other expression values, particularly length-normalised values such as TPM or FPKM. The <code>scater</code> package has functions for adding these values to an <code>SCESet</code> object but they require a length for each gene. The <code>addGeneLengths</code> can be used to simulate these lengths:</p>
+<p>Splatter is designed to simulate count data but some analysis methods expect other expression values, particularly length-normalised values such as TPM or FPKM. The <code>scater</code> package has functions for adding these values to a <code>SingleCellExperiment</code> object but they require a length for each gene. The <code>addGeneLengths</code> function can be used to simulate these lengths:</p>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">sim &lt;-<span class="st"> </span><span class="kw"><a href="../reference/simpleSimulate.html">simpleSimulate</a></span>(<span class="dt">verbose =</span> <span class="ot">FALSE</span>)
 sim &lt;-<span class="st"> </span><span class="kw"><a href="../reference/addGeneLengths.html">addGeneLengths</a></span>(sim)
-<span class="kw">head</span>(<span class="kw">fData</span>(sim))</code></pre></div>
-<pre><code>##        Gene     GeneMean Length
-## Gene1 Gene1 0.0002067453   1694
-## Gene2 Gene2 0.2420681809   1908
-## Gene3 Gene3 1.1117145796   6058
-## Gene4 Gene4 0.1920623085  15962
-## Gene5 Gene5 0.1872010591   3664
-## Gene6 Gene6 0.2867576121  12947</code></pre>
+<span class="kw">head</span>(<span class="kw">rowData</span>(sim))</code></pre></div>
+<pre><code>## DataFrame with 6 rows and 3 columns
+##       Gene   GeneMean    Length
+##   &lt;factor&gt;  &lt;numeric&gt; &lt;numeric&gt;
+## 1    Gene1 1.60506942      1775
+## 2    Gene2 2.17500094      4361
+## 3    Gene3 1.16851643      2915
+## 4    Gene4 0.01040965     16794
+## 5    Gene5 0.06781127       948
+## 6    Gene6 3.03114500      3089</code></pre>
 <p>We can then use <code>scater</code> to calculate TPM:</p>
-<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">tpm</span>(sim) &lt;-<span class="st"> </span><span class="kw">calculateTPM</span>(sim, <span class="kw">fData</span>(sim)<span class="op">$</span>Length)
+<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">tpm</span>(sim) &lt;-<span class="st"> </span><span class="kw">calculateTPM</span>(sim, <span class="kw">rowData</span>(sim)<span class="op">$</span>Length)
 <span class="kw">tpm</span>(sim)[<span class="dv">1</span><span class="op">:</span><span class="dv">5</span>, <span class="dv">1</span><span class="op">:</span><span class="dv">5</span>]</code></pre></div>
-<pre><code>##          Cell1 Cell2    Cell3    Cell4 Cell5
-## Gene1  0.00000     0  0.00000  0.00000     0
-## Gene2  0.00000     0  0.00000  0.00000     0
-## Gene3 53.00124     0 26.08949 53.40399     0
-## Gene4  0.00000     0  0.00000  0.00000     0
-## Gene5 43.81571     0 43.13596  0.00000     0</code></pre>
+<pre><code>##            Cell1      Cell2      Cell3      Cell4      Cell5
+## Gene1 0.08215535 0.04069785 0.08360619 0.08404271 0.08403017
+## Gene2 0.03343860 0.01656470 0.13611647 0.00000000 0.06840337
+## Gene3 0.00000000 0.02478171 0.05090943 0.02558762 0.02558380
+## Gene4 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+## Gene5 0.00000000 0.07620114 0.00000000 0.00000000 0.00000000</code></pre>
 <p>The default method used by <code>addGeneLengths</code> to simulate lengths is to generate values from a log-normal distribution which are then rounded to give an integer length. The parameters for this distribution are based on human protein coding genes but can be adjusted if needed (for example for other species). Alternatively lengths can be sampled from a provided vector (see <code><a href="../reference/addGeneLengths.html">?addGeneLengths</a></code> for details and an example).</p>
 </div>
 <div id="comparing-simulations-and-real-data" class="section level1">
 <h1 class="hasAnchor">
 <a href="#comparing-simulations-and-real-data" class="anchor"></a>Comparing simulations and real data</h1>
-<p>One thing you might like to do after simulating data is to compare it to a real dataset, or compare simulations with different parameters or models. Splatter provides a function <code>compareSCESets</code> that aims to make these comparisons easier. As the name suggests this function takes a list of <code>SCESet</code> objects, combines the datasets and produces some plots comparing them. Let’s make two small simulations and see how they compare.</p>
+<p>One thing you might like to do after simulating data is to compare it to a real dataset, or compare simulations with different parameters or models. Splatter provides a function <code>compareSCEs</code> that aims to make these comparisons easier. As the name suggests this function takes a list of <code>SingleCellExperiment</code> objects, combines the datasets and produces some plots comparing them. Let’s make two small simulations and see how they compare.</p>
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">sim1 &lt;-<span class="st"> </span><span class="kw"><a href="../reference/splatSimulate.html">splatSimulate</a></span>(<span class="dt">nGenes =</span> <span class="dv">1000</span>, <span class="dt">batchCells =</span> <span class="dv">20</span>, <span class="dt">verbose =</span> <span class="ot">FALSE</span>)
 sim2 &lt;-<span class="st"> </span><span class="kw"><a href="../reference/simpleSimulate.html">simpleSimulate</a></span>(<span class="dt">nGenes =</span> <span class="dv">1000</span>, <span class="dt">nCells =</span> <span class="dv">20</span>, <span class="dt">verbose =</span> <span class="ot">FALSE</span>)
-comparison &lt;-<span class="st"> </span><span class="kw"><a href="../reference/compareSCESets.html">compareSCESets</a></span>(<span class="kw">list</span>(<span class="dt">Splat =</span> sim1, <span class="dt">Simple =</span> sim2))
+comparison &lt;-<span class="st"> </span><span class="kw"><a href="../reference/compareSCEs.html">compareSCEs</a></span>(<span class="kw">list</span>(<span class="dt">Splat =</span> sim1, <span class="dt">Simple =</span> sim2))
 
 <span class="kw">names</span>(comparison)</code></pre></div>
 <pre><code>## [1] "FeatureData" "PhenoData"   "Plots"</code></pre>
@@ -765,8 +807,8 @@ comparison &lt;-<span class="st"> </span><span class="kw"><a href="../reference/
 <div id="comparing-differences" class="section level2">
 <h2 class="hasAnchor">
 <a href="#comparing-differences" class="anchor"></a>Comparing differences</h2>
-<p>Sometimes instead of visually comparing datasets it may be more interesting to look at the differences between them. We can do this using the <code>diffSCESets</code> function. Similar to <code>compareSCESets</code> this function takes a list of <code>SCESet</code> objects but now we also specify one to be a reference. A series of similar plots are returned but instead of showing the overall distributions they demonstrate differences from the reference.</p>
-<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">difference &lt;-<span class="st"> </span><span class="kw"><a href="../reference/diffSCESets.html">diffSCESets</a></span>(<span class="kw">list</span>(<span class="dt">Splat =</span> sim1, <span class="dt">Simple =</span> sim2), <span class="dt">ref =</span> <span class="st">"Simple"</span>)
+<p>Sometimes instead of visually comparing datasets it may be more interesting to look at the differences between them. We can do this using the <code>diffSCEs</code> function. Similar to <code>compareSCEs</code> this function takes a list of <code>SingleCellExperiment</code> objects but now we also specify one to be a reference. A series of similar plots are returned but instead of showing the overall distributions they demonstrate differences from the reference.</p>
+<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">difference &lt;-<span class="st"> </span><span class="kw"><a href="../reference/diffSCEs.html">diffSCEs</a></span>(<span class="kw">list</span>(<span class="dt">Splat =</span> sim1, <span class="dt">Simple =</span> sim2), <span class="dt">ref =</span> <span class="st">"Simple"</span>)
 difference<span class="op">$</span>Plots<span class="op">$</span>Means</code></pre></div>
 <p><img src="splatter_files/figure-html/difference-1.png" width="576" style="display: block; margin: auto;"></p>
 <p>We also get a series of Quantile-Quantile plot that can be used to compare distributions.</p>
@@ -816,7 +858,7 @@ cowplot<span class="op">::</span><span class="kw"><a href="http://www.rdocumenta
 <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">sessionInfo</span>()</code></pre></div>
 <pre><code>## R version 3.4.1 (2017-06-30)
 ## Platform: x86_64-apple-darwin15.6.0 (64-bit)
-## Running under: macOS Sierra 10.12.5
+## Running under: macOS Sierra 10.12.6
 ## 
 ## Matrix products: default
 ## BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
@@ -826,56 +868,58 @@ cowplot<span class="op">::</span><span class="kw"><a href="http://www.rdocumenta
 ## [1] en_AU.UTF-8/en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8
 ## 
 ## attached base packages:
-## [1] parallel  stats     graphics  grDevices utils     datasets  methods  
-## [8] base     
+## [1] stats4    parallel  stats     graphics  grDevices utils     datasets 
+## [8] methods   base     
 ## 
 ## other attached packages:
-## [1] splatter_1.1.4      scater_1.4.0        ggplot2_2.2.1      
-## [4] Biobase_2.36.2      BiocGenerics_0.22.0
+##  [1] splatter_1.1.6              scater_1.5.16              
+##  [3] SingleCellExperiment_0.99.4 SummarizedExperiment_1.7.10
+##  [5] DelayedArray_0.3.21         matrixStats_0.52.2         
+##  [7] GenomicRanges_1.29.14       GenomeInfoDb_1.13.4        
+##  [9] IRanges_2.11.17             S4Vectors_0.15.10          
+## [11] ggplot2_2.2.1.9000          Biobase_2.37.2             
+## [13] BiocGenerics_0.23.2        
 ## 
 ## loaded via a namespace (and not attached):
-##  [1] viridis_0.4.0              edgeR_3.18.1              
-##  [3] splines_3.4.1              bit64_0.9-7               
-##  [5] viridisLite_0.2.0          shiny_1.0.3               
-##  [7] assertthat_0.2.0           highr_0.6                 
-##  [9] sp_1.2-5                   stats4_3.4.1              
-## [11] blob_1.1.0                 GenomeInfoDbData_0.99.0   
-## [13] vipor_0.4.5                yaml_2.1.14               
-## [15] RSQLite_2.0                backports_1.1.0           
-## [17] lattice_0.20-35            glue_1.1.1                
-## [19] limma_3.32.4               digest_0.6.12             
-## [21] XVector_0.16.0             GenomicRanges_1.28.4      
-## [23] checkmate_1.8.3            colorspace_1.3-2          
-## [25] cowplot_0.7.0              htmltools_0.3.6           
-## [27] httpuv_1.3.5               Matrix_1.2-10             
-## [29] plyr_1.8.4                 XML_3.98-1.9              
-## [31] pkgconfig_2.0.1            biomaRt_2.32.1            
-## [33] zlibbioc_1.22.0            xtable_1.8-2              
-## [35] scales_0.4.1               BiocParallel_1.10.1       
-## [37] tibble_1.3.3               IRanges_2.10.2            
-## [39] SummarizedExperiment_1.6.3 lazyeval_0.2.0            
-## [41] survival_2.41-3            magrittr_1.5              
-## [43] mime_0.5                   memoise_1.1.0             
-## [45] evaluate_0.10.1            MASS_7.3-47               
-## [47] beeswarm_0.2.3             shinydashboard_0.6.1      
-## [49] fitdistrplus_1.0-9         tools_3.4.1               
-## [51] data.table_1.10.4          matrixStats_0.52.2        
-## [53] stringr_1.2.0              S4Vectors_0.14.3          
-## [55] munsell_0.4.3              locfit_1.5-9.1            
-## [57] DelayedArray_0.2.7         AnnotationDbi_1.38.1      
-## [59] bindrcpp_0.2               akima_0.6-2               
-## [61] compiler_3.4.1             GenomeInfoDb_1.12.2       
-## [63] rlang_0.1.1.9000           rhdf5_2.20.0              
-## [65] grid_3.4.1                 RCurl_1.95-4.8            
-## [67] tximport_1.4.0             rjson_0.2.15              
-## [69] labeling_0.3               bitops_1.0-6              
-## [71] rmarkdown_1.6              gtable_0.2.0              
-## [73] DBI_0.7                    reshape2_1.4.2            
-## [75] R6_2.2.2                   gridExtra_2.2.1           
-## [77] knitr_1.16                 dplyr_0.7.2               
-## [79] bit_1.1-12                 bindr_0.1                 
-## [81] rprojroot_1.2              stringi_1.1.5             
-## [83] ggbeeswarm_0.5.3           Rcpp_0.12.12</code></pre>
+##  [1] viridis_0.4.0           edgeR_3.19.6           
+##  [3] splines_3.4.1           bit64_0.9-7            
+##  [5] viridisLite_0.2.0       shiny_1.0.5            
+##  [7] assertthat_0.2.0        highr_0.6              
+##  [9] sp_1.2-5                blob_1.1.0             
+## [11] GenomeInfoDbData_0.99.1 vipor_0.4.5            
+## [13] yaml_2.1.14             progress_1.1.2         
+## [15] RSQLite_2.0             backports_1.1.1        
+## [17] lattice_0.20-35         glue_1.1.1             
+## [19] limma_3.33.12           digest_0.6.12          
+## [21] checkmate_1.8.4         XVector_0.17.1         
+## [23] colorspace_1.3-2        cowplot_0.8.0          
+## [25] htmltools_0.3.6         httpuv_1.3.5           
+## [27] Matrix_1.2-11           plyr_1.8.4             
+## [29] XML_3.98-1.9            pkgconfig_2.0.1        
+## [31] biomaRt_2.33.4          zlibbioc_1.23.0        
+## [33] xtable_1.8-2            scales_0.5.0.9000      
+## [35] BiocParallel_1.11.9     tibble_1.3.4           
+## [37] lazyeval_0.2.0          survival_2.41-3        
+## [39] magrittr_1.5            mime_0.5               
+## [41] memoise_1.1.0           evaluate_0.10.1        
+## [43] MASS_7.3-47             beeswarm_0.2.3         
+## [45] shinydashboard_0.6.1    fitdistrplus_1.0-9     
+## [47] tools_3.4.1             data.table_1.10.4      
+## [49] prettyunits_1.0.2       stringr_1.2.0          
+## [51] munsell_0.4.3           locfit_1.5-9.1         
+## [53] AnnotationDbi_1.39.3    bindrcpp_0.2           
+## [55] akima_0.6-2             compiler_3.4.1         
+## [57] rlang_0.1.2             rhdf5_2.21.6           
+## [59] grid_3.4.1              RCurl_1.95-4.8         
+## [61] tximport_1.5.0          rjson_0.2.15           
+## [63] labeling_0.3            bitops_1.0-6           
+## [65] rmarkdown_1.6           gtable_0.2.0           
+## [67] DBI_0.7                 reshape2_1.4.2         
+## [69] R6_2.2.2                gridExtra_2.3          
+## [71] knitr_1.17              dplyr_0.7.4            
+## [73] bit_1.1-12              bindr_0.1              
+## [75] rprojroot_1.2           stringi_1.1.5          
+## [77] ggbeeswarm_0.6.0        Rcpp_0.12.13</code></pre>
 </div>
 </div>
   </div>
diff --git a/docs/articles/splatter_files/figure-html/batch-groups-1.png b/docs/articles/splatter_files/figure-html/batch-groups-1.png
index e557606c542e0f52547b26d0e88c9eded30f90ec..eb42b627b7e8136455b45ee86993b878eac7a3a7 100644
Binary files a/docs/articles/splatter_files/figure-html/batch-groups-1.png and b/docs/articles/splatter_files/figure-html/batch-groups-1.png differ
diff --git a/docs/articles/splatter_files/figure-html/batches-1.png b/docs/articles/splatter_files/figure-html/batches-1.png
index 718d10decb1983163dc2065e8a008e6db8ac1a8d..4b9344af05f6b9605687de4bddbd1aac613606bd 100644
Binary files a/docs/articles/splatter_files/figure-html/batches-1.png and b/docs/articles/splatter_files/figure-html/batches-1.png differ
diff --git a/docs/articles/splatter_files/figure-html/comparison-libsize-features-1.png b/docs/articles/splatter_files/figure-html/comparison-libsize-features-1.png
index 430a0c83ac850cd7b0a0c10d8210405bc8f6f58c..f7ca97f026a258d82f90d4f243174e22f56fcce7 100644
Binary files a/docs/articles/splatter_files/figure-html/comparison-libsize-features-1.png and b/docs/articles/splatter_files/figure-html/comparison-libsize-features-1.png differ
diff --git a/docs/articles/splatter_files/figure-html/comparison-means-1.png b/docs/articles/splatter_files/figure-html/comparison-means-1.png
index 33713811bc6087e6705852520145fc1e54f39141..40c48bd74482a195f1ffedb3beb0623fb60d782d 100644
Binary files a/docs/articles/splatter_files/figure-html/comparison-means-1.png and b/docs/articles/splatter_files/figure-html/comparison-means-1.png differ
diff --git a/docs/articles/splatter_files/figure-html/difference-1.png b/docs/articles/splatter_files/figure-html/difference-1.png
index 0e35a3d035be67d1a57ae6ee3a74e5a9164d83c2..b3bb741a1b4e1983deeedaf696b1a4af65a8269d 100644
Binary files a/docs/articles/splatter_files/figure-html/difference-1.png and b/docs/articles/splatter_files/figure-html/difference-1.png differ
diff --git a/docs/articles/splatter_files/figure-html/difference-qq-1.png b/docs/articles/splatter_files/figure-html/difference-qq-1.png
index a68f8138376c01d57b408848e3c8f7f253c86a7d..28f9ce1fffccee41940cb797ef67850953ca6e6f 100644
Binary files a/docs/articles/splatter_files/figure-html/difference-qq-1.png and b/docs/articles/splatter_files/figure-html/difference-qq-1.png differ
diff --git a/docs/articles/splatter_files/figure-html/groups-1.png b/docs/articles/splatter_files/figure-html/groups-1.png
index cf58b6db7a0befa4964e9ed3c573dba712de8e51..b8ee35813e8da27637fa045af06b3b7b0ac46fa0 100644
Binary files a/docs/articles/splatter_files/figure-html/groups-1.png and b/docs/articles/splatter_files/figure-html/groups-1.png differ
diff --git a/docs/articles/splatter_files/figure-html/paths-1.png b/docs/articles/splatter_files/figure-html/paths-1.png
index 629246216c858aad23c21d244956b1231f41a358..907ccfe91628f011c89b6214cd51b99128358b02 100644
Binary files a/docs/articles/splatter_files/figure-html/paths-1.png and b/docs/articles/splatter_files/figure-html/paths-1.png differ
diff --git a/docs/articles/splatter_files/figure-html/pca-1.png b/docs/articles/splatter_files/figure-html/pca-1.png
index a6dd1b43a30c114a4a1a7245cbf528ed29e9f389..93b1a5792e5960781d2fb1cad254516dccf7586b 100644
Binary files a/docs/articles/splatter_files/figure-html/pca-1.png and b/docs/articles/splatter_files/figure-html/pca-1.png differ
diff --git a/docs/index.html b/docs/index.html
index 42288e4534d83fa81bf8aa40f8630c57bdba6bb7..a0cd79fa1741025aee2fc52ee0ad95dc3e664daa 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -101,7 +101,7 @@ biocLite("splatter")</code></pre>
 <div id="development-version" class="section level3">
 <h3 class="hasAnchor">
 <a href="#development-version" class="anchor"></a>Development version</h3>
-<p>If you want to try the [development version][deve] this can also be installed from Bioconductor:</p>
+<p>If you want to try the <a href="https://bioconductor.org/packages/devel/bioc/html/splatter.html">development version</a> this can also be installed from Bioconductor:</p>
 <pre class="{r}"><code>library(BiocInstaller)
 useDevel()
 biocValid()              # checks for out of date packages
diff --git a/docs/news/index.html b/docs/news/index.html
index a3e2c7ae076827571e59c7c891a768d655ea601e..a33131ead1bdf1d58d7987e3f3ff5774a253791d 100644
--- a/docs/news/index.html
+++ b/docs/news/index.html
@@ -103,6 +103,30 @@
     </div>
 
     <div class="contents">
+    <div id="version-1-1-7-2017-10-05" class="section level2">
+<h2 class="hasAnchor">
+<a href="#version-1-1-7-2017-10-05" class="anchor"></a>Version 1.1.7 (2017-10-05)</h2>
+<ul>
+<li>Add PhenoPath simulation</li>
+<li>Add ZINB-WaVE simulation</li>
+<li>Adjust mfaSimulate output</li>
+</ul>
+</div>
+    <div id="version-1-1-6-2017-10-02" class="section level2">
+<h2 class="hasAnchor">
+<a href="#version-1-1-6-2017-10-02" class="anchor"></a>Version 1.1.6 (2017-10-02)</h2>
+<ul>
+<li>Update scDD version</li>
+<li>Add mfa simulation</li>
+</ul>
+</div>
+    <div id="version-1-1-5-2017-09-13" class="section level2">
+<h2 class="hasAnchor">
+<a href="#version-1-1-5-2017-09-13" class="anchor"></a>Version 1.1.5 (2017-09-13)</h2>
+<ul>
+<li>Convert to SingleCellExperiment</li>
+</ul>
+</div>
     <div id="version-1-1-4-2017-08-04" class="section level2">
 <h2 class="hasAnchor">
 <a href="#version-1-1-4-2017-08-04" class="anchor"></a>Version 1.1.4 (2017-08-04)</h2>
@@ -424,6 +448,9 @@
     <div id="tocnav">
       <h2>Contents</h2>
       <ul class="nav nav-pills nav-stacked">
+        <li><a href="#version-1-1-7-2017-10-05">1.1.7</a></li>
+        <li><a href="#version-1-1-6-2017-10-02">1.1.6</a></li>
+        <li><a href="#version-1-1-5-2017-09-13">1.1.5</a></li>
         <li><a href="#version-1-1-4-2017-08-04">1.1.4</a></li>
         <li><a href="#version-1-1-3-2017-07-20">1.1.3</a></li>
         <li><a href="#version-1-1-2-2017-07-16">1.1.2</a></li>
diff --git a/docs/reference/MFAParams.html b/docs/reference/MFAParams.html
new file mode 100644
index 0000000000000000000000000000000000000000..0038585a753d6c7dbff932a21cf636aadb211748
--- /dev/null
+++ b/docs/reference/MFAParams.html
@@ -0,0 +1,155 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>The MFAParams class — MFAParams • Splatter</title>
+
+<!-- jquery -->
+<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
+
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
+
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../jquery.sticky-kit.min.js"></script>
+<script src="../pkgdown.js"></script>
+  <link href="../extra.css" rel="stylesheet">
+  
+<!-- mathjax -->
+<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+<!-- Google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-52309538-4', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+  </head>
+
+  <body>
+    <div class="container template-reference-topic">
+      <header>
+      <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="../index.html">splatter</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav">
+        <li>
+  <a href="..//index.html">
+    <span class="fa fa-home fa-lg"></span>
+     
+  </a>
+</li>
+<li>
+  <a href="../articles/splatter.html">Get Started</a>
+</li>
+<li>
+  <a href="../reference/index.html">Reference</a>
+</li>
+<li>
+  <a href="../news/index.html">News</a>
+</li>
+      </ul>
+      
+      <ul class="nav navbar-nav navbar-right">
+        <li>
+  <a href="https://github.com/Oshlack/splatter">
+    <span class="fa fa-github fa-lg"></span>
+     
+  </a>
+</li>
+      </ul>
+    </div><!--/.nav-collapse -->
+  </div><!--/.container -->
+</div><!--/.navbar -->
+
+      
+      </header>
+
+      <div class="row">
+  <div class="col-md-9 contents">
+    <div class="page-header">
+    <h1>The MFAParams class</h1>
+    </div>
+
+    
+    <p>S4 class that holds parameters for the mfa simulation.</p>
+    
+
+        
+    <h2 class="hasAnchor" id="parameters"><a class="anchor" href="#parameters"></a>Parameters</h2>
+
+    
+    <p>The mfa simulation uses the following parameters:</p><dl class='dl-horizontal'>
+    <dt><code>nGenes</code></dt><dd><p>The number of genes to simulate.</p></dd>
+    <dt><code>nCells</code></dt><dd><p>The number of cells to simulate.</p></dd>
+    <dt><code>[seed]</code></dt><dd><p>Seed to use for generating random numbers.</p></dd>
+    <dt><code>[trans.prop]</code></dt><dd><p>Proportion of genes that show transient
+    expression. These genes are briefly up or down-regulated before returning
+    to their initial state</p></dd>
+    <dt><code>[zero.neg]</code></dt><dd><p>Logical. Whether to set negative expression
+    values to zero. This will zero-inflate the data.</p></dd>
+    <dt><code>[dropout.present]</code></dt><dd><p>Logical. Whether to simulate dropout.</p></dd>
+    <dt><code>dropout.lambda</code></dt><dd><p>Lambda parameter for the exponential
+    dropout function.</p></dd>
+</dl>
+    <p>The parameters not shown in brackets can be estimated from real data using
+<code><a href='mfaEstimate.html'>mfaEstimate</a></code>. See <code><a href='http://www.rdocumentation.org/packages/mfa/topics/create_synthetic'>create_synthetic</a></code> for more
+details about the parameters. For details of the Splatter implementation of
+the mfa simulation see <code><a href='mfaSimulate.html'>mfaSimulate</a></code>.</p>
+    
+
+  </div>
+  <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+    <h2>Contents</h2>
+    <ul class="nav nav-pills nav-stacked">
+      
+      <li><a href="#parameters">Parameters</a></li>
+          </ul>
+
+  </div>
+</div>
+
+      <footer>
+      <div class="copyright">
+  <p>Developed by Luke Zappia, Belinda Phipson, Alicia Oshlack.</p>
+</div>
+
+<div class="pkgdown">
+  <p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
+</div>
+
+      </footer>
+   </div>
+
+  </body>
+</html>
diff --git a/docs/reference/Params.html b/docs/reference/Params.html
index 46b9953219369bad302f5cdedc15c0d1f7e8dcce..219c8cd2239ac9e15df1b1ece80087a794775bf8 100644
--- a/docs/reference/Params.html
+++ b/docs/reference/Params.html
@@ -110,11 +110,11 @@
 
     
     <p>The Params class defines the following parameters:</p><dl class='dl-horizontal'>
-    <dt><code>[nGenes]</code></dt><dd><p>The number of genes to simulate.</p></dd>
-    <dt><code>[nCells]</code></dt><dd><p>The number of cells to simulate.</p></dd>
-    <dt><code>seed</code></dt><dd><p>Seed to use for generating random numbers.</p></dd>
+    <dt><code>nGenes</code></dt><dd><p>The number of genes to simulate.</p></dd>
+    <dt><code>nCells</code></dt><dd><p>The number of cells to simulate.</p></dd>
+    <dt><code>[seed]</code></dt><dd><p>Seed to use for generating random numbers.</p></dd>
 </dl>
-    <p>The parameters shown in brackets can be estimated from real data.</p>
+    <p>The parameters not shown in brackets can be estimated from real data.</p>
     
 
   </div>
diff --git a/docs/reference/PhenoParams.html b/docs/reference/PhenoParams.html
new file mode 100644
index 0000000000000000000000000000000000000000..79dce00cb9cb926c15759b34cfa0740bcdefcd10
--- /dev/null
+++ b/docs/reference/PhenoParams.html
@@ -0,0 +1,154 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>The PhenoParams class — PhenoParams • Splatter</title>
+
+<!-- jquery -->
+<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
+
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
+
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../jquery.sticky-kit.min.js"></script>
+<script src="../pkgdown.js"></script>
+  <link href="../extra.css" rel="stylesheet">
+  
+<!-- mathjax -->
+<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+<!-- Google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-52309538-4', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+  </head>
+
+  <body>
+    <div class="container template-reference-topic">
+      <header>
+      <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="../index.html">splatter</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav">
+        <li>
+  <a href="..//index.html">
+    <span class="fa fa-home fa-lg"></span>
+     
+  </a>
+</li>
+<li>
+  <a href="../articles/splatter.html">Get Started</a>
+</li>
+<li>
+  <a href="../reference/index.html">Reference</a>
+</li>
+<li>
+  <a href="../news/index.html">News</a>
+</li>
+      </ul>
+      
+      <ul class="nav navbar-nav navbar-right">
+        <li>
+  <a href="https://github.com/Oshlack/splatter">
+    <span class="fa fa-github fa-lg"></span>
+     
+  </a>
+</li>
+      </ul>
+    </div><!--/.nav-collapse -->
+  </div><!--/.container -->
+</div><!--/.navbar -->
+
+      
+      </header>
+
+      <div class="row">
+  <div class="col-md-9 contents">
+    <div class="page-header">
+    <h1>The PhenoParams class</h1>
+    </div>
+
+    
+    <p>S4 class that holds parameters for the PhenoPath simulation.</p>
+    
+
+        
+    <h2 class="hasAnchor" id="parameters"><a class="anchor" href="#parameters"></a>Parameters</h2>
+
+    
+    <p>The PhenoPath simulation uses the following parameters:</p><dl class='dl-horizontal'>
+    <dt><code>nGenes</code></dt><dd><p>The number of genes to simulate.</p></dd>
+    <dt><code>nCells</code></dt><dd><p>The number of cells to simulate.</p></dd>
+    <dt><code>[seed]</code></dt><dd><p>Seed to use for generating random numbers.</p></dd>
+    <dt><code>[n.de]</code></dt><dd><p>Number of genes to simulate from the differential
+    expression regime</p></dd>
+    <dt><code>[n.pst]</code></dt><dd><p>Number of genes to simulate from the pseudotime
+    regime</p></dd>
+    <dt><code>[n.pst.beta]</code></dt><dd><p>Number of genes to simulate from the
+    pseudotime + beta interactions regime</p></dd>
+    <dt><code>[n.de.pst.beta]</code></dt><dd><p>Number of genes to simulate from the
+    differential expression + pseudotime + interactions regime</p></dd>
+</dl>
+    <p>The parameters not shown in brackets can be estimated from real data using
+<code><a href='phenoEstimate.html'>phenoEstimate</a></code>. For details of the PhenoPath simulation
+see <code><a href='phenoSimulate.html'>phenoSimulate</a></code>.</p>
+    
+
+  </div>
+  <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+    <h2>Contents</h2>
+    <ul class="nav nav-pills nav-stacked">
+      
+      <li><a href="#parameters">Parameters</a></li>
+          </ul>
+
+  </div>
+</div>
+
+      <footer>
+      <div class="copyright">
+  <p>Developed by Luke Zappia, Belinda Phipson, Alicia Oshlack.</p>
+</div>
+
+<div class="pkgdown">
+  <p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
+</div>
+
+      </footer>
+   </div>
+
+  </body>
+</html>
diff --git a/docs/reference/SCDDParams.html b/docs/reference/SCDDParams.html
index febb1a879fe2c0145f6b84b389e8c084099c4041..e819d63d8f52a377b0609803c50ae8d54471b996 100644
--- a/docs/reference/SCDDParams.html
+++ b/docs/reference/SCDDParams.html
@@ -113,7 +113,7 @@
     <dt><code>nGenes</code></dt><dd><p>The number of genes to simulate (not used).</p></dd>
     <dt><code>nCells</code></dt><dd><p>The number of cells to simulate in each condition.</p></dd>
     <dt><code>[seed]</code></dt><dd><p>Seed to use for generating random numbers.</p></dd>
-    <dt><code>SCdat</code></dt><dd><p><code><a href='http://www.rdocumentation.org/packages/SummarizedExperiment/topics/RangedSummarizedExperiment-class'>SummarizedExperiment</a></code> containing real
+    <dt><code>SCdat</code></dt><dd><p><code><a href='http://www.rdocumentation.org/packages/SingleCellExperiment/topics/SingleCellExperiment'>SingleCellExperiment</a></code> containing real
     data.</p></dd>
     <dt><code>nDE</code></dt><dd><p>Number of DE genes to simulate.</p></dd>
     <dt><code>nDP</code></dt><dd><p>Number of DP genes to simulate.</p></dd>
@@ -130,8 +130,8 @@
 </dl>
     <p>The parameters not shown in brackets can be estimated from real data using
 <code><a href='scDDEstimate.html'>scDDEstimate</a></code>. See <code><a href='http://www.rdocumentation.org/packages/scDD/topics/simulateSet'>simulateSet</a></code> for more
-details of the parameters. For details of the Splatter implementation of the
-scDD simulation see <code><a href='scDDSimulate.html'>scDDSimulate</a></code>.</p>
+details about the parameters. For details of the Splatter implementation of
+the scDD simulation see <code><a href='scDDSimulate.html'>scDDSimulate</a></code>.</p>
     
 
   </div>
diff --git a/docs/reference/ZINBParams.html b/docs/reference/ZINBParams.html
new file mode 100644
index 0000000000000000000000000000000000000000..531f0b99428c90fb54fea5a6c93b55cc50b3cf8b
--- /dev/null
+++ b/docs/reference/ZINBParams.html
@@ -0,0 +1,151 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>The ZINBParams class — ZINBParams • Splatter</title>
+
+<!-- jquery -->
+<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
+
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
+
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../jquery.sticky-kit.min.js"></script>
+<script src="../pkgdown.js"></script>
+  <link href="../extra.css" rel="stylesheet">
+  
+<!-- mathjax -->
+<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+<!-- Google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-52309538-4', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+  </head>
+
+  <body>
+    <div class="container template-reference-topic">
+      <header>
+      <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="../index.html">splatter</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav">
+        <li>
+  <a href="..//index.html">
+    <span class="fa fa-home fa-lg"></span>
+     
+  </a>
+</li>
+<li>
+  <a href="../articles/splatter.html">Get Started</a>
+</li>
+<li>
+  <a href="../reference/index.html">Reference</a>
+</li>
+<li>
+  <a href="../news/index.html">News</a>
+</li>
+      </ul>
+      
+      <ul class="nav navbar-nav navbar-right">
+        <li>
+  <a href="https://github.com/Oshlack/splatter">
+    <span class="fa fa-github fa-lg"></span>
+     
+  </a>
+</li>
+      </ul>
+    </div><!--/.nav-collapse -->
+  </div><!--/.container -->
+</div><!--/.navbar -->
+
+      
+      </header>
+
+      <div class="row">
+  <div class="col-md-9 contents">
+    <div class="page-header">
+    <h1>The ZINBParams class</h1>
+    </div>
+
+    
+    <p>S4 class that holds parameters for the ZINB-WaVE simulation.</p>
+    
+
+        
+    <h2 class="hasAnchor" id="parameters"><a class="anchor" href="#parameters"></a>Parameters</h2>
+
+    
+    <p>The ZINB-WaVE simulation uses the following parameters:</p><dl class='dl-horizontal'>
+    <dt><code>nGenes</code></dt><dd><p>The number of genes to simulate.</p></dd>
+    <dt><code>nCells</code></dt><dd><p>The number of cells to simulate.</p></dd>
+    <dt><code>[seed]</code></dt><dd><p>Seed to use for generating random numbers.</p></dd>
+    <dt><code>model</code></dt><dd><p>Object describing a ZINB model.</p></dd>
+</dl>
+    <p>The majority of the parameters for this simulation are stored in a
+<code><a href='http://www.rdocumentation.org/packages/zinbwave/topics/ZinbModel-class'>ZinbModel</a></code> object. Please refer to the documentation
+for this class and its constructor(<code><a href='http://www.rdocumentation.org/packages/zinbwave/topics/zinbModel'>zinbModel</a></code>) for
+details about all the parameters.</p>
+<p>The parameters not shown in brackets can be estimated from real data using
+<code><a href='zinbEstimate.html'>zinbEstimate</a></code>. For details of the ZINB-WaVE simulation
+see <code><a href='zinbSimulate.html'>zinbSimulate</a></code>.</p>
+    
+
+  </div>
+  <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+    <h2>Contents</h2>
+    <ul class="nav nav-pills nav-stacked">
+      
+      <li><a href="#parameters">Parameters</a></li>
+          </ul>
+
+  </div>
+</div>
+
+      <footer>
+      <div class="copyright">
+  <p>Developed by Luke Zappia, Belinda Phipson, Alicia Oshlack.</p>
+</div>
+
+<div class="pkgdown">
+  <p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
+</div>
+
+      </footer>
+   </div>
+
+  </body>
+</html>
diff --git a/docs/reference/addFeatureStats.html b/docs/reference/addFeatureStats.html
index ba93ed5f12158b6d3eeef5a1d86dc8e6dcff222e..09f2c7d45453b831d5795b704ef917265ec4d296 100644
--- a/docs/reference/addFeatureStats.html
+++ b/docs/reference/addFeatureStats.html
@@ -102,7 +102,7 @@
     </div>
 
     
-    <p>Add additional feature statistics to an SCESet object</p>
+    <p>Add additional feature statistics to a SingleCellExperiment object</p>
     
 
     <pre class="usage"><span class='fu'>addFeatureStats</span>(<span class='no'>sce</span>, <span class='kw'>value</span> <span class='kw'>=</span> <span class='fu'>c</span>(<span class='st'>"counts"</span>, <span class='st'>"cpm"</span>, <span class='st'>"tpm"</span>, <span class='st'>"fpkm"</span>), <span class='kw'>log</span> <span class='kw'>=</span> <span class='fl'>FALSE</span>,
@@ -113,13 +113,13 @@
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>sce</th>
-      <td><p>SCESet to add feature statistics to.</p></td>
+      <td><p>SingleCellExperiment to add feature statistics to.</p></td>
     </tr>
     <tr>
       <th>value</th>
       <td><p>the expression value to calculate statistics for. Options are
 "counts", "cpm", "tpm" or "fpkm". The values need to exist in the
-given SCESet.</p></td>
+given SingleCellExperiment.</p></td>
     </tr>
     <tr>
       <th>log</th>
@@ -138,16 +138,16 @@ calculating statistics.</p></td>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet with additional feature statistics</p>
+    <p>SingleCellExperiment with additional feature statistics</p>
     
     <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
 
     <p>Currently adds the following statistics: mean, variance, coefficient of
 variation, median and median absolute deviation. Statistics are added to
-the <code>fData</code> slot and are named <code>Stat[Log]Value[No0]</code> where
-<code>Log</code> and <code>No0</code> are added if those arguments are true.
-UpperCamelCase is used to differentiate these columns from those added by
-<code>scater</code>.</p>
+the <code><a href='http://www.rdocumentation.org/packages/SummarizedExperiment/topics/SummarizedExperiment-class'>rowData</a></code> slot and are named
+<code>Stat[Log]Value[No0]</code> where <code>Log</code> and <code>No0</code> are added if those
+arguments are true. UpperCamelCase is used to differentiate these columns
+from those added by analysis packages.</p>
     
 
   </div>
diff --git a/docs/reference/addGeneLengths.html b/docs/reference/addGeneLengths.html
index 72ab65f1a34c2f215e73a45b6d6409931691c45e..9fa10ffe6a1724705b175161d6e785c1e0715034 100644
--- a/docs/reference/addGeneLengths.html
+++ b/docs/reference/addGeneLengths.html
@@ -102,7 +102,7 @@
     </div>
 
     
-    <p>Add gene lengths to an SCESet object</p>
+    <p>Add gene lengths to an SingleCellExperiment object</p>
     
 
     <pre class="usage"><span class='fu'>addGeneLengths</span>(<span class='no'>sce</span>, <span class='kw'>method</span> <span class='kw'>=</span> <span class='fu'>c</span>(<span class='st'>"generate"</span>, <span class='st'>"sample"</span>), <span class='kw'>loc</span> <span class='kw'>=</span> <span class='fl'>7.9</span>,
@@ -113,7 +113,7 @@
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>sce</th>
-      <td><p>SCESet to add gene lengths to.</p></td>
+      <td><p>SingleCellExperiment to add gene lengths to.</p></td>
     </tr>
     <tr>
       <th>method</th>
@@ -135,29 +135,33 @@
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet with added gene lengths</p>
+    <p>SingleCellExperiment with added gene lengths</p>
     
     <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
 
-    <p>This function adds simulated gene lengths to the <code>fData</code> slot of an
-<code>SCESet</code> object that can be used for calculating length normalised
-expression values such as TPM or FPKM. The <code>generate</code> simulates lengths
-using a (rounded) log-normal distribution, with the default <code>loc</code> and
-<code>scale</code> parameters based on human coding genes. Alternatively the
-<code>sample</code> method can be used which randomly samples lengths (with
-replacement) from a supplied vector.</p>
+    <p>This function adds simulated gene lengths to the
+<code><a href='http://www.rdocumentation.org/packages/SummarizedExperiment/topics/SummarizedExperiment-class'>rowData</a></code> slot of a
+<code><a href='http://www.rdocumentation.org/packages/SingleCellExperiment/topics/SingleCellExperiment'>SingleCellExperiment</a></code> object that can be
+used for calculating length normalised expression values such as TPM or FPKM.
+The <code>generate</code> method simulates lengths using a (rounded) log-normal
+distribution, with the default <code>loc</code> and <code>scale</code> parameters based
+on human protein-coding genes. Alternatively the <code>sample</code> method can be
+used which randomly samples lengths (with replacement) from a supplied
+vector.</p>
     
 
     <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
     <pre class="examples"><div class='input'><span class='co'># Default generate method</span>
-<span class='no'>sce</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='simpleSimulate.html'>simpleSimulate</a></span>()</div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final SCESet...</span></div><div class='input'><span class='no'>sce</span> <span class='kw'>&lt;-</span> <span class='fu'>addGeneLengths</span>(<span class='no'>sce</span>)
-<span class='fu'>head</span>(<span class='fu'>fData</span>(<span class='no'>sce</span>))</div><div class='output co'>#&gt;        Gene   GeneMean Length
-#&gt; Gene1 Gene1 2.48516793   4364
-#&gt; Gene2 Gene2 2.66764544   2293
-#&gt; Gene3 Gene3 1.63746271   1981
-#&gt; Gene4 Gene4 5.95066226   8532
-#&gt; Gene5 Gene5 1.79688466   2083
-#&gt; Gene6 Gene6 0.09561467   3011</div><div class='input'># Sample method (human coding genes)
+<span class='no'>sce</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='simpleSimulate.html'>simpleSimulate</a></span>()</div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final dataset...</span></div><div class='input'><span class='no'>sce</span> <span class='kw'>&lt;-</span> <span class='fu'>addGeneLengths</span>(<span class='no'>sce</span>)
+<span class='fu'>head</span>(<span class='fu'>rowData</span>(<span class='no'>sce</span>))</div><div class='output co'>#&gt; DataFrame with 6 rows and 3 columns
+#&gt;       Gene  GeneMean    Length
+#&gt;   &lt;factor&gt; &lt;numeric&gt; &lt;numeric&gt;
+#&gt; 1    Gene1 0.8455684      1284
+#&gt; 2    Gene2 0.1606091      5127
+#&gt; 3    Gene3 6.7083234      1847
+#&gt; 4    Gene4 0.2917321      2194
+#&gt; 5    Gene5 1.4748643      1567
+#&gt; 6    Gene6 0.0326816      7629</div><div class='input'># Sample method (human coding genes)
 </div><span class='co'># NOT RUN {</span>
 <span class='fu'>library</span>(<span class='no'>TxDb.Hsapiens.UCSC.hg19.knownGene</span>)
 <span class='fu'>library</span>(<span class='no'>GenomicFeatures</span>)
diff --git a/docs/reference/compareSCEs.html b/docs/reference/compareSCEs.html
new file mode 100644
index 0000000000000000000000000000000000000000..d1ec1daae19d927f28f5e2ef4c7ba2a1237eefd7
--- /dev/null
+++ b/docs/reference/compareSCEs.html
@@ -0,0 +1,205 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>Compare SingleCellExperiment objects — compareSCEs • Splatter</title>
+
+<!-- jquery -->
+<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
+
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
+
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../jquery.sticky-kit.min.js"></script>
+<script src="../pkgdown.js"></script>
+  <link href="../extra.css" rel="stylesheet">
+  
+<!-- mathjax -->
+<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+<!-- Google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-52309538-4', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+  </head>
+
+  <body>
+    <div class="container template-reference-topic">
+      <header>
+      <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="../index.html">splatter</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav">
+        <li>
+  <a href="..//index.html">
+    <span class="fa fa-home fa-lg"></span>
+     
+  </a>
+</li>
+<li>
+  <a href="../articles/splatter.html">Get Started</a>
+</li>
+<li>
+  <a href="../reference/index.html">Reference</a>
+</li>
+<li>
+  <a href="../news/index.html">News</a>
+</li>
+      </ul>
+      
+      <ul class="nav navbar-nav navbar-right">
+        <li>
+  <a href="https://github.com/Oshlack/splatter">
+    <span class="fa fa-github fa-lg"></span>
+     
+  </a>
+</li>
+      </ul>
+    </div><!--/.nav-collapse -->
+  </div><!--/.container -->
+</div><!--/.navbar -->
+
+      
+      </header>
+
+      <div class="row">
+  <div class="col-md-9 contents">
+    <div class="page-header">
+    <h1>Compare SingleCellExperiment objects</h1>
+    </div>
+
+    
+    <p>Combine the data from several SingleCellExperiment objects and produce some
+basic plots comparing them.</p>
+    
+
+    <pre class="usage"><span class='fu'>compareSCEs</span>(<span class='no'>sces</span>, <span class='kw'>point.size</span> <span class='kw'>=</span> <span class='fl'>0.1</span>, <span class='kw'>point.alpha</span> <span class='kw'>=</span> <span class='fl'>0.1</span>, <span class='kw'>fits</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>,
+  <span class='kw'>colours</span> <span class='kw'>=</span> <span class='kw'>NULL</span>)</pre>
+    
+    <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a> Arguments</h2>
+    <table class="ref-arguments">
+    <colgroup><col class="name" /><col class="desc" /></colgroup>
+    <tr>
+      <th>sces</th>
+      <td><p>named list of SingleCellExperiment objects to combine and
+compare.</p></td>
+    </tr>
+    <tr>
+      <th>point.size</th>
+      <td><p>size of points in scatter plots.</p></td>
+    </tr>
+    <tr>
+      <th>point.alpha</th>
+      <td><p>opacity of points in scatter plots.</p></td>
+    </tr>
+    <tr>
+      <th>fits</th>
+      <td><p>whether to include fits in scatter plots.</p></td>
+    </tr>
+    <tr>
+      <th>colours</th>
+      <td><p>vector of colours to use for each dataset.</p></td>
+    </tr>
+    </table>
+    
+    <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
+
+    <p>List containing the combined datasets and plots.</p>
+    
+    <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
+
+    <p>The returned list has three items:</p><dl class='dl-horizontal'>
+    <dt><code>FeatureData</code></dt><dd><p>Combined feature data from the provided
+    SingleCellExperiments.</p></dd>
+    <dt><code>PhenoData</code></dt><dd><p>Combined pheno data from the provided
+    SingleCellExperiments.</p></dd>
+    <dt><code>Plots</code></dt><dd><p>Comparison plots
+        <dl class='dl-horizontal'>
+            <dt><code>Means</code></dt><dd><p>Boxplot of mean distribution.</p></dd>
+            <dt><code>Variances</code></dt><dd><p>Boxplot of variance distribution.</p></dd>
+            <dt><code>MeanVar</code></dt><dd><p>Scatter plot with fitted lines showing the
+            mean-variance relationship.</p></dd>
+            <dt><code>LibraySizes</code></dt><dd><p>Boxplot of the library size
+            distribution.</p></dd>
+            <dt><code>ZerosGene</code></dt><dd><p>Boxplot of the percentage of each gene
+            that is zero.</p></dd>
+            <dt><code>ZerosCell</code></dt><dd><p>Boxplot of the percentage of each cell
+            that is zero.</p></dd>
+            <dt><code>MeanZeros</code></dt><dd><p>Scatter plot with fitted lines showing
+            the mean-zeros relationship.</p></dd>
+    </dl></p></dd>
+</dl>
+    <p>The plots returned by this function are created using
+<code><a href='http://www.rdocumentation.org/packages/ggplot2/topics/ggplot'>ggplot</a></code> and are only a sample of the kind of plots you
+might like to consider. The data used to create these plots is also returned
+and should be in the correct format to allow you to create further plots
+using <code><a href='http://www.rdocumentation.org/packages/ggplot2/topics/ggplot'>ggplot</a></code>.</p>
+    
+
+    <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
+    <pre class="examples"><div class='input'><span class='no'>sim1</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='splatSimulate.html'>splatSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>batchCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)</div><div class='output co'>#&gt; <span class='message'>Getting parameters...</span></div><div class='output co'>#&gt; <span class='message'>Creating simulation object...</span></div><div class='output co'>#&gt; <span class='message'>Simulating library sizes...</span></div><div class='output co'>#&gt; <span class='message'>Simulating gene means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating BCV...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts..</span></div><div class='output co'>#&gt; <span class='message'>Simulating dropout (if needed)...</span></div><div class='output co'>#&gt; <span class='message'>Done!</span></div><div class='input'><span class='no'>sim2</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='simpleSimulate.html'>simpleSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>nCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)</div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final dataset...</span></div><div class='input'><span class='no'>comparison</span> <span class='kw'>&lt;-</span> <span class='fu'>compareSCEs</span>(<span class='fu'>list</span>(<span class='kw'>Splat</span> <span class='kw'>=</span> <span class='no'>sim1</span>, <span class='kw'>Simple</span> <span class='kw'>=</span> <span class='no'>sim2</span>))
+<span class='fu'>names</span>(<span class='no'>comparison</span>)</div><div class='output co'>#&gt; [1] "FeatureData" "PhenoData"   "Plots"      </div><div class='input'><span class='fu'>names</span>(<span class='no'>comparison</span>$<span class='no'>Plots</span>)</div><div class='output co'>#&gt; [1] "Means"        "Variances"    "MeanVar"      "LibrarySizes" "ZerosGene"   
+#&gt; [6] "ZerosCell"    "MeanZeros"   </div></pre>
+  </div>
+  <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+    <h2>Contents</h2>
+    <ul class="nav nav-pills nav-stacked">
+      <li><a href="#arguments">Arguments</a></li>
+      
+      <li><a href="#value">Value</a></li>
+
+      <li><a href="#details">Details</a></li>
+      
+      <li><a href="#examples">Examples</a></li>
+    </ul>
+
+  </div>
+</div>
+
+      <footer>
+      <div class="copyright">
+  <p>Developed by Luke Zappia, Belinda Phipson, Alicia Oshlack.</p>
+</div>
+
+<div class="pkgdown">
+  <p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
+</div>
+
+      </footer>
+   </div>
+
+  </body>
+</html>
diff --git a/docs/reference/diffSCEs.html b/docs/reference/diffSCEs.html
new file mode 100644
index 0000000000000000000000000000000000000000..500f55f6e2ccb6fc2ffb7477b6b443d6092ed1bf
--- /dev/null
+++ b/docs/reference/diffSCEs.html
@@ -0,0 +1,227 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>Diff SingleCellExperiment objects — diffSCEs • Splatter</title>
+
+<!-- jquery -->
+<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
+
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
+
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../jquery.sticky-kit.min.js"></script>
+<script src="../pkgdown.js"></script>
+  <link href="../extra.css" rel="stylesheet">
+  
+<!-- mathjax -->
+<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+<!-- Google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-52309538-4', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+  </head>
+
+  <body>
+    <div class="container template-reference-topic">
+      <header>
+      <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="../index.html">splatter</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav">
+        <li>
+  <a href="..//index.html">
+    <span class="fa fa-home fa-lg"></span>
+     
+  </a>
+</li>
+<li>
+  <a href="../articles/splatter.html">Get Started</a>
+</li>
+<li>
+  <a href="../reference/index.html">Reference</a>
+</li>
+<li>
+  <a href="../news/index.html">News</a>
+</li>
+      </ul>
+      
+      <ul class="nav navbar-nav navbar-right">
+        <li>
+  <a href="https://github.com/Oshlack/splatter">
+    <span class="fa fa-github fa-lg"></span>
+     
+  </a>
+</li>
+      </ul>
+    </div><!--/.nav-collapse -->
+  </div><!--/.container -->
+</div><!--/.navbar -->
+
+      
+      </header>
+
+      <div class="row">
+  <div class="col-md-9 contents">
+    <div class="page-header">
+    <h1>Diff SingleCellExperiment objects</h1>
+    </div>
+
+    
+    <p>Combine the data from several SingleCellExperiment objects and produce some
+basic plots comparing them to a reference.</p>
+    
+
+    <pre class="usage"><span class='fu'>diffSCEs</span>(<span class='no'>sces</span>, <span class='no'>ref</span>, <span class='kw'>point.size</span> <span class='kw'>=</span> <span class='fl'>0.1</span>, <span class='kw'>point.alpha</span> <span class='kw'>=</span> <span class='fl'>0.1</span>, <span class='kw'>fits</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>,
+  <span class='kw'>colours</span> <span class='kw'>=</span> <span class='kw'>NULL</span>)</pre>
+    
+    <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a> Arguments</h2>
+    <table class="ref-arguments">
+    <colgroup><col class="name" /><col class="desc" /></colgroup>
+    <tr>
+      <th>sces</th>
+      <td><p>named list of SingleCellExperiment objects to combine and
+compare.</p></td>
+    </tr>
+    <tr>
+      <th>ref</th>
+      <td><p>string giving the name of the SingleCellExperiment to use as the
+reference</p></td>
+    </tr>
+    <tr>
+      <th>point.size</th>
+      <td><p>size of points in scatter plots.</p></td>
+    </tr>
+    <tr>
+      <th>point.alpha</th>
+      <td><p>opacity of points in scatter plots.</p></td>
+    </tr>
+    <tr>
+      <th>fits</th>
+      <td><p>whether to include fits in scatter plots.</p></td>
+    </tr>
+    <tr>
+      <th>colours</th>
+      <td><p>vector of colours to use for each dataset.</p></td>
+    </tr>
+    </table>
+    
+    <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
+
+    <p>List containing the combined datasets and plots.</p>
+    
+    <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
+
+    <p>This function aims to look at the differences between a reference
+SingleCellExperiment and one or more others. It requires each
+SingleCellExperiment to have the same dimensions. Properties are compared by
+ranks, for example when comparing the means the values are ordered and the
+differences between the reference and another dataset plotted. A series of
+Q-Q plots are also returned.</p>
+<p>The returned list has five items:</p><dl class='dl-horizontal'>
+    <dt><code>Reference</code></dt><dd><p>The SingleCellExperiment used as the reference.</p></dd>
+    <dt><code>FeatureData</code></dt><dd><p>Combined feature data from the provided
+    SingleCellExperiments.</p></dd>
+    <dt><code>PhenoData</code></dt><dd><p>Combined pheno data from the provided
+    SingleCellExperiments.</p></dd>
+    <dt><code>Plots</code></dt><dd><p>Difference plots
+        <dl class='dl-horizontal'>
+            <dt><code>Means</code></dt><dd><p>Boxplot of mean differences.</p></dd>
+            <dt><code>Variances</code></dt><dd><p>Boxplot of variance differences.</p></dd>
+            <dt><code>MeanVar</code></dt><dd><p>Scatter plot showing the difference from
+            the reference variance across expression ranks.</p></dd>
+            <dt><code>LibraySizes</code></dt><dd><p>Boxplot of the library size
+            differences.</p></dd>
+            <dt><code>ZerosGene</code></dt><dd><p>Boxplot of the differences in the
+            percentage of each gene that is zero.</p></dd>
+            <dt><code>ZerosCell</code></dt><dd><p>Boxplot of the differences in the
+            percentage of each cell that is zero.</p></dd>
+            <dt><code>MeanZeros</code></dt><dd><p>Scatter plot showing the difference from
+            the reference percentage of zeros across expression ranks.</p></dd>
+    </dl></p></dd>
+  <dt><code>QQPlots</code></dt><dd><p>Quantile-Quantile plots
+      <dl class='dl-horizontal'>
+          <dt><code>Means</code></dt><dd><p>Q-Q plot of the means.</p></dd>
+          <dt><code>Variances</code></dt><dd><p>Q-Q plot of the variances.</p></dd>
+          <dt><code>LibrarySizes</code></dt><dd><p>Q-Q plot of the library sizes.</p></dd>
+          <dt><code>ZerosGene</code></dt><dd><p>Q-Q plot of the percentage of zeros per
+          gene.</p></dd>
+          <dt><code>ZerosCell</code></dt><dd><p>Q-Q plot of the percentage of zeros per
+          cell.</p></dd>
+      </dl></p></dd>
+</dl>
+    <p>The plots returned by this function are created using
+<code><a href='http://www.rdocumentation.org/packages/ggplot2/topics/ggplot'>ggplot</a></code> and are only a sample of the kind of plots you
+might like to consider. The data used to create these plots is also returned
+and should be in the correct format to allow you to create further plots
+using <code><a href='http://www.rdocumentation.org/packages/ggplot2/topics/ggplot'>ggplot</a></code>.</p>
+    
+
+    <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
+    <pre class="examples"><div class='input'><span class='no'>sim1</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='splatSimulate.html'>splatSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>batchCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)</div><div class='output co'>#&gt; <span class='message'>Getting parameters...</span></div><div class='output co'>#&gt; <span class='message'>Creating simulation object...</span></div><div class='output co'>#&gt; <span class='message'>Simulating library sizes...</span></div><div class='output co'>#&gt; <span class='message'>Simulating gene means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating BCV...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts..</span></div><div class='output co'>#&gt; <span class='message'>Simulating dropout (if needed)...</span></div><div class='output co'>#&gt; <span class='message'>Done!</span></div><div class='input'><span class='no'>sim2</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='simpleSimulate.html'>simpleSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>nCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)</div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final dataset...</span></div><div class='input'><span class='no'>difference</span> <span class='kw'>&lt;-</span> <span class='fu'>diffSCEs</span>(<span class='fu'>list</span>(<span class='kw'>Splat</span> <span class='kw'>=</span> <span class='no'>sim1</span>, <span class='kw'>Simple</span> <span class='kw'>=</span> <span class='no'>sim2</span>), <span class='kw'>ref</span> <span class='kw'>=</span> <span class='st'>"Simple"</span>)
+<span class='fu'>names</span>(<span class='no'>difference</span>)</div><div class='output co'>#&gt; [1] "Reference"   "FeatureData" "PhenoData"   "Plots"       "QQPlots"    </div><div class='input'><span class='fu'>names</span>(<span class='no'>difference</span>$<span class='no'>Plots</span>)</div><div class='output co'>#&gt; [1] "Means"        "Variances"    "MeanVar"      "LibrarySizes" "ZerosGene"   
+#&gt; [6] "ZerosCell"    "MeanZeros"   </div></pre>
+  </div>
+  <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+    <h2>Contents</h2>
+    <ul class="nav nav-pills nav-stacked">
+      <li><a href="#arguments">Arguments</a></li>
+      
+      <li><a href="#value">Value</a></li>
+
+      <li><a href="#details">Details</a></li>
+      
+      <li><a href="#examples">Examples</a></li>
+    </ul>
+
+  </div>
+</div>
+
+      <footer>
+      <div class="copyright">
+  <p>Developed by Luke Zappia, Belinda Phipson, Alicia Oshlack.</p>
+</div>
+
+<div class="pkgdown">
+  <p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
+</div>
+
+      </footer>
+   </div>
+
+  </body>
+</html>
diff --git a/docs/reference/index.html b/docs/reference/index.html
index 297b2526cd16dd579d8b2f4fc3e2feb429358fd1..3697b90316d31166e41d778508a961047ef7f515 100644
--- a/docs/reference/index.html
+++ b/docs/reference/index.html
@@ -100,7 +100,7 @@
     <div class="page-header">
       <h1>
         Reference
-        <small>version&nbsp;1.1.4</small>
+        <small>version&nbsp;1.1.7</small>
       </h1>
     </div>
 
@@ -146,7 +146,13 @@
         </tr><tr>
           <!--  -->
           <td>
-            <p><code><a href="newParams.html">newLun2Params</a></code> <code><a href="newParams.html">newLunParams</a></code> <code><a href="newParams.html">newSCDDParams</a></code> <code><a href="newParams.html">newSimpleParams</a></code> <code><a href="newParams.html">newSplatParams</a></code> </p>
+            <p></p>
+          </td>
+          <td><p>The MFAParams class</p></td>
+        </tr><tr>
+          <!--  -->
+          <td>
+            <p><code><a href="newParams.html">newLun2Params</a></code> <code><a href="newParams.html">newLunParams</a></code> <code><a href="newParams.html">newMFAParams</a></code> <code><a href="newParams.html">newPhenoParams</a></code> <code><a href="newParams.html">newSCDDParams</a></code> <code><a href="newParams.html">newSimpleParams</a></code> <code><a href="newParams.html">newSplatParams</a></code> <code><a href="newParams.html">newZINBParams</a></code> </p>
           </td>
           <td><p>New Params</p></td>
         </tr><tr>
@@ -155,6 +161,12 @@
             <p></p>
           </td>
           <td><p>The Params virtual class</p></td>
+        </tr><tr>
+          <!--  -->
+          <td>
+            <p></p>
+          </td>
+          <td><p>The PhenoParams class</p></td>
         </tr><tr>
           <!--  -->
           <td>
@@ -185,6 +197,12 @@
             <p><code><a href="setParams.html">setParams</a></code> </p>
           </td>
           <td><p>Set parameters</p></td>
+        </tr><tr>
+          <!--  -->
+          <td>
+            <p></p>
+          </td>
+          <td><p>The ZINBParams class</p></td>
         </tr>
       </tbody><tbody>
         <tr>
@@ -205,6 +223,18 @@
             <p><code><a href="lunEstimate.html">lunEstimate</a></code> </p>
           </td>
           <td><p>Estimate Lun simulation parameters</p></td>
+        </tr><tr>
+          <!--  -->
+          <td>
+            <p><code><a href="mfaEstimate.html">mfaEstimate</a></code> </p>
+          </td>
+          <td><p>Estimate mfa simulation parameters</p></td>
+        </tr><tr>
+          <!--  -->
+          <td>
+            <p><code><a href="phenoEstimate.html">phenoEstimate</a></code> </p>
+          </td>
+          <td><p>Estimate PhenoPath simulation parameters</p></td>
         </tr><tr>
           <!--  -->
           <td>
@@ -253,6 +283,12 @@
             <p><code><a href="splatEstOutlier.html">splatEstOutlier</a></code> </p>
           </td>
           <td><p>Estimate Splat expression outlier parameters</p></td>
+        </tr><tr>
+          <!--  -->
+          <td>
+            <p><code><a href="zinbEstimate.html">zinbEstimate</a></code> </p>
+          </td>
+          <td><p>Estimate ZINB-WaVE simulation parameters</p></td>
         </tr>
       </tbody><tbody>
         <tr>
@@ -273,6 +309,18 @@
             <p><code><a href="lunSimulate.html">lunSimulate</a></code> </p>
           </td>
           <td><p>Lun simulation</p></td>
+        </tr><tr>
+          <!--  -->
+          <td>
+            <p><code><a href="mfaSimulate.html">mfaSimulate</a></code> </p>
+          </td>
+          <td><p>MFA simulation</p></td>
+        </tr><tr>
+          <!--  -->
+          <td>
+            <p><code><a href="phenoEstimate.html">phenoEstimate</a></code> </p>
+          </td>
+          <td><p>Estimate PhenoPath simulation parameters</p></td>
         </tr><tr>
           <!--  -->
           <td>
@@ -345,6 +393,12 @@
             <p><code><a href="splatSimulate.html">splatSimulate</a></code> <code><a href="splatSimulate.html">splatSimulateSingle</a></code> <code><a href="splatSimulate.html">splatSimulateGroups</a></code> <code><a href="splatSimulate.html">splatSimulatePaths</a></code> </p>
           </td>
           <td><p>Splat simulation</p></td>
+        </tr><tr>
+          <!--  -->
+          <td>
+            <p><code><a href="zinbSimulate.html">zinbSimulate</a></code> </p>
+          </td>
+          <td><p>ZINB-WaVE simulation</p></td>
         </tr>
       </tbody><tbody>
         <tr>
@@ -356,15 +410,15 @@
         <tr>
           <!--  -->
           <td>
-            <p><code><a href="compareSCESets.html">compareSCESets</a></code> </p>
+            <p><code><a href="compareSCEs.html">compareSCEs</a></code> </p>
           </td>
-          <td><p>Compare SCESet objects</p></td>
+          <td><p>Compare SingleCellExperiment objects</p></td>
         </tr><tr>
           <!--  -->
           <td>
-            <p><code><a href="diffSCESets.html">diffSCESets</a></code> </p>
+            <p><code><a href="diffSCEs.html">diffSCEs</a></code> </p>
           </td>
-          <td><p>Diff SCESet objects</p></td>
+          <td><p>Diff SingleCellExperiment objects</p></td>
         </tr><tr>
           <!--  -->
           <td>
@@ -388,7 +442,7 @@
           <td>
             <p><code><a href="summariseDiff.html">summariseDiff</a></code> </p>
           </td>
-          <td><p>Summarise diffSCESets</p></td>
+          <td><p>Summarise diffSCESs</p></td>
         </tr>
       </tbody><tbody>
         <tr>
diff --git a/docs/reference/listSims.html b/docs/reference/listSims.html
index 9493cc353309815e0a171b640093545f92a3fb57..dca08b58960dfd1925bdb25b7db37f28e96a8060 100644
--- a/docs/reference/listSims.html
+++ b/docs/reference/listSims.html
@@ -124,39 +124,51 @@ displayed.</p>
     
 
     <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
-    <pre class="examples"><div class='input'><span class='fu'>listSims</span>()</div><div class='output co'>#&gt; Splatter currently contains 8 simulations 
+    <pre class="examples"><div class='input'><span class='fu'>listSims</span>()</div><div class='output co'>#&gt; Splatter currently contains 11 simulations 
 #&gt; 
 #&gt; Splat (splat) 
-#&gt; DOI:  	 Github:  
-#&gt; The Splat simulation generates means from a gamma distribution, adjusts them for BCV and generates counts from a gamma-poisson. Dropout can be optionally added. 
+#&gt; DOI:  	 GitHub:  
+#&gt; The Splat simulation generates means from a gamma distribution, adjusts them for BCV and generates counts from a gamma-poisson. Dropout and batch effects can be optionally added. 
 #&gt; 
 #&gt; Splat Single (splatSingle) 
-#&gt; DOI:  	 Github:  
+#&gt; DOI:  	 GitHub:  
 #&gt; The Splat simulation with a single population. 
 #&gt; 
 #&gt; Splat Groups (splatGroups) 
-#&gt; DOI:  	 Github:  
+#&gt; DOI:  	 GitHub:  
 #&gt; The Splat simulation with multiple groups. Each group can have it's own differential expression probability and fold change distribution. 
 #&gt; 
 #&gt; Splat Paths (splatPaths) 
-#&gt; DOI:  	 Github:  
+#&gt; DOI:  	 GitHub:  
 #&gt; The Splat simulation with differentiation paths. Each path can have it's own length, skew and probability. Genes can change in non-linear ways. 
 #&gt; 
 #&gt; Simple (simple) 
-#&gt; DOI:  	 Github:  
+#&gt; DOI:  	 GitHub:  
 #&gt; A simple simulation with gamma means and negative binomial counts. 
 #&gt; 
 #&gt; Lun (lun) 
-#&gt; DOI: 10.1186/s13059-016-0947-7 	 Github: MarioniLab/Deconvolution2016 
+#&gt; DOI: 10.1186/s13059-016-0947-7 	 GitHub: MarioniLab/Deconvolution2016 
 #&gt; Gamma distributed means and negative binomial counts. Cells are given a size factor and differential expression can be simulated with fixed fold changes. 
 #&gt; 
 #&gt; Lun 2 (lun2) 
-#&gt; DOI: 10.1101/073973 	 Github: MarioniLab/PlateEffects2016 
+#&gt; DOI: 10.1101/073973 	 GitHub: MarioniLab/PlateEffects2016 
 #&gt; Negative binomial counts where the means and dispersions have been sampled from a real dataset. The core feature of the Lun 2 simulation is the addition of plate effects. Differential expression can be added between two groups of plates and optionally a zero-inflated negative-binomial can be used. 
 #&gt; 
 #&gt; scDD (scDD) 
-#&gt; DOI: 10.1186/s13059-016-1077-y 	 Github: kdkorthauer/scDD 
+#&gt; DOI: 10.1186/s13059-016-1077-y 	 GitHub: kdkorthauer/scDD 
 #&gt; The scDD simulation samples a given dataset and can simulate differentially expressed and differentially distributed genes between two conditions. 
+#&gt; 
+#&gt; mfa (mfa) 
+#&gt; DOI: 10.12688/wellcomeopenres.11087.1 	 GitHub: kieranrcampbell/mfa 
+#&gt; The mfa simulation produces a bifurcating pseudotime trajectory. This can optionally include genes with transient changes in expression and added dropout. 
+#&gt; 
+#&gt; PhenoPath (pheno) 
+#&gt; DOI: 10.1101/159913 	 GitHub: kieranrcampbell/phenopath 
+#&gt; The PhenoPath simulation produces a pseudotime trajectory with different types of genes. 
+#&gt; 
+#&gt; ZINB-WaVE (zinb) 
+#&gt; DOI: 10.1101/125112 	 GitHub: drisso/zinbwave 
+#&gt; The ZINB-WaVE simulation simulates counts from a sophisticated zero-inflated negative-binomial distribution including cell and gene-level covariates. 
 #&gt; </div></pre>
   </div>
   <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
diff --git a/docs/reference/lun2Estimate.html b/docs/reference/lun2Estimate.html
index 4ce558477500f810f049d8006ff764609b774016..981a52b6ac4c56dfcd1225dba9d2fb704891fdb6 100644
--- a/docs/reference/lun2Estimate.html
+++ b/docs/reference/lun2Estimate.html
@@ -108,9 +108,10 @@
     <pre class="usage"><span class='fu'>lun2Estimate</span>(<span class='no'>counts</span>, <span class='no'>plates</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newLun2Params</a></span>(), <span class='kw'>min.size</span> <span class='kw'>=</span> <span class='fl'>200</span>,
   <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>())
 
-<span class='co'># S3 method for SCESet</span>
-<span class='fu'>lun2Estimate</span>(<span class='no'>counts</span>, <span class='no'>plates</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newLun2Params</a></span>(),
-  <span class='kw'>min.size</span> <span class='kw'>=</span> <span class='fl'>200</span>, <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>())
+<span class='co'># S3 method for SingleCellExperiment</span>
+<span class='fu'>lun2Estimate</span>(<span class='no'>counts</span>, <span class='no'>plates</span>,
+  <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newLun2Params</a></span>(), <span class='kw'>min.size</span> <span class='kw'>=</span> <span class='fl'>200</span>, <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>,
+  <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>())
 
 <span class='co'># S3 method for matrix</span>
 <span class='fu'>lun2Estimate</span>(<span class='no'>counts</span>, <span class='no'>plates</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newLun2Params</a></span>(),
@@ -121,8 +122,8 @@
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>counts</th>
-      <td><p>either a counts matrix or an SCESet object containing count
-data to estimate parameters from.</p></td>
+      <td><p>either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.</p></td>
     </tr>
     <tr>
       <th>plates</th>
diff --git a/docs/reference/lun2Simulate.html b/docs/reference/lun2Simulate.html
index e7c8f353a2e85124b011ad2538deb5f8f5b32e63..45a0e132d172bd313e7df72664db785261ed9e05 100644
--- a/docs/reference/lun2Simulate.html
+++ b/docs/reference/lun2Simulate.html
@@ -133,7 +133,7 @@ analyses of single-cell RNA-seq data".</p>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet containing simulated counts.</p>
+    <p>SingleCellExperiment containing simulated counts.</p>
     
     <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
 
@@ -160,7 +160,7 @@ expression analyses of single-cell RNA-seq data. bioRxiv (2016).</p>
     
 
     <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
-    <pre class="examples"><div class='input'><span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>lun2Simulate</span>()</div><div class='output co'>#&gt; <span class='message'>Getting parameters...</span></div><div class='output co'>#&gt; <span class='message'>Simulating plate means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating libray size factors...</span></div><div class='output co'>#&gt; <span class='message'>Simulating cell means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final SCESet...</span></div><div class='output co'>#&gt; <span class='message'>Done!</span></div></pre>
+    <pre class="examples"><div class='input'><span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>lun2Simulate</span>()</div><div class='output co'>#&gt; <span class='message'>Getting parameters...</span></div><div class='output co'>#&gt; <span class='message'>Simulating plate means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating libray size factors...</span></div><div class='output co'>#&gt; <span class='message'>Simulating cell means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final dataset...</span></div><div class='output co'>#&gt; <span class='message'>Done!</span></div></pre>
   </div>
   <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
     <h2>Contents</h2>
diff --git a/docs/reference/lunEstimate.html b/docs/reference/lunEstimate.html
index e6179fcf2decc9c11166660fbe7cc26373f6b377..4d3d97cd872674d7b8ac41b6fd430e77fa6eb8e0 100644
--- a/docs/reference/lunEstimate.html
+++ b/docs/reference/lunEstimate.html
@@ -107,7 +107,7 @@
 
     <pre class="usage"><span class='fu'>lunEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newLunParams</a></span>())
 
-<span class='co'># S3 method for SCESet</span>
+<span class='co'># S3 method for SingleCellExperiment</span>
 <span class='fu'>lunEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newLunParams</a></span>())
 
 <span class='co'># S3 method for matrix</span>
@@ -118,8 +118,8 @@
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>counts</th>
-      <td><p>either a counts matrix or an SCESet object containing count
-data to estimate parameters from.</p></td>
+      <td><p>either a counts matrix or an SingleCellExperiment object
+containing count data to estimate parameters from.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -146,7 +146,7 @@ for more details on the parameters.</p>
 #&gt; 
 #&gt; Global: 
 #&gt; (GENES)  (CELLS)   [Seed]  
-#&gt;    2000       40    88458  
+#&gt;    2000       40    80751  
 #&gt; 
 #&gt; 9 additional parameters 
 #&gt; 
diff --git a/docs/reference/lunSimulate.html b/docs/reference/lunSimulate.html
index 7b1880707433b09b06089757dfd99a9d3a077099..31bd82a4d9e1a77d385931ac948c4b4f0b203d45 100644
--- a/docs/reference/lunSimulate.html
+++ b/docs/reference/lunSimulate.html
@@ -129,8 +129,8 @@ sequencing data with many zero counts".</p>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet object containing the simulated counts and intermediate
-values.</p>
+    <p>SingleCellExperiment object containing the simulated counts and
+intermediate values.</p>
     
     <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
 
@@ -151,7 +151,7 @@ RNA sequencing data with many zero counts. Genome Biology (2016).</p>
     
 
     <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
-    <pre class="examples"><div class='input'><span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>lunSimulate</span>()</div><div class='output co'>#&gt; <span class='message'>Getting parameters...</span></div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating cell means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final SCESet...</span></div><div class='input'>
+    <pre class="examples"><div class='input'><span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>lunSimulate</span>()</div><div class='output co'>#&gt; <span class='message'>Getting parameters...</span></div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating cell means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final dataset...</span></div><div class='output co'>#&gt; <span class='message'>Done!</span></div><div class='input'>
 </div></pre>
   </div>
   <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
diff --git a/docs/reference/makeCompPanel.html b/docs/reference/makeCompPanel.html
index fae7764cfe2bbb90a11e412acc4d4865d5ccbf6a..952d7e03ae0fa742e966137455968c5a238f335d 100644
--- a/docs/reference/makeCompPanel.html
+++ b/docs/reference/makeCompPanel.html
@@ -102,7 +102,7 @@
     </div>
 
     
-    <p>Combine the plots from <code>compareSCESets</code> into a single panel.</p>
+    <p>Combine the plots from <code>compareSCEs</code> into a single panel.</p>
     
 
     <pre class="usage"><span class='fu'>makeCompPanel</span>(<span class='no'>comp</span>, <span class='kw'>title</span> <span class='kw'>=</span> <span class='st'>"Comparison"</span>, <span class='kw'>labels</span> <span class='kw'>=</span> <span class='fu'>c</span>(<span class='st'>"Means"</span>, <span class='st'>"Variance"</span>,
@@ -114,7 +114,7 @@
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>comp</th>
-      <td><p>list returned by <code><a href='compareSCESets.html'>compareSCESets</a></code>.</p></td>
+      <td><p>list returned by <code><a href='compareSCEs.html'>compareSCEs</a></code>.</p></td>
     </tr>
     <tr>
       <th>title</th>
@@ -135,7 +135,7 @@
     <pre class="examples"><span class='co'># NOT RUN {</span>
 <span class='no'>sim1</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='splatSimulate.html'>splatSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>batchCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)
 <span class='no'>sim2</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='simpleSimulate.html'>simpleSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>nCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)
-<span class='no'>comparison</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='compareSCESets.html'>compareSCESets</a></span>(<span class='fu'>list</span>(<span class='kw'>Splat</span> <span class='kw'>=</span> <span class='no'>sim1</span>, <span class='kw'>Simple</span> <span class='kw'>=</span> <span class='no'>sim2</span>))
+<span class='no'>comparison</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='compareSCEs.html'>compareSCEs</a></span>(<span class='fu'>list</span>(<span class='kw'>Splat</span> <span class='kw'>=</span> <span class='no'>sim1</span>, <span class='kw'>Simple</span> <span class='kw'>=</span> <span class='no'>sim2</span>))
 <span class='no'>panel</span> <span class='kw'>&lt;-</span> <span class='fu'>makeCompPanel</span>(<span class='no'>comparison</span>)
 <span class='co'># }</span><div class='input'>
 </div></pre>
diff --git a/docs/reference/makeDiffPanel.html b/docs/reference/makeDiffPanel.html
index 2c9b51810684f4abd2cb1d95e3f0505db7f779a4..91a4c2ecf2af1fea4bfafd7d2375870fc006cfbe 100644
--- a/docs/reference/makeDiffPanel.html
+++ b/docs/reference/makeDiffPanel.html
@@ -102,7 +102,7 @@
     </div>
 
     
-    <p>Combine the plots from <code>diffSCESets</code> into a single panel.</p>
+    <p>Combine the plots from <code>diffSCEs</code> into a single panel.</p>
     
 
     <pre class="usage"><span class='fu'>makeDiffPanel</span>(<span class='no'>diff</span>, <span class='kw'>title</span> <span class='kw'>=</span> <span class='st'>"Difference comparison"</span>, <span class='kw'>labels</span> <span class='kw'>=</span> <span class='fu'>c</span>(<span class='st'>"Means"</span>,
@@ -114,7 +114,7 @@
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>diff</th>
-      <td><p>list returned by <code><a href='diffSCESets.html'>diffSCESets</a></code>.</p></td>
+      <td><p>list returned by <code><a href='diffSCEs.html'>diffSCEs</a></code>.</p></td>
     </tr>
     <tr>
       <th>title</th>
@@ -135,7 +135,7 @@
     <pre class="examples"><span class='co'># NOT RUN {</span>
 <span class='no'>sim1</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='splatSimulate.html'>splatSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>batchCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)
 <span class='no'>sim2</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='simpleSimulate.html'>simpleSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>nCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)
-<span class='no'>difference</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='diffSCESets.html'>diffSCESets</a></span>(<span class='fu'>list</span>(<span class='kw'>Splat</span> <span class='kw'>=</span> <span class='no'>sim1</span>, <span class='kw'>Simple</span> <span class='kw'>=</span> <span class='no'>sim2</span>), <span class='kw'>ref</span> <span class='kw'>=</span> <span class='st'>"Simple"</span>)
+<span class='no'>difference</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='diffSCEs.html'>diffSCEs</a></span>(<span class='fu'>list</span>(<span class='kw'>Splat</span> <span class='kw'>=</span> <span class='no'>sim1</span>, <span class='kw'>Simple</span> <span class='kw'>=</span> <span class='no'>sim2</span>), <span class='kw'>ref</span> <span class='kw'>=</span> <span class='st'>"Simple"</span>)
 <span class='no'>panel</span> <span class='kw'>&lt;-</span> <span class='fu'>makeDiffPanel</span>(<span class='no'>difference</span>)
 <span class='co'># }</span><div class='input'>
 </div></pre>
diff --git a/docs/reference/makeOverallPanel.html b/docs/reference/makeOverallPanel.html
index 105774d5d22e814c88ecbabfbc7b3ee7a79a52cf..78c41a557bd16aaf909c25a023c2fe4f491356b8 100644
--- a/docs/reference/makeOverallPanel.html
+++ b/docs/reference/makeOverallPanel.html
@@ -102,7 +102,7 @@
     </div>
 
     
-    <p>Combine the plots from <code>compSCESets</code> and <code>diffSCESets</code> into a
+    <p>Combine the plots from <code>compSCEs</code> and <code>diffSCEs</code> into a
 single panel.</p>
     
 
@@ -116,11 +116,11 @@ single panel.</p>
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>comp</th>
-      <td><p>list returned by <code><a href='compareSCESets.html'>compareSCESets</a></code>.</p></td>
+      <td><p>list returned by <code><a href='compareSCEs.html'>compareSCEs</a></code>.</p></td>
     </tr>
     <tr>
       <th>diff</th>
-      <td><p>list returned by <code><a href='diffSCESets.html'>diffSCESets</a></code>.</p></td>
+      <td><p>list returned by <code><a href='diffSCEs.html'>diffSCEs</a></code>.</p></td>
     </tr>
     <tr>
       <th>title</th>
@@ -142,7 +142,7 @@ single panel.</p>
 <span class='no'>sim1</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='splatSimulate.html'>splatSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>batchCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)
 <span class='no'>sim2</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='simpleSimulate.html'>simpleSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>nCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)
 <span class='no'>comparison</span> <span class='kw'>&lt;-</span> <span class='fu'>compSCESets</span>(<span class='fu'>list</span>(<span class='kw'>Splat</span> <span class='kw'>=</span> <span class='no'>sim1</span>, <span class='kw'>Simple</span> <span class='kw'>=</span> <span class='no'>sim2</span>))
-<span class='no'>difference</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='diffSCESets.html'>diffSCESets</a></span>(<span class='fu'>list</span>(<span class='kw'>Splat</span> <span class='kw'>=</span> <span class='no'>sim1</span>, <span class='kw'>Simple</span> <span class='kw'>=</span> <span class='no'>sim2</span>), <span class='kw'>ref</span> <span class='kw'>=</span> <span class='st'>"Simple"</span>)
+<span class='no'>difference</span> <span class='kw'>&lt;-</span> <span class='fu'>diffSCESets</span>(<span class='fu'>list</span>(<span class='kw'>Splat</span> <span class='kw'>=</span> <span class='no'>sim1</span>, <span class='kw'>Simple</span> <span class='kw'>=</span> <span class='no'>sim2</span>), <span class='kw'>ref</span> <span class='kw'>=</span> <span class='st'>"Simple"</span>)
 <span class='no'>panel</span> <span class='kw'>&lt;-</span> <span class='fu'>makeOverallPanel</span>(<span class='no'>comparison</span>, <span class='no'>difference</span>)
 <span class='co'># }</span><div class='input'>
 </div></pre>
diff --git a/docs/reference/mfaEstimate.html b/docs/reference/mfaEstimate.html
new file mode 100644
index 0000000000000000000000000000000000000000..86367e0bb4179d6ec5e7f6919ec418f9748ef277
--- /dev/null
+++ b/docs/reference/mfaEstimate.html
@@ -0,0 +1,195 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>Estimate mfa simulation parameters — mfaEstimate • Splatter</title>
+
+<!-- jquery -->
+<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
+
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
+
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../jquery.sticky-kit.min.js"></script>
+<script src="../pkgdown.js"></script>
+  <link href="../extra.css" rel="stylesheet">
+  
+<!-- mathjax -->
+<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+<!-- Google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-52309538-4', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+  </head>
+
+  <body>
+    <div class="container template-reference-topic">
+      <header>
+      <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="../index.html">splatter</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav">
+        <li>
+  <a href="..//index.html">
+    <span class="fa fa-home fa-lg"></span>
+     
+  </a>
+</li>
+<li>
+  <a href="../articles/splatter.html">Get Started</a>
+</li>
+<li>
+  <a href="../reference/index.html">Reference</a>
+</li>
+<li>
+  <a href="../news/index.html">News</a>
+</li>
+      </ul>
+      
+      <ul class="nav navbar-nav navbar-right">
+        <li>
+  <a href="https://github.com/Oshlack/splatter">
+    <span class="fa fa-github fa-lg"></span>
+     
+  </a>
+</li>
+      </ul>
+    </div><!--/.nav-collapse -->
+  </div><!--/.container -->
+</div><!--/.navbar -->
+
+      
+      </header>
+
+      <div class="row">
+  <div class="col-md-9 contents">
+    <div class="page-header">
+    <h1>Estimate mfa simulation parameters</h1>
+    </div>
+
+    
+    <p>Estimate simulation parameters for the mfa simulation from a real dataset.</p>
+    
+
+    <pre class="usage"><span class='fu'>mfaEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newMFAParams</a></span>())
+
+<span class='co'># S3 method for SingleCellExperiment</span>
+<span class='fu'>mfaEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newMFAParams</a></span>())
+
+<span class='co'># S3 method for matrix</span>
+<span class='fu'>mfaEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newMFAParams</a></span>())</pre>
+    
+    <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a> Arguments</h2>
+    <table class="ref-arguments">
+    <colgroup><col class="name" /><col class="desc" /></colgroup>
+    <tr>
+      <th>counts</th>
+      <td><p>either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.</p></td>
+    </tr>
+    <tr>
+      <th>params</th>
+      <td><p>MFAParams object to store estimated values in.</p></td>
+    </tr>
+    </table>
+    
+    <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
+
+    <p>MFAParams object containing the estimated parameters.</p>
+    
+    <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
+
+    <p>The <code>nGenes</code> and <code>nCells</code> parameters are taken from the size of the
+input data. The dropout lambda parameter is estimate using
+<code><a href='http://www.rdocumentation.org/packages/mfa/topics/empirical_lambda'>empirical_lambda</a></code>. See <code><a href='MFAParams.html'>MFAParams</a></code> for more
+details on the parameters.</p>
+    
+
+    <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
+    <pre class="examples"><div class='input'><span class='fu'>data</span>(<span class='st'>"sc_example_counts"</span>)
+<span class='no'>params</span> <span class='kw'>&lt;-</span> <span class='fu'>mfaEstimate</span>(<span class='no'>sc_example_counts</span>)
+<span class='no'>params</span></div><div class='output co'>#&gt; A Params object of class MFAParams 
+#&gt; Parameters can be (estimable) or [not estimable], 'Default' or 'NOT DEFAULT'. 
+#&gt; 
+#&gt; Global: 
+#&gt; (GENES)  (CELLS)   [Seed]  
+#&gt;    2000       40    80751  
+#&gt; 
+#&gt; 4 additional parameters 
+#&gt; 
+#&gt; Transient: 
+#&gt; [Proportion]  
+#&gt;            0  
+#&gt; 
+#&gt; Negative: 
+#&gt; [Zero]  
+#&gt;   TRUE  
+#&gt; 
+#&gt; Dropout: 
+#&gt;           [Present]             (LAMBDA)  
+#&gt;               FALSE  0.00352186231063193  
+#&gt; </div></pre>
+  </div>
+  <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+    <h2>Contents</h2>
+    <ul class="nav nav-pills nav-stacked">
+      <li><a href="#arguments">Arguments</a></li>
+      
+      <li><a href="#value">Value</a></li>
+
+      <li><a href="#details">Details</a></li>
+      
+      <li><a href="#examples">Examples</a></li>
+    </ul>
+
+  </div>
+</div>
+
+      <footer>
+      <div class="copyright">
+  <p>Developed by Luke Zappia, Belinda Phipson, Alicia Oshlack.</p>
+</div>
+
+<div class="pkgdown">
+  <p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
+</div>
+
+      </footer>
+   </div>
+
+  </body>
+</html>
diff --git a/docs/reference/mfaSimulate.html b/docs/reference/mfaSimulate.html
new file mode 100644
index 0000000000000000000000000000000000000000..f0365d753ec6394242e02404a28ab09a3f01f52c
--- /dev/null
+++ b/docs/reference/mfaSimulate.html
@@ -0,0 +1,183 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>MFA simulation — mfaSimulate • Splatter</title>
+
+<!-- jquery -->
+<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
+
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
+
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../jquery.sticky-kit.min.js"></script>
+<script src="../pkgdown.js"></script>
+  <link href="../extra.css" rel="stylesheet">
+  
+<!-- mathjax -->
+<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+<!-- Google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-52309538-4', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+  </head>
+
+  <body>
+    <div class="container template-reference-topic">
+      <header>
+      <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="../index.html">splatter</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav">
+        <li>
+  <a href="..//index.html">
+    <span class="fa fa-home fa-lg"></span>
+     
+  </a>
+</li>
+<li>
+  <a href="../articles/splatter.html">Get Started</a>
+</li>
+<li>
+  <a href="../reference/index.html">Reference</a>
+</li>
+<li>
+  <a href="../news/index.html">News</a>
+</li>
+      </ul>
+      
+      <ul class="nav navbar-nav navbar-right">
+        <li>
+  <a href="https://github.com/Oshlack/splatter">
+    <span class="fa fa-github fa-lg"></span>
+     
+  </a>
+</li>
+      </ul>
+    </div><!--/.nav-collapse -->
+  </div><!--/.container -->
+</div><!--/.navbar -->
+
+      
+      </header>
+
+      <div class="row">
+  <div class="col-md-9 contents">
+    <div class="page-header">
+    <h1>MFA simulation</h1>
+    </div>
+
+    
+    <p>Simulate a bifurcating pseudotime path using the mfa method.</p>
+    
+
+    <pre class="usage"><span class='fu'>mfaSimulate</span>(<span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newMFAParams</a></span>(), <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='no'>...</span>)</pre>
+    
+    <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a> Arguments</h2>
+    <table class="ref-arguments">
+    <colgroup><col class="name" /><col class="desc" /></colgroup>
+    <tr>
+      <th>params</th>
+      <td><p>MFAParams object containing simulation parameters.</p></td>
+    </tr>
+    <tr>
+      <th>verbose</th>
+      <td><p>Logical. Whether to print progress messages.</p></td>
+    </tr>
+    <tr>
+      <th>...</th>
+      <td><p>any additional parameter settings to override what is provided in
+<code>params</code>.</p></td>
+    </tr>
+    </table>
+    
+    <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
+
+    <p>SingleCellExperiment containing simulated counts</p>
+    
+    <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
+
+    <p>This function is just a wrapper around <code><a href='http://www.rdocumentation.org/packages/mfa/topics/create_synthetic'>create_synthetic</a></code>
+that takes a <code><a href='MFAParams.html'>MFAParams</a></code>, runs the simulation then converts the
+output from log-expression to counts and returns a
+<code><a href='http://www.rdocumentation.org/packages/SingleCellExperiment/topics/SingleCellExperiment'>SingleCellExperiment</a></code> object. See
+<code><a href='http://www.rdocumentation.org/packages/mfa/topics/create_synthetic'>create_synthetic</a></code> and the mfa paper for more details about
+how the simulation works.</p>
+    
+    <h2 class="hasAnchor" id="references"><a class="anchor" href="#references"></a>References</h2>
+
+    <p>Campbell KR, Yau C. Probabilistic modeling of bifurcations in single-cell
+gene expression data using a Bayesian mixture of factor analyzers. Wellcome
+Open Research (2017).</p>
+<p>Paper: <a href='10.12688/wellcomeopenres.11087.1'>10.12688/wellcomeopenres.11087.1</a></p>
+<p>Code: <a href='https://github.com/kieranrcampbell/mfa'>https://github.com/kieranrcampbell/mfa</a></p>
+    
+
+    <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
+    <pre class="examples"><div class='input'><span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>mfaSimulate</span>()</div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final dataset...</span></div></pre>
+  </div>
+  <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+    <h2>Contents</h2>
+    <ul class="nav nav-pills nav-stacked">
+      <li><a href="#arguments">Arguments</a></li>
+      
+      <li><a href="#value">Value</a></li>
+
+      <li><a href="#details">Details</a></li>
+
+      <li><a href="#references">References</a></li>
+      
+      <li><a href="#examples">Examples</a></li>
+    </ul>
+
+  </div>
+</div>
+
+      <footer>
+      <div class="copyright">
+  <p>Developed by Luke Zappia, Belinda Phipson, Alicia Oshlack.</p>
+</div>
+
+<div class="pkgdown">
+  <p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
+</div>
+
+      </footer>
+   </div>
+
+  </body>
+</html>
diff --git a/docs/reference/newParams.html b/docs/reference/newParams.html
index e7e24261eed902665f735b8546bddb332bc31a5f..f4a4e70af542d39e7fd1ae5f96078a8115ba9684 100644
--- a/docs/reference/newParams.html
+++ b/docs/reference/newParams.html
@@ -110,11 +110,17 @@ Params subtypes.</p>
 
 <span class='fu'>newLunParams</span>(<span class='no'>...</span>)
 
+<span class='fu'>newMFAParams</span>(<span class='no'>...</span>)
+
+<span class='fu'>newPhenoParams</span>(<span class='no'>...</span>)
+
 <span class='fu'>newSCDDParams</span>(<span class='no'>...</span>)
 
 <span class='fu'>newSimpleParams</span>(<span class='no'>...</span>)
 
-<span class='fu'>newSplatParams</span>(<span class='no'>...</span>)</pre>
+<span class='fu'>newSplatParams</span>(<span class='no'>...</span>)
+
+<span class='fu'>newZINBParams</span>(<span class='no'>...</span>)</pre>
     
     <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a> Arguments</h2>
     <table class="ref-arguments">
diff --git a/docs/reference/phenoEstimate.html b/docs/reference/phenoEstimate.html
new file mode 100644
index 0000000000000000000000000000000000000000..60f7ec4bf34ab36f4a50ea70f7f269b1bb3a5b80
--- /dev/null
+++ b/docs/reference/phenoEstimate.html
@@ -0,0 +1,188 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>Estimate PhenoPath simulation parameters — phenoEstimate • Splatter</title>
+
+<!-- jquery -->
+<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
+
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
+
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../jquery.sticky-kit.min.js"></script>
+<script src="../pkgdown.js"></script>
+  <link href="../extra.css" rel="stylesheet">
+  
+<!-- mathjax -->
+<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+<!-- Google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-52309538-4', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+  </head>
+
+  <body>
+    <div class="container template-reference-topic">
+      <header>
+      <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="../index.html">splatter</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav">
+        <li>
+  <a href="..//index.html">
+    <span class="fa fa-home fa-lg"></span>
+     
+  </a>
+</li>
+<li>
+  <a href="../articles/splatter.html">Get Started</a>
+</li>
+<li>
+  <a href="../reference/index.html">Reference</a>
+</li>
+<li>
+  <a href="../news/index.html">News</a>
+</li>
+      </ul>
+      
+      <ul class="nav navbar-nav navbar-right">
+        <li>
+  <a href="https://github.com/Oshlack/splatter">
+    <span class="fa fa-github fa-lg"></span>
+     
+  </a>
+</li>
+      </ul>
+    </div><!--/.nav-collapse -->
+  </div><!--/.container -->
+</div><!--/.navbar -->
+
+      
+      </header>
+
+      <div class="row">
+  <div class="col-md-9 contents">
+    <div class="page-header">
+    <h1>Estimate PhenoPath simulation parameters</h1>
+    </div>
+
+    
+    <p>Estimate simulation parameters for the PhenoPath simulation from a real
+dataset.</p>
+    
+
+    <pre class="usage"><span class='fu'>phenoEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newPhenoParams</a></span>())
+
+<span class='co'># S3 method for SingleCellExperiment</span>
+<span class='fu'>phenoEstimate</span>(<span class='no'>counts</span>,
+  <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newPhenoParams</a></span>())
+
+<span class='co'># S3 method for matrix</span>
+<span class='fu'>phenoEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newPhenoParams</a></span>())</pre>
+    
+    <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a> Arguments</h2>
+    <table class="ref-arguments">
+    <colgroup><col class="name" /><col class="desc" /></colgroup>
+    <tr>
+      <th>counts</th>
+      <td><p>either a counts matrix or an SingleCellExperiment object
+containing count data to estimate parameters from.</p></td>
+    </tr>
+    <tr>
+      <th>params</th>
+      <td><p>PhenoParams object to store estimated values in.</p></td>
+    </tr>
+    </table>
+    
+    <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
+
+    <p>PhenoParams object containing the estimated parameters.</p>
+    
+    <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
+
+    <p>The <code>nGenes</code> and <code>nCells</code> parameters are taken from the size of the
+input data. The total number of genes is evenly divided into the four types.
+See <code><a href='PhenoParams.html'>PhenoParams</a></code> for more details on the parameters.</p>
+    
+
+    <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
+    <pre class="examples"><div class='input'><span class='fu'>data</span>(<span class='st'>"sc_example_counts"</span>)
+<span class='no'>params</span> <span class='kw'>&lt;-</span> <span class='fu'>phenoEstimate</span>(<span class='no'>sc_example_counts</span>)
+<span class='no'>params</span></div><div class='output co'>#&gt; A Params object of class PhenoParams 
+#&gt; Parameters can be (estimable) or [not estimable], 'Default' or 'NOT DEFAULT'. 
+#&gt; 
+#&gt; Global: 
+#&gt; (GENES)  (CELLS)   [Seed]  
+#&gt;    2000       40    80751  
+#&gt; 
+#&gt; 4 additional parameters 
+#&gt; 
+#&gt; Genes: 
+#&gt;              [DE]              [PST]       [PST + BETA]  [DE + PST + BETA]  
+#&gt;               500                500                500                500  
+#&gt; </div></pre>
+  </div>
+  <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+    <h2>Contents</h2>
+    <ul class="nav nav-pills nav-stacked">
+      <li><a href="#arguments">Arguments</a></li>
+      
+      <li><a href="#value">Value</a></li>
+
+      <li><a href="#details">Details</a></li>
+      
+      <li><a href="#examples">Examples</a></li>
+    </ul>
+
+  </div>
+</div>
+
+      <footer>
+      <div class="copyright">
+  <p>Developed by Luke Zappia, Belinda Phipson, Alicia Oshlack.</p>
+</div>
+
+<div class="pkgdown">
+  <p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
+</div>
+
+      </footer>
+   </div>
+
+  </body>
+</html>
diff --git a/docs/reference/phenoSimulate.html b/docs/reference/phenoSimulate.html
new file mode 100644
index 0000000000000000000000000000000000000000..1d84c2c4e049e029cefe5fc5ec6829f553cf4d12
--- /dev/null
+++ b/docs/reference/phenoSimulate.html
@@ -0,0 +1,186 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>PhenoPath simulation — phenoSimulate • Splatter</title>
+
+<!-- jquery -->
+<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
+
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
+
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../jquery.sticky-kit.min.js"></script>
+<script src="../pkgdown.js"></script>
+  <link href="../extra.css" rel="stylesheet">
+  
+<!-- mathjax -->
+<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+<!-- Google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-52309538-4', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+  </head>
+
+  <body>
+    <div class="container template-reference-topic">
+      <header>
+      <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="../index.html">splatter</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav">
+        <li>
+  <a href="..//index.html">
+    <span class="fa fa-home fa-lg"></span>
+     
+  </a>
+</li>
+<li>
+  <a href="../articles/splatter.html">Get Started</a>
+</li>
+<li>
+  <a href="../reference/index.html">Reference</a>
+</li>
+<li>
+  <a href="../news/index.html">News</a>
+</li>
+      </ul>
+      
+      <ul class="nav navbar-nav navbar-right">
+        <li>
+  <a href="https://github.com/Oshlack/splatter">
+    <span class="fa fa-github fa-lg"></span>
+     
+  </a>
+</li>
+      </ul>
+    </div><!--/.nav-collapse -->
+  </div><!--/.container -->
+</div><!--/.navbar -->
+
+      
+      </header>
+
+      <div class="row">
+  <div class="col-md-9 contents">
+    <div class="page-header">
+    <h1>PhenoPath simulation</h1>
+    </div>
+
+    
+    <p>Simulate counts from a pseudotime trajectory using the PhenoPath method.</p>
+    
+
+    <pre class="usage"><span class='fu'>phenoSimulate</span>(<span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newPhenoParams</a></span>(), <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='no'>...</span>)</pre>
+    
+    <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a> Arguments</h2>
+    <table class="ref-arguments">
+    <colgroup><col class="name" /><col class="desc" /></colgroup>
+    <tr>
+      <th>params</th>
+      <td><p>PhenoParams object containing simulation parameters.</p></td>
+    </tr>
+    <tr>
+      <th>verbose</th>
+      <td><p>logical. Whether to print progress messages</p></td>
+    </tr>
+    <tr>
+      <th>...</th>
+      <td><p>any additional parameter settings to override what is provided in
+<code>params</code>.</p></td>
+    </tr>
+    </table>
+    
+    <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
+
+    <p>SingleCellExperiment containing simulated counts</p>
+    
+    <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
+
+    <p>This function is just a wrapper around
+<code><a href='http://www.rdocumentation.org/packages/phenopath/topics/simulate_phenopath'>simulate_phenopath</a></code> that takes a
+<code><a href='PhenoParams.html'>PhenoParams</a></code>, runs the simulation then converts the
+output from log-expression to counts and returns a
+<code><a href='http://www.rdocumentation.org/packages/SingleCellExperiment/topics/SingleCellExperiment'>SingleCellExperiment</a></code> object. The original
+simulated log-expression values are returned in the <code>LogExprs</code> asssay.
+See <code><a href='http://www.rdocumentation.org/packages/phenopath/topics/simulate_phenopath'>simulate_phenopath</a></code> and the PhenoPath paper for
+more details about how the simulation works.</p>
+    
+    <h2 class="hasAnchor" id="references"><a class="anchor" href="#references"></a>References</h2>
+
+    <p>Campbell K, Yau C. Uncovering genomic trajectories with heterogeneous genetic
+and environmental backgrounds across single-cells and populations. bioRxiv
+(2017).</p>
+<p>Paper: <a href='10.1101/159913'>10.1101/159913</a></p>
+<p>Code: <a href='https://github.com/kieranrcampbell/phenopath'>https://github.com/kieranrcampbell/phenopath</a></p>
+    
+
+    <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
+    <pre class="examples"><div class='input'><span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>phenoSimulate</span>()</div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final dataset...</span></div><div class='input'>
+</div></pre>
+  </div>
+  <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+    <h2>Contents</h2>
+    <ul class="nav nav-pills nav-stacked">
+      <li><a href="#arguments">Arguments</a></li>
+      
+      <li><a href="#value">Value</a></li>
+
+      <li><a href="#details">Details</a></li>
+
+      <li><a href="#references">References</a></li>
+      
+      <li><a href="#examples">Examples</a></li>
+    </ul>
+
+  </div>
+</div>
+
+      <footer>
+      <div class="copyright">
+  <p>Developed by Luke Zappia, Belinda Phipson, Alicia Oshlack.</p>
+</div>
+
+<div class="pkgdown">
+  <p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
+</div>
+
+      </footer>
+   </div>
+
+  </body>
+</html>
diff --git a/docs/reference/scDDEstimate.html b/docs/reference/scDDEstimate.html
index 6d47efec794d013b6f06c593c92a5a6557c15a6b..19ec722e1ad62bedf9456f9952e507c87b8d4f66 100644
--- a/docs/reference/scDDEstimate.html
+++ b/docs/reference/scDDEstimate.html
@@ -105,29 +105,28 @@
     <p>Estimate simulation parameters for the scDD simulation from a real dataset.</p>
     
 
-    <pre class="usage"><span class='fu'>scDDEstimate</span>(<span class='no'>counts</span>, <span class='no'>conditions</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSCDDParams</a></span>(), <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>,
-  <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>())
-
-<span class='co'># S3 method for SCESet</span>
-<span class='fu'>scDDEstimate</span>(<span class='no'>counts</span>, <span class='no'>conditions</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSCDDParams</a></span>(),
-  <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>())
+    <pre class="usage"><span class='fu'>scDDEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSCDDParams</a></span>(), <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>,
+  <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>(), <span class='no'>...</span>)
 
 <span class='co'># S3 method for matrix</span>
-<span class='fu'>scDDEstimate</span>(<span class='no'>counts</span>, <span class='no'>conditions</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSCDDParams</a></span>(),
-  <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>())</pre>
+<span class='fu'>scDDEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSCDDParams</a></span>(),
+  <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>(), <span class='no'>conditions</span>, <span class='no'>...</span>)
+
+<span class='co'># S3 method for SingleCellExperiment</span>
+<span class='fu'>scDDEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSCDDParams</a></span>(),
+  <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>(), <span class='kw'>condition</span> <span class='kw'>=</span> <span class='st'>"condition"</span>, <span class='no'>...</span>)
+
+<span class='co'># S3 method for default</span>
+<span class='fu'>scDDEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSCDDParams</a></span>(),
+  <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>(), <span class='no'>condition</span>, <span class='no'>...</span>)</pre>
     
     <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a> Arguments</h2>
     <table class="ref-arguments">
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>counts</th>
-      <td><p>either a counts matrix or an SCESet object containing count
-data to estimate parameters from.</p></td>
-    </tr>
-    <tr>
-      <th>conditions</th>
-      <td><p>Vector giving the condition that each cell belongs to.
-Conditions can be 1 or 2.</p></td>
+      <td><p>either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -142,6 +141,20 @@ Conditions can be 1 or 2.</p></td>
       <td><p>A <code><a href='http://www.rdocumentation.org/packages/BiocParallel/topics/BiocParallelParam-class'>BiocParallelParam</a></code> instance
 giving the parallel back-end to be used. Default is
 <code><a href='http://www.rdocumentation.org/packages/BiocParallel/topics/SerialParam-class'>SerialParam</a></code> which uses a single core.</p></td>
+    </tr>
+    <tr>
+      <th>...</th>
+      <td><p>further arguments passed to or from other methods.</p></td>
+    </tr>
+    <tr>
+      <th>conditions</th>
+      <td><p>Vector giving the condition that each cell belongs to.
+Conditions can be 1 or 2.</p></td>
+    </tr>
+    <tr>
+      <th>condition</th>
+      <td><p>String giving the column that represents biological group of
+interest.</p></td>
     </tr>
     </table>
     
diff --git a/docs/reference/scDDSimulate.html b/docs/reference/scDDSimulate.html
index 7375ccad46ddc46e9abadf7b783673286a183447..397d4b5a9be488614c20e026080bb59adc9dee3c 100644
--- a/docs/reference/scDDSimulate.html
+++ b/docs/reference/scDDSimulate.html
@@ -143,14 +143,15 @@ giving the parallel back-end to be used. Default is
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet containing simulated counts</p>
+    <p>SingleCellExperiment containing simulated counts</p>
     
     <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
 
     <p>This function is just a wrapper around <code><a href='http://www.rdocumentation.org/packages/scDD/topics/simulateSet'>simulateSet</a></code> that
 takes a <code><a href='SCDDParams.html'>SCDDParams</a></code>, runs the simulation then converts the
-output to an <code><a href='http://www.rdocumentation.org/packages/scater/topics/SCESet'>SCESet</a></code> object. See
-<code><a href='http://www.rdocumentation.org/packages/scDD/topics/simulateSet'>simulateSet</a></code> for more details of how the simulation works.</p>
+output to a <code><a href='http://www.rdocumentation.org/packages/SingleCellExperiment/topics/SingleCellExperiment'>SingleCellExperiment</a></code> object.
+See <code><a href='http://www.rdocumentation.org/packages/scDD/topics/simulateSet'>simulateSet</a></code> for more details about how the simulation
+works.</p>
     
     <h2 class="hasAnchor" id="references"><a class="anchor" href="#references"></a>References</h2>
 
diff --git a/docs/reference/setParam.html b/docs/reference/setParam.html
index 827501fd893943cfb93ef3b87751f3e733f85d25..99335c81d2b59cea9716a897ff877b6b8bf887f7 100644
--- a/docs/reference/setParam.html
+++ b/docs/reference/setParam.html
@@ -116,10 +116,16 @@
 <span class='co'># S4 method for Params</span>
 <span class='fu'>setParam</span>(<span class='no'>object</span>, <span class='no'>name</span>, <span class='no'>value</span>)
 
+<span class='co'># S4 method for PhenoParams</span>
+<span class='fu'>setParam</span>(<span class='no'>object</span>, <span class='no'>name</span>, <span class='no'>value</span>)
+
 <span class='co'># S4 method for SCDDParams</span>
 <span class='fu'>setParam</span>(<span class='no'>object</span>, <span class='no'>name</span>, <span class='no'>value</span>)
 
 <span class='co'># S4 method for SplatParams</span>
+<span class='fu'>setParam</span>(<span class='no'>object</span>, <span class='no'>name</span>, <span class='no'>value</span>)
+
+<span class='co'># S4 method for ZINBParams</span>
 <span class='fu'>setParam</span>(<span class='no'>object</span>, <span class='no'>name</span>, <span class='no'>value</span>)</pre>
     
     <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a> Arguments</h2>
@@ -151,7 +157,7 @@
 #&gt; 
 #&gt; Global: 
 #&gt; (GENES)  (Cells)   [Seed]  
-#&gt;     100      100    88458  
+#&gt;     100      100    80751  
 #&gt; 
 #&gt; 3 additional parameters 
 #&gt; 
diff --git a/docs/reference/setParams.html b/docs/reference/setParams.html
index a4d4f35230e5b688d40edb43b22a3f9db8372df8..fce88df4cb077ae9e146819f48ea87d99bfb503b 100644
--- a/docs/reference/setParams.html
+++ b/docs/reference/setParams.html
@@ -146,7 +146,7 @@ them manually), see examples.</p>
 #&gt; 
 #&gt; Global: 
 #&gt; (Genes)  (Cells)   [Seed]  
-#&gt;   10000      100    88458  
+#&gt;   10000      100    80751  
 #&gt; 
 #&gt; 3 additional parameters 
 #&gt; 
@@ -164,7 +164,7 @@ them manually), see examples.</p>
 #&gt; 
 #&gt; Global: 
 #&gt; (GENES)  (CELLS)   [Seed]  
-#&gt;    1000       50    88458  
+#&gt;    1000       50    80751  
 #&gt; 
 #&gt; 3 additional parameters 
 #&gt; 
@@ -182,7 +182,7 @@ them manually), see examples.</p>
 #&gt; 
 #&gt; Global: 
 #&gt; (GENES)  (CELLS)   [Seed]  
-#&gt;    1000       50    88458  
+#&gt;    1000       50    80751  
 #&gt; 
 #&gt; 3 additional parameters 
 #&gt; 
diff --git a/docs/reference/simpleEstimate.html b/docs/reference/simpleEstimate.html
index b9a4cc3a3e173cbccc43f67bc342d104e565f270..4b84b6729feb6a544eb9cf305f59a0e9c76ad8ab 100644
--- a/docs/reference/simpleEstimate.html
+++ b/docs/reference/simpleEstimate.html
@@ -107,8 +107,9 @@
 
     <pre class="usage"><span class='fu'>simpleEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSimpleParams</a></span>())
 
-<span class='co'># S3 method for SCESet</span>
-<span class='fu'>simpleEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSimpleParams</a></span>())
+<span class='co'># S3 method for SingleCellExperiment</span>
+<span class='fu'>simpleEstimate</span>(<span class='no'>counts</span>,
+  <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSimpleParams</a></span>())
 
 <span class='co'># S3 method for matrix</span>
 <span class='fu'>simpleEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSimpleParams</a></span>())</pre>
@@ -118,8 +119,8 @@
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>counts</th>
-      <td><p>either a counts matrix or an SCESet object containing count
-data to estimate parameters from.</p></td>
+      <td><p>either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -148,7 +149,7 @@ details on the parameters.</p>
 #&gt; 
 #&gt; Global: 
 #&gt; (GENES)  (CELLS)   [Seed]  
-#&gt;    2000       40    88458  
+#&gt;    2000       40    80751  
 #&gt; 
 #&gt; 3 additional parameters 
 #&gt; 
diff --git a/docs/reference/simpleSimulate.html b/docs/reference/simpleSimulate.html
index d86c2155aff536291fdd5c77dac8bb55e8222af1..e96bf35ffcf92fb3721137a2e7c1c313a0e24c6b 100644
--- a/docs/reference/simpleSimulate.html
+++ b/docs/reference/simpleSimulate.html
@@ -128,7 +128,7 @@ simulated library sizes, differential expression etc.</p>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet containing simulated counts</p>
+    <p>SingleCellExperiment containing simulated counts</p>
     
     <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
 
@@ -140,8 +140,8 @@ details of the parameters.</p>
     
 
     <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
-    <pre class="examples"><div class='input'><span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>simpleSimulate</span>()</div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final SCESet...</span></div><div class='input'><span class='co'># Override default parameters</span>
-<span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>simpleSimulate</span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>nCells</span> <span class='kw'>=</span> <span class='fl'>50</span>)</div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final SCESet...</span></div></pre>
+    <pre class="examples"><div class='input'><span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>simpleSimulate</span>()</div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final dataset...</span></div><div class='input'><span class='co'># Override default parameters</span>
+<span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>simpleSimulate</span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>nCells</span> <span class='kw'>=</span> <span class='fl'>50</span>)</div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final dataset...</span></div></pre>
   </div>
   <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
     <h2>Contents</h2>
diff --git a/docs/reference/splatEstimate.html b/docs/reference/splatEstimate.html
index 1d4eb2254d070d68a0b375f89dfa13fb39392f6f..93bca84e612a8ad0975e6d8600f9d0b841b9e4de 100644
--- a/docs/reference/splatEstimate.html
+++ b/docs/reference/splatEstimate.html
@@ -109,8 +109,9 @@ is done.</p>
 
     <pre class="usage"><span class='fu'>splatEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSplatParams</a></span>())
 
-<span class='co'># S3 method for SCESet</span>
-<span class='fu'>splatEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSplatParams</a></span>())
+<span class='co'># S3 method for SingleCellExperiment</span>
+<span class='fu'>splatEstimate</span>(<span class='no'>counts</span>,
+  <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSplatParams</a></span>())
 
 <span class='co'># S3 method for matrix</span>
 <span class='fu'>splatEstimate</span>(<span class='no'>counts</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newSplatParams</a></span>())</pre>
@@ -120,8 +121,8 @@ is done.</p>
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>counts</th>
-      <td><p>either a counts matrix or an SCESet object containing count
-data to estimate parameters from.</p></td>
+      <td><p>either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -148,7 +149,7 @@ data to estimate parameters from.</p></td>
 #&gt; 
 #&gt; Global: 
 #&gt; (GENES)  (CELLS)   [Seed]  
-#&gt;    2000       40    88458  
+#&gt;    2000       40    80751  
 #&gt; 
 #&gt; 27 additional parameters 
 #&gt; 
diff --git a/docs/reference/splatSimBCVMeans.html b/docs/reference/splatSimBCVMeans.html
index ba6bfcfd7b8096389736750ec83125f02a4e820b..7e0c42284bda2151802ffbaf65c12907050e6088 100644
--- a/docs/reference/splatSimBCVMeans.html
+++ b/docs/reference/splatSimBCVMeans.html
@@ -114,7 +114,7 @@ and inverse gamma distribution.</p>
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>sim</th>
-      <td><p>SCESet to add BCV means to.</p></td>
+      <td><p>SingleCellExperiment to add BCV means to.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -124,7 +124,7 @@ and inverse gamma distribution.</p>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet with simulated BCV means.</p>
+    <p>SingleCellExperiment with simulated BCV means.</p>
     
 
   </div>
diff --git a/docs/reference/splatSimBatchCellMeans.html b/docs/reference/splatSimBatchCellMeans.html
index 1e8a32134a02cae13309c2e59021a388fca4e37d..5600e9430a9763870a8e484db31f1828f4e99360 100644
--- a/docs/reference/splatSimBatchCellMeans.html
+++ b/docs/reference/splatSimBatchCellMeans.html
@@ -113,7 +113,7 @@ factors.</p>
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>sim</th>
-      <td><p>SCESet to add batch means to.</p></td>
+      <td><p>SingleCellExperiment to add batch means to.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -123,7 +123,7 @@ factors.</p>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet with simulated batch means.</p>
+    <p>SingleCellExperiment with simulated batch means.</p>
     
 
   </div>
diff --git a/docs/reference/splatSimBatchEffects.html b/docs/reference/splatSimBatchEffects.html
index 5eb6fb530e23bd8e93dbebe4591b2f5d4426058a..1b059e35b8c711fffb44d4d684d12683336b118b 100644
--- a/docs/reference/splatSimBatchEffects.html
+++ b/docs/reference/splatSimBatchEffects.html
@@ -114,7 +114,7 @@ means for each batch.</p>
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>sim</th>
-      <td><p>SCESet to add batch effects to.</p></td>
+      <td><p>SingleCellExperiment to add batch effects to.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -124,7 +124,7 @@ means for each batch.</p>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet with simulated batch effects.</p>
+    <p>SingleCellExperiment with simulated batch effects.</p>
     
 
   </div>
diff --git a/docs/reference/splatSimCellMeans.html b/docs/reference/splatSimCellMeans.html
index 605d3bf8e2231b1dce578fcb0f9afd8cead309c0..cb90535a07415a3082bcb67920746df4b51a36fb 100644
--- a/docs/reference/splatSimCellMeans.html
+++ b/docs/reference/splatSimCellMeans.html
@@ -120,7 +120,7 @@ means are adjusted for each cell's expected library size.</p>
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>sim</th>
-      <td><p>SCESet to add cell means to.</p></td>
+      <td><p>SingleCellExperiment to add cell means to.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -130,7 +130,7 @@ means are adjusted for each cell's expected library size.</p>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet with added cell means.</p>
+    <p>SingleCellExperiment with added cell means.</p>
     
 
   </div>
diff --git a/docs/reference/splatSimDE.html b/docs/reference/splatSimDE.html
index cd926d7423465df0d414a504243ac3f9b4d53f1f..cf9c9e94befc0a78e6c3baf2a105a1abb182e9d1 100644
--- a/docs/reference/splatSimDE.html
+++ b/docs/reference/splatSimDE.html
@@ -117,7 +117,7 @@ they are simulated in the correct order.</p>
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>sim</th>
-      <td><p>SCESet to add differential expression to.</p></td>
+      <td><p>SingleCellExperiment to add differential expression to.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -127,7 +127,7 @@ they are simulated in the correct order.</p>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet with simulated differential expression.</p>
+    <p>SingleCellExperiment with simulated differential expression.</p>
     
 
   </div>
diff --git a/docs/reference/splatSimDropout.html b/docs/reference/splatSimDropout.html
index 612b648e40a1133872889011c0635498fac631a9..bcff9a23311d82a515e78c857e8308e2a4f1e8e1 100644
--- a/docs/reference/splatSimDropout.html
+++ b/docs/reference/splatSimDropout.html
@@ -115,7 +115,7 @@ to decide which counts should be dropped.</p>
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>sim</th>
-      <td><p>SCESet to add dropout to.</p></td>
+      <td><p>SingleCellExperiment to add dropout to.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -125,7 +125,7 @@ to decide which counts should be dropped.</p>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet with simulated dropout and observed counts.</p>
+    <p>SingleCellExperiment with simulated dropout and observed counts.</p>
     
 
   </div>
diff --git a/docs/reference/splatSimGeneMeans.html b/docs/reference/splatSimGeneMeans.html
index 47e35873077508b238454b03307f07be7b0b7672..4ac63ab88bb97720a9b86ae8b1c5725ede40217d 100644
--- a/docs/reference/splatSimGeneMeans.html
+++ b/docs/reference/splatSimGeneMeans.html
@@ -114,7 +114,7 @@ with the median mean expression multiplied by the outlier factor.</p>
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>sim</th>
-      <td><p>SCESet to add gene means to.</p></td>
+      <td><p>SingleCellExperiment to add gene means to.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -124,7 +124,7 @@ with the median mean expression multiplied by the outlier factor.</p>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet with simulated gene means.</p>
+    <p>SingleCellExperiment with simulated gene means.</p>
     
 
   </div>
diff --git a/docs/reference/splatSimLibSizes.html b/docs/reference/splatSimLibSizes.html
index e10e335cdd49d717b5bc4f9ccf8d01e73c699e32..a8cb353d521c96b48d71dfd4e0d8be4a5047de98 100644
--- a/docs/reference/splatSimLibSizes.html
+++ b/docs/reference/splatSimLibSizes.html
@@ -112,7 +112,7 @@
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>sim</th>
-      <td><p>SCESet to add library size to.</p></td>
+      <td><p>SingleCellExperiment to add library size to.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -122,7 +122,7 @@
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet with simulated library sizes.</p>
+    <p>SingleCellExperiment with simulated library sizes.</p>
     
 
   </div>
diff --git a/docs/reference/splatSimTrueCounts.html b/docs/reference/splatSimTrueCounts.html
index 5d8336b638dadda262bdaf5653a72a494d0b22be..6f0ed0f8f1ede60ff8a6ec4189dbabc5ad652cd4 100644
--- a/docs/reference/splatSimTrueCounts.html
+++ b/docs/reference/splatSimTrueCounts.html
@@ -114,7 +114,7 @@ group (or path position), expected library size and BCV.</p>
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>sim</th>
-      <td><p>SCESet to add true counts to.</p></td>
+      <td><p>SingleCellExperiment to add true counts to.</p></td>
     </tr>
     <tr>
       <th>params</th>
@@ -124,7 +124,7 @@ group (or path position), expected library size and BCV.</p>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet with simulated true counts.</p>
+    <p>SingleCellExperiment with simulated true counts.</p>
     
 
   </div>
diff --git a/docs/reference/splatSimulate.html b/docs/reference/splatSimulate.html
index 653dd21293154347f70faadd19a531043a83336a..85d30845689ac5af5f256576e1f8b912cb9c5c72 100644
--- a/docs/reference/splatSimulate.html
+++ b/docs/reference/splatSimulate.html
@@ -143,8 +143,8 @@ trajectories (eg. differentiation processes).</p></td>
     
     <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
 
-    <p>SCESet object containing the simulated counts and intermediate
-values.</p>
+    <p>SingleCellExperiment object containing the simulated counts and
+intermediate values.</p>
     
     <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
 
@@ -163,14 +163,15 @@ can be used.</p>
 <li><p>Simulate BCV adjusted cell means</p></li>
 <li><p>Simulate true counts</p></li>
 <li><p>Simulate dropout</p></li>
-<li><p>Create final SCESet object</p></li>
+<li><p>Create final dataset</p></li>
 </ol>
-    <p>The final output is an <code><a href='http://www.rdocumentation.org/packages/scater/topics/SCESet'>SCESet</a></code> object that contains the
-simulated counts but also the values for various intermediate steps. These
-are stored in the <code><a href='http://www.rdocumentation.org/packages/Biobase/topics/phenoData'>phenoData</a></code> (for cell specific
-information), <code><a href='http://www.rdocumentation.org/packages/Biobase/topics/featureData'>featureData</a></code> (for gene specific
-information) or <code><a href='http://www.rdocumentation.org/packages/Biobase/topics/assayData'>assayData</a></code> (for gene by cell matrices)
-slots. This additional information includes:</p><dl class='dl-horizontal'>
+    <p>The final output is a
+<code><a href='http://www.rdocumentation.org/packages/SingleCellExperiment/topics/SingleCellExperiment'>SingleCellExperiment</a></code> object that
+contains the simulated counts but also the values for various intermediate
+steps. These are stored in the <code><a href='http://www.rdocumentation.org/packages/SummarizedExperiment/topics/SummarizedExperiment-class'>colData</a></code>
+(for cell specific information), <code><a href='http://www.rdocumentation.org/packages/SummarizedExperiment/topics/SummarizedExperiment-class'>rowData</a></code>
+(for gene specific information) or <code><a href='http://www.rdocumentation.org/packages/SummarizedExperiment/topics/SummarizedExperiment-class'>assays</a></code>
+(for gene by cell matrices) slots. This additional information includes:</p><dl class='dl-horizontal'>
     <dt><code>phenoData</code></dt><dd><p><dl class='dl-horizontal'>
             <dt>Cell</dt><dd><p>Unique cell identifier.</p></dd>
             <dt>Group</dt><dd><p>The group or path the cell belongs to.</p></dd>
@@ -206,9 +207,9 @@ slots. This additional information includes:</p><dl class='dl-horizontal'>
             dropped in which cells.</p></dd>
         </dl></p></dd>
 </dl>
-    <p>Values that have been added by Splatter are named using <code>CamelCase</code> in
-order to differentiate them from the values added by Scater which uses
-<code>underscore_naming</code>.</p>
+    <p>Values that have been added by Splatter are named using <code>UpperCamelCase</code>
+in order to differentiate them from the values added by analysis packages
+which typically use <code>underscore_naming</code>.</p>
     
     <h2 class="hasAnchor" id="see-also"><a class="anchor" href="#see-also"></a>See also</h2>
 
@@ -220,9 +221,8 @@ order to differentiate them from the values added by Scater which uses
     
 
     <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
-    <pre class="examples"><div class='input'># Simulation with default parameters
-</div><span class='co'># NOT RUN {</span>
-<span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>splatSimulate</span>()
+    <pre class="examples"><div class='input'><span class='co'># Simulation with default parameters</span>
+<span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>splatSimulate</span>()</div><div class='output co'>#&gt; <span class='message'>Getting parameters...</span></div><div class='output co'>#&gt; <span class='message'>Creating simulation object...</span></div><div class='output co'>#&gt; <span class='message'>Simulating library sizes...</span></div><div class='output co'>#&gt; <span class='message'>Simulating gene means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating BCV...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts..</span></div><div class='output co'>#&gt; <span class='message'>Simulating dropout (if needed)...</span></div><div class='output co'>#&gt; <span class='message'>Done!</span></div><span class='co'># NOT RUN {</span>
 <span class='co'># Simulation with different number of genes</span>
 <span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>splatSimulate</span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>)
 <span class='co'># Simulation with custom parameters</span>
diff --git a/docs/reference/summariseDiff.html b/docs/reference/summariseDiff.html
index c1c76331d8941568792a8d176c4a151e76c5fea1..236c83c1bc918da684a9a17b3ae045ada6e97e6d 100644
--- a/docs/reference/summariseDiff.html
+++ b/docs/reference/summariseDiff.html
@@ -6,7 +6,7 @@
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
-<title>Summarise diffSCESets — summariseDiff • Splatter</title>
+<title>Summarise diffSCESs — summariseDiff • Splatter</title>
 
 <!-- jquery -->
 <script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
@@ -98,11 +98,11 @@
       <div class="row">
   <div class="col-md-9 contents">
     <div class="page-header">
-    <h1>Summarise diffSCESets</h1>
+    <h1>Summarise diffSCESs</h1>
     </div>
 
     
-    <p>Summarise the results of <code><a href='diffSCESets.html'>diffSCESets</a></code>. Calculates the Median
+    <p>Summarise the results of <code><a href='diffSCEs.html'>diffSCEs</a></code>. Calculates the Median
 Absolute Deviation (MAD), Mean Absolute Error (MAE) and Root Mean Squared
 Error (RMSE) for the various properties and ranks them.</p>
     
@@ -114,7 +114,7 @@ Error (RMSE) for the various properties and ranks them.</p>
     <colgroup><col class="name" /><col class="desc" /></colgroup>
     <tr>
       <th>diff</th>
-      <td><p>Output from <code><a href='diffSCESets.html'>diffSCESets</a></code></p></td>
+      <td><p>Output from <code><a href='diffSCEs.html'>diffSCEs</a></code></p></td>
     </tr>
     </table>
     
@@ -124,22 +124,22 @@ Error (RMSE) for the various properties and ranks them.</p>
     
 
     <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
-    <pre class="examples"><div class='input'><span class='no'>sim1</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='splatSimulate.html'>splatSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>batchCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)</div><div class='output co'>#&gt; <span class='message'>Getting parameters...</span></div><div class='output co'>#&gt; <span class='message'>Creating simulation object...</span></div><div class='output co'>#&gt; <span class='message'>Simulating library sizes...</span></div><div class='output co'>#&gt; <span class='message'>Simulating gene means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating BCV...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts..</span></div><div class='output co'>#&gt; <span class='message'>Simulating dropout (if needed)...</span></div><div class='output co'>#&gt; <span class='message'>Creating final SCESet...</span></div><div class='output co'>#&gt; <span class='message'>Done!</span></div><div class='input'><span class='no'>sim2</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='simpleSimulate.html'>simpleSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>nCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)</div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final SCESet...</span></div><div class='input'><span class='no'>difference</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='diffSCESets.html'>diffSCESets</a></span>(<span class='fu'>list</span>(<span class='kw'>Splat</span> <span class='kw'>=</span> <span class='no'>sim1</span>, <span class='kw'>Simple</span> <span class='kw'>=</span> <span class='no'>sim2</span>), <span class='kw'>ref</span> <span class='kw'>=</span> <span class='st'>"Simple"</span>)
+    <pre class="examples"><div class='input'><span class='no'>sim1</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='splatSimulate.html'>splatSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>batchCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)</div><div class='output co'>#&gt; <span class='message'>Getting parameters...</span></div><div class='output co'>#&gt; <span class='message'>Creating simulation object...</span></div><div class='output co'>#&gt; <span class='message'>Simulating library sizes...</span></div><div class='output co'>#&gt; <span class='message'>Simulating gene means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating BCV...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts..</span></div><div class='output co'>#&gt; <span class='message'>Simulating dropout (if needed)...</span></div><div class='output co'>#&gt; <span class='message'>Done!</span></div><div class='input'><span class='no'>sim2</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='simpleSimulate.html'>simpleSimulate</a></span>(<span class='kw'>nGenes</span> <span class='kw'>=</span> <span class='fl'>1000</span>, <span class='kw'>nCells</span> <span class='kw'>=</span> <span class='fl'>20</span>)</div><div class='output co'>#&gt; <span class='message'>Simulating means...</span></div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final dataset...</span></div><div class='input'><span class='no'>difference</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='diffSCEs.html'>diffSCEs</a></span>(<span class='fu'>list</span>(<span class='kw'>Splat</span> <span class='kw'>=</span> <span class='no'>sim1</span>, <span class='kw'>Simple</span> <span class='kw'>=</span> <span class='no'>sim2</span>), <span class='kw'>ref</span> <span class='kw'>=</span> <span class='st'>"Simple"</span>)
 <span class='no'>summary</span> <span class='kw'>&lt;-</span> <span class='fu'>summariseDiff</span>(<span class='no'>difference</span>)
 <span class='fu'>head</span>(<span class='no'>summary</span>)</div><div class='output co'>#&gt;   Dataset Statistic          MAD MADScaled MADRank          MAE MAEScaled
-#&gt; 1   Splat      Mean     2.680705       NaN       1     2.613714       NaN
-#&gt; 2   Splat  Variance    11.803596       NaN       1    10.839966       NaN
-#&gt; 3   Splat ZerosGene    35.000000       NaN       1    41.705000       NaN
-#&gt; 4   Splat   MeanVar    11.293733       NaN       1    12.494680       NaN
-#&gt; 5   Splat MeanZeros    45.000000       NaN       1    43.895000       NaN
-#&gt; 6   Splat   LibSize 62080.000000       NaN       1 63692.450000       NaN
+#&gt; 1   Splat      Mean     2.338299       NaN       1     2.392073       NaN
+#&gt; 2   Splat  Variance    11.506849       NaN       1    10.222706       NaN
+#&gt; 3   Splat ZerosGene    30.000000       NaN       1    38.780000       NaN
+#&gt; 4   Splat   MeanVar     9.588721       NaN       1    11.820910       NaN
+#&gt; 5   Splat MeanZeros    45.000000       NaN       1    42.060000       NaN
+#&gt; 6   Splat   LibSize 55543.500000       NaN       1 58282.850000       NaN
 #&gt;   MAERank         RMSE RMSEScaled RMSERank
-#&gt; 1       1     3.125188        NaN        1
-#&gt; 2       1    13.638865        NaN        1
-#&gt; 3       1    45.945892        NaN        1
-#&gt; 4       1    15.583460        NaN        1
-#&gt; 5       1    53.301735        NaN        1
-#&gt; 6       1 64680.944707        NaN        1</div></pre>
+#&gt; 1       1     2.907697        NaN        1
+#&gt; 2       1    12.865170        NaN        1
+#&gt; 3       1    44.006818        NaN        1
+#&gt; 4       1    14.953873        NaN        1
+#&gt; 5       1    51.575673        NaN        1
+#&gt; 6       1 59902.661935        NaN        1</div></pre>
   </div>
   <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
     <h2>Contents</h2>
diff --git a/docs/reference/zinbEstimate.html b/docs/reference/zinbEstimate.html
new file mode 100644
index 0000000000000000000000000000000000000000..29da734f978e6a770a8f471dfec8dcffd0546992
--- /dev/null
+++ b/docs/reference/zinbEstimate.html
@@ -0,0 +1,285 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>Estimate ZINB-WaVE simulation parameters — zinbEstimate • Splatter</title>
+
+<!-- jquery -->
+<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
+
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
+
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../jquery.sticky-kit.min.js"></script>
+<script src="../pkgdown.js"></script>
+  <link href="../extra.css" rel="stylesheet">
+  
+<!-- mathjax -->
+<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+<!-- Google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-52309538-4', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+  </head>
+
+  <body>
+    <div class="container template-reference-topic">
+      <header>
+      <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="../index.html">splatter</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav">
+        <li>
+  <a href="..//index.html">
+    <span class="fa fa-home fa-lg"></span>
+     
+  </a>
+</li>
+<li>
+  <a href="../articles/splatter.html">Get Started</a>
+</li>
+<li>
+  <a href="../reference/index.html">Reference</a>
+</li>
+<li>
+  <a href="../news/index.html">News</a>
+</li>
+      </ul>
+      
+      <ul class="nav navbar-nav navbar-right">
+        <li>
+  <a href="https://github.com/Oshlack/splatter">
+    <span class="fa fa-github fa-lg"></span>
+     
+  </a>
+</li>
+      </ul>
+    </div><!--/.nav-collapse -->
+  </div><!--/.container -->
+</div><!--/.navbar -->
+
+      
+      </header>
+
+      <div class="row">
+  <div class="col-md-9 contents">
+    <div class="page-header">
+    <h1>Estimate ZINB-WaVE simulation parameters</h1>
+    </div>
+
+    
+    <p>Estimate simulation parameters for the ZINB-WaVE simulation from a real
+dataset.</p>
+    
+
+    <pre class="usage"><span class='fu'>zinbEstimate</span>(<span class='no'>counts</span>, <span class='kw'>design.samples</span> <span class='kw'>=</span> <span class='kw'>NULL</span>, <span class='kw'>design.genes</span> <span class='kw'>=</span> <span class='kw'>NULL</span>,
+  <span class='kw'>common.disp</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>iter.init</span> <span class='kw'>=</span> <span class='fl'>2</span>, <span class='kw'>iter.opt</span> <span class='kw'>=</span> <span class='fl'>25</span>, <span class='kw'>stop.opt</span> <span class='kw'>=</span> <span class='fl'>1e-04</span>,
+  <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newZINBParams</a></span>(), <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>(), <span class='no'>...</span>)
+
+<span class='co'># S3 method for SingleCellExperiment</span>
+<span class='fu'>zinbEstimate</span>(<span class='no'>counts</span>, <span class='kw'>design.samples</span> <span class='kw'>=</span> <span class='kw'>NULL</span>,
+  <span class='kw'>design.genes</span> <span class='kw'>=</span> <span class='kw'>NULL</span>, <span class='kw'>common.disp</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>iter.init</span> <span class='kw'>=</span> <span class='fl'>2</span>, <span class='kw'>iter.opt</span> <span class='kw'>=</span> <span class='fl'>25</span>,
+  <span class='kw'>stop.opt</span> <span class='kw'>=</span> <span class='fl'>1e-04</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newZINBParams</a></span>(), <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>,
+  <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>(), <span class='no'>...</span>)
+
+<span class='co'># S3 method for matrix</span>
+<span class='fu'>zinbEstimate</span>(<span class='no'>counts</span>, <span class='kw'>design.samples</span> <span class='kw'>=</span> <span class='kw'>NULL</span>,
+  <span class='kw'>design.genes</span> <span class='kw'>=</span> <span class='kw'>NULL</span>, <span class='kw'>common.disp</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='kw'>iter.init</span> <span class='kw'>=</span> <span class='fl'>2</span>, <span class='kw'>iter.opt</span> <span class='kw'>=</span> <span class='fl'>25</span>,
+  <span class='kw'>stop.opt</span> <span class='kw'>=</span> <span class='fl'>1e-04</span>, <span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newZINBParams</a></span>(), <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>,
+  <span class='kw'>BPPARAM</span> <span class='kw'>=</span> <span class='fu'>SerialParam</span>(), <span class='no'>...</span>)</pre>
+    
+    <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a> Arguments</h2>
+    <table class="ref-arguments">
+    <colgroup><col class="name" /><col class="desc" /></colgroup>
+    <tr>
+      <th>counts</th>
+      <td><p>either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.</p></td>
+    </tr>
+    <tr>
+      <th>design.samples</th>
+      <td><p>design matrix of sample-level covariates.</p></td>
+    </tr>
+    <tr>
+      <th>design.genes</th>
+      <td><p>design matrix of gene-level covariates.</p></td>
+    </tr>
+    <tr>
+      <th>common.disp</th>
+      <td><p>logical. Whether or not a single dispersion for all
+features is estimated.</p></td>
+    </tr>
+    <tr>
+      <th>iter.init</th>
+      <td><p>number of iterations to use for initalization.</p></td>
+    </tr>
+    <tr>
+      <th>iter.opt</th>
+      <td><p>number of iterations to use for optimization.</p></td>
+    </tr>
+    <tr>
+      <th>stop.opt</th>
+      <td><p>stopping criterion for optimization.</p></td>
+    </tr>
+    <tr>
+      <th>params</th>
+      <td><p>ZINBParams object to store estimated values in.</p></td>
+    </tr>
+    <tr>
+      <th>verbose</th>
+      <td><p>logical. Whether to print progress messages.</p></td>
+    </tr>
+    <tr>
+      <th>BPPARAM</th>
+      <td><p>A <code><a href='http://www.rdocumentation.org/packages/BiocParallel/topics/BiocParallelParam-class'>BiocParallelParam</a></code> instance
+giving the parallel back-end to be used. Default is
+<code><a href='http://www.rdocumentation.org/packages/BiocParallel/topics/SerialParam-class'>SerialParam</a></code> which uses a single core.</p></td>
+    </tr>
+    <tr>
+      <th>...</th>
+      <td><p>additional arguments passes to <code><a href='http://www.rdocumentation.org/packages/zinbwave/topics/zinbFit'>zinbFit</a></code>.</p></td>
+    </tr>
+    </table>
+    
+    <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
+
+    <p>ZINBParams object containing the estimated parameters.</p>
+    
+    <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
+
+    <p>The function is a wrapper around <code><a href='http://www.rdocumentation.org/packages/zinbwave/topics/zinbFit'>zinbFit</a></code> that takes
+the fitted model and inserts it into a <code><a href='ZINBParams.html'>ZINBParams</a></code> object. See
+<code><a href='ZINBParams.html'>ZINBParams</a></code> for more details on the parameters and
+<code><a href='http://www.rdocumentation.org/packages/zinbwave/topics/zinbFit'>zinbFit</a></code> for details of the estimation procedure.</p>
+    
+
+    <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
+    <pre class="examples"><div class='input'><span class='fu'>data</span>(<span class='st'>"sc_example_counts"</span>)
+<span class='no'>params</span> <span class='kw'>&lt;-</span> <span class='fu'>zinbEstimate</span>(<span class='no'>sc_example_counts</span>)</div><div class='output co'>#&gt; <span class='message'>Removing all zero genes...</span></div><div class='output co'>#&gt; <span class='message'>Fitting model...</span></div><div class='output co'>#&gt; <span class='message'>Create model:</span></div><div class='output co'>#&gt; <span class='message'>ok</span></div><div class='output co'>#&gt; <span class='message'>Initialize parameters:</span></div><div class='output co'>#&gt; <span class='message'>ok</span></div><div class='output co'>#&gt; <span class='message'>Optimize parameters:</span></div><div class='output co'>#&gt; <span class='message'>Iteration 1</span></div><div class='output co'>#&gt; <span class='message'>penalized log-likelihood = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After dispersion optimization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   8.840   0.506   9.391 </div><div class='output co'>#&gt; <span class='message'>After right optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   0.573   0.041   0.617 </div><div class='output co'>#&gt; <span class='message'>After left optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>Iteration 2</span></div><div class='output co'>#&gt; <span class='message'>penalized log-likelihood = -200962.486229372</span></div><div class='output co'>#&gt; <span class='message'>After dispersion optimization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   6.414   0.345   6.790 </div><div class='output co'>#&gt; <span class='message'>After right optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   0.616   0.025   0.643 </div><div class='output co'>#&gt; <span class='message'>After left optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>Iteration 3</span></div><div class='output co'>#&gt; <span class='message'>penalized log-likelihood = -196682.271688862</span></div><div class='output co'>#&gt; <span class='message'>After dispersion optimization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   5.893   0.319   6.260 </div><div class='output co'>#&gt; <span class='message'>After right optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   0.616   0.022   0.640 </div><div class='output co'>#&gt; <span class='message'>After left optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>Iteration 4</span></div><div class='output co'>#&gt; <span class='message'>penalized log-likelihood = -195719.09604664</span></div><div class='output co'>#&gt; <span class='message'>After dispersion optimization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   4.808   0.251   5.075 </div><div class='output co'>#&gt; <span class='message'>After right optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   0.600   0.013   0.615 </div><div class='output co'>#&gt; <span class='message'>After left optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>Iteration 5</span></div><div class='output co'>#&gt; <span class='message'>penalized log-likelihood = -195487.316905869</span></div><div class='output co'>#&gt; <span class='message'>After dispersion optimization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   4.661   0.251   4.938 </div><div class='output co'>#&gt; <span class='message'>After right optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   0.613   0.021   0.636 </div><div class='output co'>#&gt; <span class='message'>After left optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>Iteration 6</span></div><div class='output co'>#&gt; <span class='message'>penalized log-likelihood = -195438.512431125</span></div><div class='output co'>#&gt; <span class='message'>After dispersion optimization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   4.363   0.219   4.594 </div><div class='output co'>#&gt; <span class='message'>After right optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt;    user  system elapsed 
+#&gt;   0.520   0.019   0.540 </div><div class='output co'>#&gt; <span class='message'>After left optimization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>After orthogonalization = -451653.610681949</span></div><div class='output co'>#&gt; <span class='message'>Iteration 7</span></div><div class='output co'>#&gt; <span class='message'>penalized log-likelihood = -195429.243799278</span></div><div class='output co'>#&gt; <span class='message'>ok</span></div><div class='input'><span class='no'>params</span></div><div class='output co'>#&gt; A Params object of class ZINBParams 
+#&gt; Parameters can be (estimable) or [not estimable], 'Default' or 'NOT DEFAULT'. 
+#&gt; 
+#&gt; Global: 
+#&gt; (GENES)  (CELLS)   [Seed]  
+#&gt;    1973       40    80751  
+#&gt; 
+#&gt; 1 additional parameters 
+#&gt; 
+#&gt; Model: 
+#&gt; ZinbModel with 1973 features, 40 samples, 0 latent factors and 4027 parameters 
+#&gt; 
+#&gt; Model Design: 
+#&gt;      (SAMPLES)         (GENES)  
+#&gt; 1, 1, 1, 1,...  1, 1, 1, 1,...  
+#&gt; 
+#&gt; Model Offsets: 
+#&gt;             (MU)              (PI)  
+#&gt; 40 x 1973 matrix  40 x 1973 matrix  
+#&gt; 
+#&gt; Model Indices: 
+#&gt; (Sample Mu)    (Gene Mu)  (Sample Pi)    (Gene Pi)  
+#&gt;           1            1            1            1  
+#&gt; 
+#&gt; Model Intercepts: 
+#&gt; (Sample Mu)    (Gene Mu)  (Sample Pi)    (Gene Pi)  
+#&gt;        TRUE         TRUE         TRUE         TRUE  
+#&gt; 
+#&gt; Model Latent factors: 
+#&gt;           (W)  
+#&gt; 40 x 0 matrix  
+#&gt; 
+#&gt; Model Coefficients: 
+#&gt;                                                                      (SAMPLE MU)  
+#&gt;        2.92563256904469, 2.4987993436997, 2.58202880827954, 1.97900548945704,...  
+#&gt;                                                                        (GENE MU)  
+#&gt;       3.47522026895399, 2.47301357124798, 3.24285373024315, 3.18809031726884,...  
+#&gt;                                                                      (Latent Mu)  
+#&gt;                                                                  0 x 1973 matrix  
+#&gt;                                                                      (SAMPLE PI)  
+#&gt;  -0.71252392787508, -2.22126441075684, -0.171737848601069, -1.44324267217097,...  
+#&gt;                                                                        (GENE PI)  
+#&gt; -0.0394934045621859, 0.702003614655306, 0.522586914345766, 0.331946546846606,...  
+#&gt;                                                                      (Latent Pi)  
+#&gt;                                                                  0 x 1973 matrix  
+#&gt; 
+#&gt; Model Regularisation: 
+#&gt;     (Sample Mu)        (GENE MU)      (Sample Pi)        (GENE PI)  
+#&gt;               1           49.325                1           49.325  
+#&gt;        (LATENT)  (Latent coeffs)           (ZETA)          (Logit)  
+#&gt;          49.325                1             1973            0.001  
+#&gt; </div></pre>
+  </div>
+  <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+    <h2>Contents</h2>
+    <ul class="nav nav-pills nav-stacked">
+      <li><a href="#arguments">Arguments</a></li>
+      
+      <li><a href="#value">Value</a></li>
+
+      <li><a href="#details">Details</a></li>
+      
+      <li><a href="#examples">Examples</a></li>
+    </ul>
+
+  </div>
+</div>
+
+      <footer>
+      <div class="copyright">
+  <p>Developed by Luke Zappia, Belinda Phipson, Alicia Oshlack.</p>
+</div>
+
+<div class="pkgdown">
+  <p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
+</div>
+
+      </footer>
+   </div>
+
+  </body>
+</html>
diff --git a/docs/reference/zinbSimulate.html b/docs/reference/zinbSimulate.html
new file mode 100644
index 0000000000000000000000000000000000000000..2dea5b285307787c5c4a91773dfe5dbc2375b805
--- /dev/null
+++ b/docs/reference/zinbSimulate.html
@@ -0,0 +1,186 @@
+<!-- Generated by pkgdown: do not edit by hand -->
+<!DOCTYPE html>
+<html>
+  <head>
+  <meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<title>ZINB-WaVE simulation — zinbSimulate • Splatter</title>
+
+<!-- jquery -->
+<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script>
+<!-- Bootstrap -->
+<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/cosmo/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
+
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+
+<!-- Font Awesome icons -->
+<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
+
+
+<!-- pkgdown -->
+<link href="../pkgdown.css" rel="stylesheet">
+<script src="../jquery.sticky-kit.min.js"></script>
+<script src="../pkgdown.js"></script>
+  <link href="../extra.css" rel="stylesheet">
+  
+<!-- mathjax -->
+<script src='https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
+
+<!--[if lt IE 9]>
+<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+<![endif]-->
+
+
+<!-- Google analytics -->
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-52309538-4', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+  </head>
+
+  <body>
+    <div class="container template-reference-topic">
+      <header>
+      <div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="../index.html">splatter</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav">
+        <li>
+  <a href="..//index.html">
+    <span class="fa fa-home fa-lg"></span>
+     
+  </a>
+</li>
+<li>
+  <a href="../articles/splatter.html">Get Started</a>
+</li>
+<li>
+  <a href="../reference/index.html">Reference</a>
+</li>
+<li>
+  <a href="../news/index.html">News</a>
+</li>
+      </ul>
+      
+      <ul class="nav navbar-nav navbar-right">
+        <li>
+  <a href="https://github.com/Oshlack/splatter">
+    <span class="fa fa-github fa-lg"></span>
+     
+  </a>
+</li>
+      </ul>
+    </div><!--/.nav-collapse -->
+  </div><!--/.container -->
+</div><!--/.navbar -->
+
+      
+      </header>
+
+      <div class="row">
+  <div class="col-md-9 contents">
+    <div class="page-header">
+    <h1>ZINB-WaVE simulation</h1>
+    </div>
+
+    
+    <p>Simulate counts using the ZINB-WaVE method.</p>
+    
+
+    <pre class="usage"><span class='fu'>zinbSimulate</span>(<span class='kw'>params</span> <span class='kw'>=</span> <span class='fu'><a href='newParams.html'>newZINBParams</a></span>(), <span class='kw'>verbose</span> <span class='kw'>=</span> <span class='fl'>TRUE</span>, <span class='no'>...</span>)</pre>
+    
+    <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a> Arguments</h2>
+    <table class="ref-arguments">
+    <colgroup><col class="name" /><col class="desc" /></colgroup>
+    <tr>
+      <th>params</th>
+      <td><p>ZINBParams object containing simulation parameters.</p></td>
+    </tr>
+    <tr>
+      <th>verbose</th>
+      <td><p>logical. Whether to print progress messages</p></td>
+    </tr>
+    <tr>
+      <th>...</th>
+      <td><p>any additional parameter settings to override what is provided in
+<code>params</code>.</p></td>
+    </tr>
+    </table>
+    
+    <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
+
+    <p>SingleCellExperiment containing simulated counts</p>
+    
+    <h2 class="hasAnchor" id="details"><a class="anchor" href="#details"></a>Details</h2>
+
+    <p>This function is just a wrapper around <code><a href='http://www.rdocumentation.org/packages/zinbwave/topics/zinbSim'>zinbSim</a></code> that
+takes a <code><a href='ZINBParams.html'>ZINBParams</a></code>, runs the simulation then converts the
+output to a <code><a href='http://www.rdocumentation.org/packages/SingleCellExperiment/topics/SingleCellExperiment'>SingleCellExperiment</a></code> object.
+See <code><a href='http://www.rdocumentation.org/packages/zinbwave/topics/zinbSim'>zinbSim</a></code> and the ZINB-WaVE paper for
+more details about how the simulation works.</p>
+    
+    <h2 class="hasAnchor" id="references"><a class="anchor" href="#references"></a>References</h2>
+
+    <p>Campbell K, Yau C. Uncovering genomic trajectories with heterogeneous genetic
+and environmental backgrounds across single-cells and populations. bioRxiv
+(2017).</p>
+<p>Risso D, Perraudeau F, Gribkova S, Dudoit S, Vert J-P. ZINB-WaVE: A general
+and flexible method for signal extraction from single-cell RNA-seq data
+bioRxiv (2017).</p>
+<p>Paper: <a href='10.1101/125112'>10.1101/125112</a></p>
+<p>Code: <a href='https://github.com/drisso/zinbwave'>https://github.com/drisso/zinbwave</a></p>
+    
+
+    <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
+    <pre class="examples"><div class='input'><span class='no'>sim</span> <span class='kw'>&lt;-</span> <span class='fu'>zinbSimulate</span>()</div><div class='output co'>#&gt; <span class='message'>Simulating counts...</span></div><div class='output co'>#&gt; <span class='message'>Creating final dataset...</span></div><div class='input'>
+</div></pre>
+  </div>
+  <div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
+    <h2>Contents</h2>
+    <ul class="nav nav-pills nav-stacked">
+      <li><a href="#arguments">Arguments</a></li>
+      
+      <li><a href="#value">Value</a></li>
+
+      <li><a href="#details">Details</a></li>
+
+      <li><a href="#references">References</a></li>
+      
+      <li><a href="#examples">Examples</a></li>
+    </ul>
+
+  </div>
+</div>
+
+      <footer>
+      <div class="copyright">
+  <p>Developed by Luke Zappia, Belinda Phipson, Alicia Oshlack.</p>
+</div>
+
+<div class="pkgdown">
+  <p>Site built with <a href="http://hadley.github.io/pkgdown/">pkgdown</a>.</p>
+</div>
+
+      </footer>
+   </div>
+
+  </body>
+</html>
diff --git a/index.md b/index.md
index 1af5f09510e7ee44f909cb5bae4556e3303aa941..24e894f7a1b4da355ce2c483c692121cf395e223 100644
--- a/index.md
+++ b/index.md
@@ -51,7 +51,7 @@ command in RStudio.
 
 ### Development version
 
-If you want to try the [development version][deve] this can also be installed
+If you want to try the [development version][devel] this can also be installed
 from Bioconductor:
 
 ```{r}
diff --git a/man/BASiCSParams.Rd b/man/BASiCSParams.Rd
index 7f3e7df0ed00d257f94eb5753fbe6a6cb77c6936..0bfb09a000d4d203dedf0eb6e7f73e5161080802 100644
--- a/man/BASiCSParams.Rd
+++ b/man/BASiCSParams.Rd
@@ -12,7 +12,6 @@ S4 class that holds parameters for the BASiCS simulation.
 
 
 The BASiCS simulation uses the following parameters:
-
 \describe{
     \item{\code{nGenes}}{The number of genes to simulate.}
     \item{\code{nCells}}{The number of cells to simulate.}
diff --git a/man/MFAParams.Rd b/man/MFAParams.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..10671a56d85822bb5a40edb87d8f502e9437b023
--- /dev/null
+++ b/man/MFAParams.Rd
@@ -0,0 +1,34 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/AllClasses.R
+\docType{class}
+\name{MFAParams}
+\alias{MFAParams}
+\alias{MFAParams-class}
+\title{The MFAParams class}
+\description{
+S4 class that holds parameters for the mfa simulation.
+}
+\section{Parameters}{
+
+
+The mfa simulation uses the following parameters:
+\describe{
+    \item{\code{nGenes}}{The number of genes to simulate.}
+    \item{\code{nCells}}{The number of cells to simulate.}
+    \item{\code{[seed]}}{Seed to use for generating random numbers.}
+    \item{\code{[trans.prop]}}{Proportion of genes that show transient
+    expression. These genes are briefly up or down-regulated before returning
+    to their initial state}
+    \item{\code{[zero.neg]}}{Logical. Whether to set negative expression
+    values to zero. This will zero-inflate the data.}
+    \item{\code{[dropout.present]}}{Logical. Whether to simulate dropout.}
+    \item{\code{dropout.lambda}}{Lambda parameter for the exponential
+    dropout function.}
+}
+
+The parameters not shown in brackets can be estimated from real data using
+\code{\link{mfaEstimate}}. See \code{\link[mfa]{create_synthetic}} for more
+details about the parameters. For details of the Splatter implementation of
+the mfa simulation see \code{\link{mfaSimulate}}.
+}
+
diff --git a/man/Params.Rd b/man/Params.Rd
index c8fbe4566a83eea6ec35f0ee19667cbd905fd183..156c6c4e204c14862bed13e076e70900f2543d36 100644
--- a/man/Params.Rd
+++ b/man/Params.Rd
@@ -14,11 +14,11 @@ Virtual S4 class that all other Params classes inherit from.
 The Params class defines the following parameters:
 
 \describe{
-    \item{\code{[nGenes]}}{The number of genes to simulate.}
-    \item{\code{[nCells]}}{The number of cells to simulate.}
-    \item{\code{seed}}{Seed to use for generating random numbers.}
+    \item{\code{nGenes}}{The number of genes to simulate.}
+    \item{\code{nCells}}{The number of cells to simulate.}
+    \item{\code{[seed]}}{Seed to use for generating random numbers.}
 }
 
-The parameters shown in brackets can be estimated from real data.
+The parameters not shown in brackets can be estimated from real data.
 }
 
diff --git a/man/PhenoParams.Rd b/man/PhenoParams.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..b1e135f28ffa19cc6fa11e950bf9295a2d443f6a
--- /dev/null
+++ b/man/PhenoParams.Rd
@@ -0,0 +1,34 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/AllClasses.R
+\docType{class}
+\name{PhenoParams}
+\alias{PhenoParams}
+\alias{PhenoParams-class}
+\title{The PhenoParams class}
+\description{
+S4 class that holds parameters for the PhenoPath simulation.
+}
+\section{Parameters}{
+
+
+The PhenoPath simulation uses the following parameters:
+
+\describe{
+    \item{\code{nGenes}}{The number of genes to simulate.}
+    \item{\code{nCells}}{The number of cells to simulate.}
+    \item{\code{[seed]}}{Seed to use for generating random numbers.}
+    \item{\code{[n.de]}}{Number of genes to simulate from the differential
+    expression regime}
+    \item{\code{[n.pst]}}{Number of genes to simulate from the pseudotime
+    regime}
+    \item{\code{[n.pst.beta]}}{Number of genes to simulate from the
+    pseudotime + beta interactions regime}
+    \item{\code{[n.de.pst.beta]}}{Number of genes to simulate from the
+    differential expression + pseudotime + interactions regime}
+}
+
+The parameters not shown in brackets can be estimated from real data using
+\code{\link{phenoEstimate}}. For details of the PhenoPath simulation
+see \code{\link{phenoSimulate}}.
+}
+
diff --git a/man/SCDDParams.Rd b/man/SCDDParams.Rd
index aef9df97deb3ea7b3d8625a55cf1fa51e044cc1f..894530c483b0f5685740de994b226019422d0c38 100644
--- a/man/SCDDParams.Rd
+++ b/man/SCDDParams.Rd
@@ -18,7 +18,7 @@ The SCDD simulation uses the following parameters:
     \item{\code{nCells}}{The number of cells to simulate in each condition.}
     \item{\code{[seed]}}{Seed to use for generating random numbers.}
     \item{\code{SCdat}}{
-    \code{\link[SummarizedExperiment]{SummarizedExperiment}} containing real
+    \code{\link[SingleCellExperiment]{SingleCellExperiment}} containing real
     data.}
     \item{\code{nDE}}{Number of DE genes to simulate.}
     \item{\code{nDP}}{Number of DP genes to simulate.}
@@ -36,7 +36,7 @@ The SCDD simulation uses the following parameters:
 
 The parameters not shown in brackets can be estimated from real data using
 \code{\link{scDDEstimate}}. See \code{\link[scDD]{simulateSet}} for more
-details of the parameters. For details of the Splatter implementation of the
-scDD simulation see \code{\link{scDDSimulate}}.
+details about the parameters. For details of the Splatter implementation of
+the scDD simulation see \code{\link{scDDSimulate}}.
 }
 
diff --git a/man/ZINBParams.Rd b/man/ZINBParams.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..e7fc22a1cdcf7a8627bfbb2c8edd5e0c095fb1b3
--- /dev/null
+++ b/man/ZINBParams.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/AllClasses.R
+\docType{class}
+\name{ZINBParams}
+\alias{ZINBParams}
+\alias{ZINBParams-class}
+\title{The ZINBParams class}
+\description{
+S4 class that holds parameters for the ZINB-WaVE simulation.
+}
+\section{Parameters}{
+
+
+The ZINB-WaVE simulation uses the following parameters:
+
+\describe{
+    \item{\code{nGenes}}{The number of genes to simulate.}
+    \item{\code{nCells}}{The number of cells to simulate.}
+    \item{\code{[seed]}}{Seed to use for generating random numbers.}
+    \item{\code{model}}{Object describing a ZINB model.}
+}
+
+The majority of the parameters for this simulation are stored in a
+\code{\link[zinbwave]{ZinbModel}} object. Please refer to the documentation
+for this class and its constructor(\code{\link[zinbwave]{zinbModel}}) for
+details about all the parameters.
+
+The parameters not shown in brackets can be estimated from real data using
+\code{\link{zinbEstimate}}. For details of the ZINB-WaVE simulation
+see \code{\link{zinbSimulate}}.
+}
+
diff --git a/man/addFeatureStats.Rd b/man/addFeatureStats.Rd
index f4f72ef4cd05c914a0cac48746a6118102d5f1ed..4edd20d7f7e2f607ac32420e6d46d73cb8e7bb6a 100644
--- a/man/addFeatureStats.Rd
+++ b/man/addFeatureStats.Rd
@@ -1,5 +1,5 @@
 % Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/SCESet-functions.R
+% Please edit documentation in R/SCE-functions.R
 \name{addFeatureStats}
 \alias{addFeatureStats}
 \title{Add feature statistics}
@@ -8,11 +8,11 @@ addFeatureStats(sce, value = c("counts", "cpm", "tpm", "fpkm"), log = FALSE,
   offset = 1, no.zeros = FALSE)
 }
 \arguments{
-\item{sce}{SCESet to add feature statistics to.}
+\item{sce}{SingleCellExperiment to add feature statistics to.}
 
 \item{value}{the expression value to calculate statistics for. Options are
 "counts", "cpm", "tpm" or "fpkm". The values need to exist in the
-given SCESet.}
+given SingleCellExperiment.}
 
 \item{log}{logical. Whether to take log2 before calculating statistics.}
 
@@ -22,16 +22,16 @@ given SCESet.}
 calculating statistics.}
 }
 \value{
-SCESet with additional feature statistics
+SingleCellExperiment with additional feature statistics
 }
 \description{
-Add additional feature statistics to an SCESet object
+Add additional feature statistics to a SingleCellExperiment object
 }
 \details{
 Currently adds the following statistics: mean, variance, coefficient of
 variation, median and median absolute deviation. Statistics are added to
-the \code{fData} slot and are named \code{Stat[Log]Value[No0]} where
-\code{Log} and \code{No0} are added if those arguments are true.
-UpperCamelCase is used to differentiate these columns from those added by
-\code{scater}.
+the \code{\link[SummarizedExperiment]{rowData}} slot and are named
+\code{Stat[Log]Value[No0]} where \code{Log} and \code{No0} are added if those
+arguments are true. UpperCamelCase is used to differentiate these columns
+from those added by analysis packages.
 }
diff --git a/man/addGeneLengths.Rd b/man/addGeneLengths.Rd
index dd760ad84e2e0e1738c6c6f8142d9929b0c3cdfd..3cfbc6089c343690be25fc9ff46280c08066c300 100644
--- a/man/addGeneLengths.Rd
+++ b/man/addGeneLengths.Rd
@@ -1,5 +1,5 @@
 % Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/SCESet-functions.R
+% Please edit documentation in R/SCE-functions.R
 \name{addGeneLengths}
 \alias{addGeneLengths}
 \title{Add gene lengths}
@@ -8,7 +8,7 @@ addGeneLengths(sce, method = c("generate", "sample"), loc = 7.9,
   scale = 0.7, lengths = NULL)
 }
 \arguments{
-\item{sce}{SCESet to add gene lengths to.}
+\item{sce}{SingleCellExperiment to add gene lengths to.}
 
 \item{method}{Method to use for creating lengths.}
 
@@ -19,25 +19,27 @@ addGeneLengths(sce, method = c("generate", "sample"), loc = 7.9,
 \item{lengths}{Vector of lengths for the sample method.}
 }
 \value{
-SCESet with added gene lengths
+SingleCellExperiment with added gene lengths
 }
 \description{
-Add gene lengths to an SCESet object
+Add gene lengths to an SingleCellExperiment object
 }
 \details{
-This function adds simulated gene lengths to the \code{fData} slot of an
-\code{SCESet} object that can be used for calculating length normalised
-expression values such as TPM or FPKM. The \code{generate} simulates lengths
-using a (rounded) log-normal distribution, with the default \code{loc} and
-\code{scale} parameters based on human coding genes. Alternatively the
-\code{sample} method can be used which randomly samples lengths (with
-replacement) from a supplied vector.
+This function adds simulated gene lengths to the
+\code{\link[SummarizedExperiment]{rowData}} slot of a
+\code{\link[SingleCellExperiment]{SingleCellExperiment}} object that can be
+used for calculating length normalised expression values such as TPM or FPKM.
+The \code{generate} method simulates lengths using a (rounded) log-normal
+distribution, with the default \code{loc} and \code{scale} parameters based
+on human protein-coding genes. Alternatively the \code{sample} method can be
+used which randomly samples lengths (with replacement) from a supplied
+vector.
 }
 \examples{
 # Default generate method
 sce <- simpleSimulate()
 sce <- addGeneLengths(sce)
-head(fData(sce))
+head(rowData(sce))
 # Sample method (human coding genes)
 \dontrun{
 library(TxDb.Hsapiens.UCSC.hg19.knownGene)
diff --git a/man/compareSCESets.Rd b/man/compareSCEs.Rd
similarity index 80%
rename from man/compareSCESets.Rd
rename to man/compareSCEs.Rd
index 4c4393c7aa304ee55f4d3c6aaf7acac0c16841ea..711a2bee5edcc810c0834dad862b2303bd03c58c 100644
--- a/man/compareSCESets.Rd
+++ b/man/compareSCEs.Rd
@@ -1,14 +1,15 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/compare.R
-\name{compareSCESets}
-\alias{compareSCESets}
-\title{Compare SCESet objects}
+\name{compareSCEs}
+\alias{compareSCEs}
+\title{Compare SingleCellExperiment objects}
 \usage{
-compareSCESets(sces, point.size = 0.1, point.alpha = 0.1, fits = TRUE,
+compareSCEs(sces, point.size = 0.1, point.alpha = 0.1, fits = TRUE,
   colours = NULL)
 }
 \arguments{
-\item{sces}{named list of SCESet objects to combine and compare.}
+\item{sces}{named list of SingleCellExperiment objects to combine and
+compare.}
 
 \item{point.size}{size of points in scatter plots.}
 
@@ -22,16 +23,17 @@ compareSCESets(sces, point.size = 0.1, point.alpha = 0.1, fits = TRUE,
 List containing the combined datasets and plots.
 }
 \description{
-Combine the data from several SCESet objects and produce some basic plots
-comparing them.
+Combine the data from several SingleCellExperiment objects and produce some
+basic plots comparing them.
 }
 \details{
 The returned list has three items:
 
 \describe{
     \item{\code{FeatureData}}{Combined feature data from the provided
-    SCESets.}
-    \item{\code{PhenoData}}{Combined pheno data from the provided SCESets.}
+    SingleCellExperiments.}
+    \item{\code{PhenoData}}{Combined pheno data from the provided
+    SingleCellExperiments.}
     \item{\code{Plots}}{Comparison plots
         \describe{
             \item{\code{Means}}{Boxplot of mean distribution.}
@@ -59,7 +61,7 @@ using \code{\link[ggplot2]{ggplot}}.
 \examples{
 sim1 <- splatSimulate(nGenes = 1000, batchCells = 20)
 sim2 <- simpleSimulate(nGenes = 1000, nCells = 20)
-comparison <- compareSCESets(list(Splat = sim1, Simple = sim2))
+comparison <- compareSCEs(list(Splat = sim1, Simple = sim2))
 names(comparison)
 names(comparison$Plots)
 }
diff --git a/man/diffSCESets.Rd b/man/diffSCEs.Rd
similarity index 71%
rename from man/diffSCESets.Rd
rename to man/diffSCEs.Rd
index 7b459ca498e7c4d78895fa72673940c90372290d..a24a5c28f095a7318c6eae93b42f5d00ddd60e26 100644
--- a/man/diffSCESets.Rd
+++ b/man/diffSCEs.Rd
@@ -1,16 +1,18 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/compare.R
-\name{diffSCESets}
-\alias{diffSCESets}
-\title{Diff SCESet objects}
+\name{diffSCEs}
+\alias{diffSCEs}
+\title{Diff SingleCellExperiment objects}
 \usage{
-diffSCESets(sces, ref, point.size = 0.1, point.alpha = 0.1, fits = TRUE,
+diffSCEs(sces, ref, point.size = 0.1, point.alpha = 0.1, fits = TRUE,
   colours = NULL)
 }
 \arguments{
-\item{sces}{named list of SCESet objects to combine and compare.}
+\item{sces}{named list of SingleCellExperiment objects to combine and
+compare.}
 
-\item{ref}{string giving the name of the SCESet to use as the reference}
+\item{ref}{string giving the name of the SingleCellExperiment to use as the
+reference}
 
 \item{point.size}{size of points in scatter plots.}
 
@@ -24,23 +26,25 @@ diffSCESets(sces, ref, point.size = 0.1, point.alpha = 0.1, fits = TRUE,
 List containing the combined datasets and plots.
 }
 \description{
-Combine the data from several SCESet objects and produce some basic plots
-comparing them to a reference.
+Combine the data from several SingleCellExperiment objects and produce some
+basic plots comparing them to a reference.
 }
 \details{
-This function aims to look at the differences between a reference SCESet and
-one or more others. It requires each SCESet to have the same dimensions.
-Properties are compared by ranks, for example when comparing the means the
-values are ordered and the differences between the reference and another
-dataset plotted. A series of Q-Q plots are also returned.
+This function aims to look at the differences between a reference
+SingleCellExperiment and one or more others. It requires each
+SingleCellExperiment to have the same dimensions. Properties are compared by
+ranks, for example when comparing the means the values are ordered and the
+differences between the reference and another dataset plotted. A series of
+Q-Q plots are also returned.
 
 The returned list has five items:
 
 \describe{
-    \item{\code{Reference}}{The SCESet used as the reference.}
+    \item{\code{Reference}}{The SingleCellExperiment used as the reference.}
     \item{\code{FeatureData}}{Combined feature data from the provided
-    SCESets.}
-    \item{\code{PhenoData}}{Combined pheno data from the provided SCESets.}
+    SingleCellExperiments.}
+    \item{\code{PhenoData}}{Combined pheno data from the provided
+    SingleCellExperiments.}
     \item{\code{Plots}}{Difference plots
         \describe{
             \item{\code{Means}}{Boxplot of mean differences.}
@@ -79,7 +83,7 @@ using \code{\link[ggplot2]{ggplot}}.
 \examples{
 sim1 <- splatSimulate(nGenes = 1000, batchCells = 20)
 sim2 <- simpleSimulate(nGenes = 1000, nCells = 20)
-difference <- diffSCESets(list(Splat = sim1, Simple = sim2), ref = "Simple")
+difference <- diffSCEs(list(Splat = sim1, Simple = sim2), ref = "Simple")
 names(difference)
 names(difference$Plots)
 }
diff --git a/man/lun2Estimate.Rd b/man/lun2Estimate.Rd
index 369634764aa1b172861920701a4538e85065448e..d0e240edbbdc6d983727a0e63d4f98e68ccb9283 100644
--- a/man/lun2Estimate.Rd
+++ b/man/lun2Estimate.Rd
@@ -2,22 +2,23 @@
 % Please edit documentation in R/lun2-estimate.R
 \name{lun2Estimate}
 \alias{lun2Estimate}
-\alias{lun2Estimate.SCESet}
+\alias{lun2Estimate.SingleCellExperiment}
 \alias{lun2Estimate.matrix}
 \title{Estimate Lun2 simulation parameters}
 \usage{
 lun2Estimate(counts, plates, params = newLun2Params(), min.size = 200,
   verbose = TRUE, BPPARAM = SerialParam())
 
-\method{lun2Estimate}{SCESet}(counts, plates, params = newLun2Params(),
-  min.size = 200, verbose = TRUE, BPPARAM = SerialParam())
+\method{lun2Estimate}{SingleCellExperiment}(counts, plates,
+  params = newLun2Params(), min.size = 200, verbose = TRUE,
+  BPPARAM = SerialParam())
 
 \method{lun2Estimate}{matrix}(counts, plates, params = newLun2Params(),
   min.size = 200, verbose = TRUE, BPPARAM = SerialParam())
 }
 \arguments{
-\item{counts}{either a counts matrix or an SCESet object containing count
-data to estimate parameters from.}
+\item{counts}{either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.}
 
 \item{plates}{integer vector giving the plate that each cell originated from.}
 
diff --git a/man/lun2Simulate.Rd b/man/lun2Simulate.Rd
index 491ba6787afdfc9bf75f949d3680225f4f15b6e3..e091ce9d8c739de001334b4f9b8a0f6b2d3975c4 100644
--- a/man/lun2Simulate.Rd
+++ b/man/lun2Simulate.Rd
@@ -17,7 +17,7 @@ lun2Simulate(params = newLun2Params(), zinb = FALSE, verbose = TRUE, ...)
 \code{params}.}
 }
 \value{
-SCESet containing simulated counts.
+SingleCellExperiment containing simulated counts.
 }
 \description{
 Simulate single-cell RNA-seq count data using the method described in Lun
diff --git a/man/lunEstimate.Rd b/man/lunEstimate.Rd
index 8ee55bea76967ecf9c7fa9a895178fb7950d3c97..82f5e670b199dc49e618014924c6273be5cc5f12 100644
--- a/man/lunEstimate.Rd
+++ b/man/lunEstimate.Rd
@@ -2,19 +2,19 @@
 % Please edit documentation in R/lun-estimate.R
 \name{lunEstimate}
 \alias{lunEstimate}
-\alias{lunEstimate.SCESet}
+\alias{lunEstimate.SingleCellExperiment}
 \alias{lunEstimate.matrix}
 \title{Estimate Lun simulation parameters}
 \usage{
 lunEstimate(counts, params = newLunParams())
 
-\method{lunEstimate}{SCESet}(counts, params = newLunParams())
+\method{lunEstimate}{SingleCellExperiment}(counts, params = newLunParams())
 
 \method{lunEstimate}{matrix}(counts, params = newLunParams())
 }
 \arguments{
-\item{counts}{either a counts matrix or an SCESet object containing count
-data to estimate parameters from.}
+\item{counts}{either a counts matrix or an SingleCellExperiment object
+containing count data to estimate parameters from.}
 
 \item{params}{LunParams object to store estimated values in.}
 }
diff --git a/man/lunSimulate.Rd b/man/lunSimulate.Rd
index 4ccd94ac6181f50aef6f0e710698b88810ba9b51..0e48781f767033532c76864f75eabfcaa08d06d6 100644
--- a/man/lunSimulate.Rd
+++ b/man/lunSimulate.Rd
@@ -15,8 +15,8 @@ lunSimulate(params = newLunParams(), verbose = TRUE, ...)
 \code{params}.}
 }
 \value{
-SCESet object containing the simulated counts and intermediate
-values.
+SingleCellExperiment object containing the simulated counts and
+intermediate values.
 }
 \description{
 Simulate single-cell RNA-seq count data using the method described in Lun,
diff --git a/man/makeCompPanel.Rd b/man/makeCompPanel.Rd
index 7340fa2f38fa5d02decc18abdf3cb13062b6387f..c91b324ee605b9e6ba6c0fa1acb0074efddfa7bc 100644
--- a/man/makeCompPanel.Rd
+++ b/man/makeCompPanel.Rd
@@ -9,7 +9,7 @@ makeCompPanel(comp, title = "Comparison", labels = c("Means", "Variance",
   "Zeros per cell", "Mean-zeros relationship"))
 }
 \arguments{
-\item{comp}{list returned by \code{\link{compareSCESets}}.}
+\item{comp}{list returned by \code{\link{compareSCEs}}.}
 
 \item{title}{title for the panel.}
 
@@ -19,13 +19,13 @@ makeCompPanel(comp, title = "Comparison", labels = c("Means", "Variance",
 Combined panel plot
 }
 \description{
-Combine the plots from \code{compareSCESets} into a single panel.
+Combine the plots from \code{compareSCEs} into a single panel.
 }
 \examples{
 \dontrun{
 sim1 <- splatSimulate(nGenes = 1000, batchCells = 20)
 sim2 <- simpleSimulate(nGenes = 1000, nCells = 20)
-comparison <- compareSCESets(list(Splat = sim1, Simple = sim2))
+comparison <- compareSCEs(list(Splat = sim1, Simple = sim2))
 panel <- makeCompPanel(comparison)
 }
 
diff --git a/man/makeDiffPanel.Rd b/man/makeDiffPanel.Rd
index 0712f364d1cd9fb50960e7973594995c2264e9a0..a0239a85c84d5cd3d04f9c3722b2cb26acaab069 100644
--- a/man/makeDiffPanel.Rd
+++ b/man/makeDiffPanel.Rd
@@ -9,7 +9,7 @@ makeDiffPanel(diff, title = "Difference comparison", labels = c("Means",
   "Mean-variance relationship", "Mean-zeros relationship"))
 }
 \arguments{
-\item{diff}{list returned by \code{\link{diffSCESets}}.}
+\item{diff}{list returned by \code{\link{diffSCEs}}.}
 
 \item{title}{title for the panel.}
 
@@ -19,13 +19,13 @@ makeDiffPanel(diff, title = "Difference comparison", labels = c("Means",
 Combined panel plot
 }
 \description{
-Combine the plots from \code{diffSCESets} into a single panel.
+Combine the plots from \code{diffSCEs} into a single panel.
 }
 \examples{
 \dontrun{
 sim1 <- splatSimulate(nGenes = 1000, batchCells = 20)
 sim2 <- simpleSimulate(nGenes = 1000, nCells = 20)
-difference <- diffSCESets(list(Splat = sim1, Simple = sim2), ref = "Simple")
+difference <- diffSCEs(list(Splat = sim1, Simple = sim2), ref = "Simple")
 panel <- makeDiffPanel(difference)
 }
 
diff --git a/man/makeOverallPanel.Rd b/man/makeOverallPanel.Rd
index a37119d7f544d13b90adb4827e1ed32b6463bbcf..51b219ba7ce6a8d3a77502085bc2c793b313c4b9 100644
--- a/man/makeOverallPanel.Rd
+++ b/man/makeOverallPanel.Rd
@@ -10,9 +10,9 @@ makeOverallPanel(comp, diff, title = "Overall comparison",
   "Mean-zeros relationship"))
 }
 \arguments{
-\item{comp}{list returned by \code{\link{compareSCESets}}.}
+\item{comp}{list returned by \code{\link{compareSCEs}}.}
 
-\item{diff}{list returned by \code{\link{diffSCESets}}.}
+\item{diff}{list returned by \code{\link{diffSCEs}}.}
 
 \item{title}{title for the panel.}
 
@@ -22,7 +22,7 @@ makeOverallPanel(comp, diff, title = "Overall comparison",
 Combined panel plot
 }
 \description{
-Combine the plots from \code{compSCESets} and \code{diffSCESets} into a
+Combine the plots from \code{compSCEs} and \code{diffSCEs} into a
 single panel.
 }
 \examples{
diff --git a/man/mfaEstimate.Rd b/man/mfaEstimate.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..002cd047b58ec935bdd1f421756597d8cedb6549
--- /dev/null
+++ b/man/mfaEstimate.Rd
@@ -0,0 +1,37 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/mfa-estimate.R
+\name{mfaEstimate}
+\alias{mfaEstimate}
+\alias{mfaEstimate.SingleCellExperiment}
+\alias{mfaEstimate.matrix}
+\title{Estimate mfa simulation parameters}
+\usage{
+mfaEstimate(counts, params = newMFAParams())
+
+\method{mfaEstimate}{SingleCellExperiment}(counts, params = newMFAParams())
+
+\method{mfaEstimate}{matrix}(counts, params = newMFAParams())
+}
+\arguments{
+\item{counts}{either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.}
+
+\item{params}{MFAParams object to store estimated values in.}
+}
+\value{
+MFAParams object containing the estimated parameters.
+}
+\description{
+Estimate simulation parameters for the mfa simulation from a real dataset.
+}
+\details{
+The \code{nGenes} and \code{nCells} parameters are taken from the size of the
+input data. The dropout lambda parameter is estimate using
+\code{\link[mfa]{empirical_lambda}}. See \code{\link{MFAParams}} for more
+details on the parameters.
+}
+\examples{
+data("sc_example_counts")
+params <- mfaEstimate(sc_example_counts)
+params
+}
diff --git a/man/mfaSimulate.Rd b/man/mfaSimulate.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..ec2a98e243fd7942f29bc715cac6890b68b4397e
--- /dev/null
+++ b/man/mfaSimulate.Rd
@@ -0,0 +1,42 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/mfa-simulate.R
+\name{mfaSimulate}
+\alias{mfaSimulate}
+\title{MFA simulation}
+\usage{
+mfaSimulate(params = newMFAParams(), verbose = TRUE, ...)
+}
+\arguments{
+\item{params}{MFAParams object containing simulation parameters.}
+
+\item{verbose}{Logical. Whether to print progress messages.}
+
+\item{...}{any additional parameter settings to override what is provided in
+\code{params}.}
+}
+\value{
+SingleCellExperiment containing simulated counts
+}
+\description{
+Simulate a bifurcating pseudotime path using the mfa method.
+}
+\details{
+This function is just a wrapper around \code{\link[mfa]{create_synthetic}}
+that takes a \code{\link{MFAParams}}, runs the simulation then converts the
+output from log-expression to counts and returns a
+\code{\link[SingleCellExperiment]{SingleCellExperiment}} object. See
+\code{\link[mfa]{create_synthetic}} and the mfa paper for more details about
+how the simulation works.
+}
+\examples{
+sim <- mfaSimulate()
+}
+\references{
+Campbell KR, Yau C. Probabilistic modeling of bifurcations in single-cell
+gene expression data using a Bayesian mixture of factor analyzers. Wellcome
+Open Research (2017).
+
+Paper: \url{10.12688/wellcomeopenres.11087.1}
+
+Code: \url{https://github.com/kieranrcampbell/mfa}
+}
diff --git a/man/newParams.Rd b/man/newParams.Rd
index 9b4e8d162d995494d9e72e5dca65f9af25ee7705..e8d75401ae5a00cd3e660850d49fda896940b376 100644
--- a/man/newParams.Rd
+++ b/man/newParams.Rd
@@ -1,15 +1,19 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/AllGenerics.R, R/BASiCSParams-methods.R,
-%   R/Lun2Params-methods.R, R/LunParams-methods.R, R/SCDDParams-methods.R,
-%   R/SimpleParams-methods.R, R/SplatParams-methods.R
+%   R/Lun2Params-methods.R, R/LunParams-methods.R, R/MFAParams-methods.R,
+%   R/PhenoParams-methods.R, R/SCDDParams-methods.R, R/SimpleParams-methods.R,
+%   R/SplatParams-methods.R, R/ZINBParams-methods.R
 \name{newParams}
 \alias{newParams}
 \alias{newBASiCSParams}
 \alias{newLun2Params}
 \alias{newLunParams}
+\alias{newMFAParams}
+\alias{newPhenoParams}
 \alias{newSCDDParams}
 \alias{newSimpleParams}
 \alias{newSplatParams}
+\alias{newZINBParams}
 \title{New Params}
 \usage{
 newBASiCSParams(...)
@@ -18,11 +22,17 @@ newLun2Params(...)
 
 newLunParams(...)
 
+newMFAParams(...)
+
+newPhenoParams(...)
+
 newSCDDParams(...)
 
 newSimpleParams(...)
 
 newSplatParams(...)
+
+newZINBParams(...)
 }
 \arguments{
 \item{...}{additional parameters passed to \code{\link{setParams}}.}
diff --git a/man/phenoEstimate.Rd b/man/phenoEstimate.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..5b698238acbc48c4a606cc9fd7a2c3b550936311
--- /dev/null
+++ b/man/phenoEstimate.Rd
@@ -0,0 +1,38 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/pheno-estimate.R
+\name{phenoEstimate}
+\alias{phenoEstimate}
+\alias{phenoEstimate.SingleCellExperiment}
+\alias{phenoEstimate.matrix}
+\title{Estimate PhenoPath simulation parameters}
+\usage{
+phenoEstimate(counts, params = newPhenoParams())
+
+\method{phenoEstimate}{SingleCellExperiment}(counts,
+  params = newPhenoParams())
+
+\method{phenoEstimate}{matrix}(counts, params = newPhenoParams())
+}
+\arguments{
+\item{counts}{either a counts matrix or an SingleCellExperiment object
+containing count data to estimate parameters from.}
+
+\item{params}{PhenoParams object to store estimated values in.}
+}
+\value{
+PhenoParams object containing the estimated parameters.
+}
+\description{
+Estimate simulation parameters for the PhenoPath simulation from a real
+dataset.
+}
+\details{
+The \code{nGenes} and \code{nCells} parameters are taken from the size of the
+input data. The total number of genes is evenly divided into the four types.
+See \code{\link{PhenoParams}} for more details on the parameters.
+}
+\examples{
+data("sc_example_counts")
+params <- phenoEstimate(sc_example_counts)
+params
+}
diff --git a/man/phenoSimulate.Rd b/man/phenoSimulate.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..ffde04f9d728cfe05a1471ed739f6868a91589ce
--- /dev/null
+++ b/man/phenoSimulate.Rd
@@ -0,0 +1,45 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/pheno-simulate.R
+\name{phenoSimulate}
+\alias{phenoSimulate}
+\title{PhenoPath simulation}
+\usage{
+phenoSimulate(params = newPhenoParams(), verbose = TRUE, ...)
+}
+\arguments{
+\item{params}{PhenoParams object containing simulation parameters.}
+
+\item{verbose}{logical. Whether to print progress messages}
+
+\item{...}{any additional parameter settings to override what is provided in
+\code{params}.}
+}
+\value{
+SingleCellExperiment containing simulated counts
+}
+\description{
+Simulate counts from a pseudotime trajectory using the PhenoPath method.
+}
+\details{
+This function is just a wrapper around
+\code{\link[phenopath]{simulate_phenopath}} that takes a
+\code{\link{PhenoParams}}, runs the simulation then converts the
+output from log-expression to counts and returns a
+\code{\link[SingleCellExperiment]{SingleCellExperiment}} object. The original
+simulated log-expression values are returned in the \code{LogExprs} asssay.
+See \code{\link[phenopath]{simulate_phenopath}} and the PhenoPath paper for
+more details about how the simulation works.
+}
+\examples{
+sim <- phenoSimulate()
+
+}
+\references{
+Campbell K, Yau C. Uncovering genomic trajectories with heterogeneous genetic
+and environmental backgrounds across single-cells and populations. bioRxiv
+(2017).
+
+Paper: \url{10.1101/159913}
+
+Code: \url{https://github.com/kieranrcampbell/phenopath}
+}
diff --git a/man/scDDEstimate.Rd b/man/scDDEstimate.Rd
index 44bd40141ff5035b354433b7ac47ab958dc2e85b..265183465ffcd3ca73550931c721146c38f57611 100644
--- a/man/scDDEstimate.Rd
+++ b/man/scDDEstimate.Rd
@@ -2,25 +2,26 @@
 % Please edit documentation in R/scDD-estimate.R
 \name{scDDEstimate}
 \alias{scDDEstimate}
-\alias{scDDEstimate.SCESet}
 \alias{scDDEstimate.matrix}
+\alias{scDDEstimate.SingleCellExperiment}
+\alias{scDDEstimate.default}
 \title{Estimate scDD simulation parameters}
 \usage{
-scDDEstimate(counts, conditions, params = newSCDDParams(), verbose = TRUE,
-  BPPARAM = SerialParam())
+scDDEstimate(counts, params = newSCDDParams(), verbose = TRUE,
+  BPPARAM = SerialParam(), ...)
 
-\method{scDDEstimate}{SCESet}(counts, conditions, params = newSCDDParams(),
-  verbose = TRUE, BPPARAM = SerialParam())
+\method{scDDEstimate}{matrix}(counts, params = newSCDDParams(),
+  verbose = TRUE, BPPARAM = SerialParam(), conditions, ...)
 
-\method{scDDEstimate}{matrix}(counts, conditions, params = newSCDDParams(),
-  verbose = TRUE, BPPARAM = SerialParam())
+\method{scDDEstimate}{SingleCellExperiment}(counts, params = newSCDDParams(),
+  verbose = TRUE, BPPARAM = SerialParam(), condition = "condition", ...)
+
+\method{scDDEstimate}{default}(counts, params = newSCDDParams(),
+  verbose = TRUE, BPPARAM = SerialParam(), condition, ...)
 }
 \arguments{
-\item{counts}{either a counts matrix or an SCESet object containing count
-data to estimate parameters from.}
-
-\item{conditions}{Vector giving the condition that each cell belongs to.
-Conditions can be 1 or 2.}
+\item{counts}{either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.}
 
 \item{params}{SCDDParams object to store estimated values in.}
 
@@ -29,6 +30,14 @@ Conditions can be 1 or 2.}
 \item{BPPARAM}{A \code{\link[BiocParallel]{BiocParallelParam}} instance
 giving the parallel back-end to be used. Default is
 \code{\link[BiocParallel]{SerialParam}} which uses a single core.}
+
+\item{...}{further arguments passed to or from other methods.}
+
+\item{conditions}{Vector giving the condition that each cell belongs to.
+Conditions can be 1 or 2.}
+
+\item{condition}{String giving the column that represents biological group of
+interest.}
 }
 \value{
 SCDDParams object containing the estimated parameters.
diff --git a/man/scDDSimulate.Rd b/man/scDDSimulate.Rd
index 387413b2a636f9169a9bc13bd5ed9382cc42d3b5..24f4c5a62f22470ea1fd9e703e0a7e4e974f72b9 100644
--- a/man/scDDSimulate.Rd
+++ b/man/scDDSimulate.Rd
@@ -25,7 +25,7 @@ giving the parallel back-end to be used. Default is
 \code{params}.}
 }
 \value{
-SCESet containing simulated counts
+SingleCellExperiment containing simulated counts
 }
 \description{
 Simulate counts using the scDD method.
@@ -33,8 +33,9 @@ Simulate counts using the scDD method.
 \details{
 This function is just a wrapper around \code{\link[scDD]{simulateSet}} that
 takes a \code{\link{SCDDParams}}, runs the simulation then converts the
-output to an \code{\link[scater]{SCESet}} object. See
-\code{\link[scDD]{simulateSet}} for more details of how the simulation works.
+output to a \code{\link[SingleCellExperiment]{SingleCellExperiment}} object.
+See \code{\link[scDD]{simulateSet}} for more details about how the simulation
+works.
 }
 \examples{
 \dontrun{
diff --git a/man/setParam.Rd b/man/setParam.Rd
index 85b46c2f798896d4ca4b19414073319790d76d65..378560f36fab9d73f53da98db53106e2d4f0eb6f 100644
--- a/man/setParam.Rd
+++ b/man/setParam.Rd
@@ -1,7 +1,8 @@
 % Generated by roxygen2: do not edit by hand
 % Please edit documentation in R/AllGenerics.R, R/BASiCSParams-methods.R,
 %   R/Lun2Params-methods.R, R/LunParams-methods.R, R/Params-methods.R,
-%   R/SCDDParams-methods.R, R/SplatParams-methods.R
+%   R/PhenoParams-methods.R, R/SCDDParams-methods.R, R/SplatParams-methods.R,
+%   R/ZINBParams-methods.R
 \docType{methods}
 \name{setParam}
 \alias{setParam}
@@ -9,8 +10,10 @@
 \alias{setParam,Lun2Params-method}
 \alias{setParam,LunParams-method}
 \alias{setParam,Params-method}
+\alias{setParam,PhenoParams-method}
 \alias{setParam,SCDDParams-method}
 \alias{setParam,SplatParams-method}
+\alias{setParam,ZINBParams-method}
 \title{Set a parameter}
 \usage{
 setParam(object, name, value)
@@ -23,9 +26,13 @@ setParam(object, name, value)
 
 \S4method{setParam}{Params}(object, name, value)
 
+\S4method{setParam}{PhenoParams}(object, name, value)
+
 \S4method{setParam}{SCDDParams}(object, name, value)
 
 \S4method{setParam}{SplatParams}(object, name, value)
+
+\S4method{setParam}{ZINBParams}(object, name, value)
 }
 \arguments{
 \item{object}{object to set parameter in.}
diff --git a/man/simpleEstimate.Rd b/man/simpleEstimate.Rd
index 3be8654a88d7e163a2241a42abd7be00b66c041e..159c87953cde355894abcd344b60ee8ce5106fd3 100644
--- a/man/simpleEstimate.Rd
+++ b/man/simpleEstimate.Rd
@@ -2,19 +2,20 @@
 % Please edit documentation in R/simple-estimate.R
 \name{simpleEstimate}
 \alias{simpleEstimate}
-\alias{simpleEstimate.SCESet}
+\alias{simpleEstimate.SingleCellExperiment}
 \alias{simpleEstimate.matrix}
 \title{Estimate simple simulation parameters}
 \usage{
 simpleEstimate(counts, params = newSimpleParams())
 
-\method{simpleEstimate}{SCESet}(counts, params = newSimpleParams())
+\method{simpleEstimate}{SingleCellExperiment}(counts,
+  params = newSimpleParams())
 
 \method{simpleEstimate}{matrix}(counts, params = newSimpleParams())
 }
 \arguments{
-\item{counts}{either a counts matrix or an SCESet object containing count
-data to estimate parameters from.}
+\item{counts}{either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.}
 
 \item{params}{SimpleParams object to store estimated values in.}
 }
diff --git a/man/simpleSimulate.Rd b/man/simpleSimulate.Rd
index b2f5fda8c2bb960446c0cc808a457c305956f1d0..e52be18cbe30fddf3f5cf79f5c34978144addf48 100644
--- a/man/simpleSimulate.Rd
+++ b/man/simpleSimulate.Rd
@@ -15,7 +15,7 @@ simpleSimulate(params = newSimpleParams(), verbose = TRUE, ...)
 \code{params}.}
 }
 \value{
-SCESet containing simulated counts
+SingleCellExperiment containing simulated counts
 }
 \description{
 Simulate counts from a simple negative binomial distribution without
diff --git a/man/splatEstimate.Rd b/man/splatEstimate.Rd
index f698fd93e1c57409d5f4317350c05b75bb1554c1..b14d5195af99f9d04700f1bd300487cdfc8c951b 100644
--- a/man/splatEstimate.Rd
+++ b/man/splatEstimate.Rd
@@ -2,19 +2,20 @@
 % Please edit documentation in R/splat-estimate.R
 \name{splatEstimate}
 \alias{splatEstimate}
-\alias{splatEstimate.SCESet}
+\alias{splatEstimate.SingleCellExperiment}
 \alias{splatEstimate.matrix}
 \title{Estimate Splat simulation parameters}
 \usage{
 splatEstimate(counts, params = newSplatParams())
 
-\method{splatEstimate}{SCESet}(counts, params = newSplatParams())
+\method{splatEstimate}{SingleCellExperiment}(counts,
+  params = newSplatParams())
 
 \method{splatEstimate}{matrix}(counts, params = newSplatParams())
 }
 \arguments{
-\item{counts}{either a counts matrix or an SCESet object containing count
-data to estimate parameters from.}
+\item{counts}{either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.}
 
 \item{params}{SplatParams object to store estimated values in.}
 }
diff --git a/man/splatSimBCVMeans.Rd b/man/splatSimBCVMeans.Rd
index 315b5ae7c733d54c5f468d38679fcd3491d8801c..9ffc622a39e450d7c0cda24888373d95f77f87b3 100644
--- a/man/splatSimBCVMeans.Rd
+++ b/man/splatSimBCVMeans.Rd
@@ -7,12 +7,12 @@
 splatSimBCVMeans(sim, params)
 }
 \arguments{
-\item{sim}{SCESet to add BCV means to.}
+\item{sim}{SingleCellExperiment to add BCV means to.}
 
 \item{params}{SplatParams object with simulation parameters.}
 }
 \value{
-SCESet with simulated BCV means.
+SingleCellExperiment with simulated BCV means.
 }
 \description{
 Simulate means for each gene in each cell that are adjusted to follow a
diff --git a/man/splatSimBatchCellMeans.Rd b/man/splatSimBatchCellMeans.Rd
index edd0736eade9125283331e9eba752a50247ceae4..e0d7869c22900a0c204d8993fac9ef87b8bf6b35 100644
--- a/man/splatSimBatchCellMeans.Rd
+++ b/man/splatSimBatchCellMeans.Rd
@@ -7,12 +7,12 @@
 splatSimBatchCellMeans(sim, params)
 }
 \arguments{
-\item{sim}{SCESet to add batch means to.}
+\item{sim}{SingleCellExperiment to add batch means to.}
 
 \item{params}{SplatParams object with simulation parameters.}
 }
 \value{
-SCESet with simulated batch means.
+SingleCellExperiment with simulated batch means.
 }
 \description{
 Simulate a mean for each gene in each cell incorporating batch effect
diff --git a/man/splatSimBatchEffects.Rd b/man/splatSimBatchEffects.Rd
index 76c43040a913982189364cc7c283f377410f290c..c047ab4e6619a133793506e38ac48d9d04186211 100644
--- a/man/splatSimBatchEffects.Rd
+++ b/man/splatSimBatchEffects.Rd
@@ -7,12 +7,12 @@
 splatSimBatchEffects(sim, params)
 }
 \arguments{
-\item{sim}{SCESet to add batch effects to.}
+\item{sim}{SingleCellExperiment to add batch effects to.}
 
 \item{params}{SplatParams object with simulation parameters.}
 }
 \value{
-SCESet with simulated batch effects.
+SingleCellExperiment with simulated batch effects.
 }
 \description{
 Simulate batch effects. Batch effect factors for each batch are produced
diff --git a/man/splatSimCellMeans.Rd b/man/splatSimCellMeans.Rd
index 436fd6fe380941b7c750c94fb67912df304de65d..de5222b2f54d448a1f87f4d65bd8265a757a776c 100644
--- a/man/splatSimCellMeans.Rd
+++ b/man/splatSimCellMeans.Rd
@@ -14,12 +14,12 @@ splatSimGroupCellMeans(sim, params)
 splatSimPathCellMeans(sim, params)
 }
 \arguments{
-\item{sim}{SCESet to add cell means to.}
+\item{sim}{SingleCellExperiment to add cell means to.}
 
 \item{params}{SplatParams object with simulation parameters.}
 }
 \value{
-SCESet with added cell means.
+SingleCellExperiment with added cell means.
 }
 \description{
 Simulate a gene by cell matrix giving the mean expression for each gene in
diff --git a/man/splatSimDE.Rd b/man/splatSimDE.Rd
index 85f7680705553abb29af3e92d0f4c71039f16ac8..257fb1c7d43b6fbf1a6c9fc11f9d8c0864eae720 100644
--- a/man/splatSimDE.Rd
+++ b/man/splatSimDE.Rd
@@ -11,12 +11,12 @@ splatSimGroupDE(sim, params)
 splatSimPathDE(sim, params)
 }
 \arguments{
-\item{sim}{SCESet to add differential expression to.}
+\item{sim}{SingleCellExperiment to add differential expression to.}
 
 \item{params}{splatParams object with simulation parameters.}
 }
 \value{
-SCESet with simulated differential expression.
+SingleCellExperiment with simulated differential expression.
 }
 \description{
 Simulate differential expression. Differential expression factors for each
diff --git a/man/splatSimDropout.Rd b/man/splatSimDropout.Rd
index 166336c8c317a19ffbdebeac8e4016ebcf2336c0..7f68ba3c5ede69f35e49615d824f8f22df785766 100644
--- a/man/splatSimDropout.Rd
+++ b/man/splatSimDropout.Rd
@@ -7,12 +7,12 @@
 splatSimDropout(sim, params)
 }
 \arguments{
-\item{sim}{SCESet to add dropout to.}
+\item{sim}{SingleCellExperiment to add dropout to.}
 
 \item{params}{SplatParams object with simulation parameters.}
 }
 \value{
-SCESet with simulated dropout and observed counts.
+SingleCellExperiment with simulated dropout and observed counts.
 }
 \description{
 A logistic function is used to form a relationshop between the expression
diff --git a/man/splatSimGeneMeans.Rd b/man/splatSimGeneMeans.Rd
index 7d738db8f2efa32e5f5f3f796c732f3cd612b8f0..4a1326948e9356166abe417d1cdd2dc55f279ca6 100644
--- a/man/splatSimGeneMeans.Rd
+++ b/man/splatSimGeneMeans.Rd
@@ -7,12 +7,12 @@
 splatSimGeneMeans(sim, params)
 }
 \arguments{
-\item{sim}{SCESet to add gene means to.}
+\item{sim}{SingleCellExperiment to add gene means to.}
 
 \item{params}{SplatParams object with simulation parameters.}
 }
 \value{
-SCESet with simulated gene means.
+SingleCellExperiment with simulated gene means.
 }
 \description{
 Simulate gene means from a gamma distribution. Also simulates outlier
diff --git a/man/splatSimLibSizes.Rd b/man/splatSimLibSizes.Rd
index 4785021b318feedef285c865cc071497286db40e..3c5c380d91cc3bea40c224f26b0dd564aca7cc26 100644
--- a/man/splatSimLibSizes.Rd
+++ b/man/splatSimLibSizes.Rd
@@ -7,12 +7,12 @@
 splatSimLibSizes(sim, params)
 }
 \arguments{
-\item{sim}{SCESet to add library size to.}
+\item{sim}{SingleCellExperiment to add library size to.}
 
 \item{params}{SplatParams object with simulation parameters.}
 }
 \value{
-SCESet with simulated library sizes.
+SingleCellExperiment with simulated library sizes.
 }
 \description{
 Simulate expected library sizes from a log-normal distribution
diff --git a/man/splatSimTrueCounts.Rd b/man/splatSimTrueCounts.Rd
index 4fc2464f381bb14a4a20a87f80e36bf765a5e2a8..cb2ba3036d6a961229f26b7ddc7a43d2a0daddd5 100644
--- a/man/splatSimTrueCounts.Rd
+++ b/man/splatSimTrueCounts.Rd
@@ -7,12 +7,12 @@
 splatSimTrueCounts(sim, params)
 }
 \arguments{
-\item{sim}{SCESet to add true counts to.}
+\item{sim}{SingleCellExperiment to add true counts to.}
 
 \item{params}{SplatParams object with simulation parameters.}
 }
 \value{
-SCESet with simulated true counts.
+SingleCellExperiment with simulated true counts.
 }
 \description{
 Simulate a true counts matrix. Counts are simulated from a poisson
diff --git a/man/splatSimulate.Rd b/man/splatSimulate.Rd
index d827f16918dde453d4061c6554b7374204eb6061..1b06a3f563ffccf97a3cf3f193bb78cb08b66826 100644
--- a/man/splatSimulate.Rd
+++ b/man/splatSimulate.Rd
@@ -31,8 +31,8 @@ trajectories (eg. differentiation processes).}
 \code{params}.}
 }
 \value{
-SCESet object containing the simulated counts and intermediate
-values.
+SingleCellExperiment object containing the simulated counts and
+intermediate values.
 }
 \description{
 Simulate count data from a fictional single-cell RNA-seq experiment using
@@ -56,15 +56,16 @@ The simulation involves the following steps:
     \item Simulate BCV adjusted cell means
     \item Simulate true counts
     \item Simulate dropout
-    \item Create final SCESet object
+    \item Create final dataset
 }
 
-The final output is an \code{\link[scater]{SCESet}} object that contains the
-simulated counts but also the values for various intermediate steps. These
-are stored in the \code{\link[Biobase]{phenoData}} (for cell specific
-information), \code{\link[Biobase]{featureData}} (for gene specific
-information) or \code{\link[Biobase]{assayData}} (for gene by cell matrices)
-slots. This additional information includes:
+The final output is a
+\code{\link[SingleCellExperiment]{SingleCellExperiment}} object that
+contains the simulated counts but also the values for various intermediate
+steps. These are stored in the \code{\link[SummarizedExperiment]{colData}}
+(for cell specific information), \code{\link[SummarizedExperiment]{rowData}}
+(for gene specific information) or \code{\link[SummarizedExperiment]{assays}}
+(for gene by cell matrices) slots. This additional information includes:
 \describe{
     \item{\code{phenoData}}{
         \describe{
@@ -108,14 +109,14 @@ slots. This additional information includes:
     }
 }
 
-Values that have been added by Splatter are named using \code{CamelCase} in
-order to differentiate them from the values added by Scater which uses
-\code{underscore_naming}.
+Values that have been added by Splatter are named using \code{UpperCamelCase}
+in order to differentiate them from the values added by analysis packages
+which typically use \code{underscore_naming}.
 }
 \examples{
 # Simulation with default parameters
-\dontrun{
 sim <- splatSimulate()
+\dontrun{
 # Simulation with different number of genes
 sim <- splatSimulate(nGenes = 1000)
 # Simulation with custom parameters
diff --git a/man/summariseDiff.Rd b/man/summariseDiff.Rd
index cd6cb6239c7dbbab120d481ee3cb1261d7ec34b8..10b3b0622f8d88dca7db9516cbe5f22bbb61e66c 100644
--- a/man/summariseDiff.Rd
+++ b/man/summariseDiff.Rd
@@ -2,25 +2,25 @@
 % Please edit documentation in R/compare.R
 \name{summariseDiff}
 \alias{summariseDiff}
-\title{Summarise diffSCESets}
+\title{Summarise diffSCESs}
 \usage{
 summariseDiff(diff)
 }
 \arguments{
-\item{diff}{Output from \code{\link{diffSCESets}}}
+\item{diff}{Output from \code{\link{diffSCEs}}}
 }
 \value{
 data.frame with MADs, MAEs, RMSEs, scaled statistics and ranks
 }
 \description{
-Summarise the results of \code{\link{diffSCESets}}. Calculates the Median
+Summarise the results of \code{\link{diffSCEs}}. Calculates the Median
 Absolute Deviation (MAD), Mean Absolute Error (MAE) and Root Mean Squared
 Error (RMSE) for the various properties and ranks them.
 }
 \examples{
 sim1 <- splatSimulate(nGenes = 1000, batchCells = 20)
 sim2 <- simpleSimulate(nGenes = 1000, nCells = 20)
-difference <- diffSCESets(list(Splat = sim1, Simple = sim2), ref = "Simple")
+difference <- diffSCEs(list(Splat = sim1, Simple = sim2), ref = "Simple")
 summary <- summariseDiff(difference)
 head(summary)
 }
diff --git a/man/zinbEstimate.Rd b/man/zinbEstimate.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..7d819e37f7a930b0ee15d1991db1dc406c6396ae
--- /dev/null
+++ b/man/zinbEstimate.Rd
@@ -0,0 +1,69 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/zinb-estimate.R
+\name{zinbEstimate}
+\alias{zinbEstimate}
+\alias{zinbEstimate.SingleCellExperiment}
+\alias{zinbEstimate.matrix}
+\title{Estimate ZINB-WaVE simulation parameters}
+\usage{
+zinbEstimate(counts, design.samples = NULL, design.genes = NULL,
+  common.disp = TRUE, iter.init = 2, iter.opt = 25, stop.opt = 1e-04,
+  params = newZINBParams(), verbose = TRUE, BPPARAM = SerialParam(), ...)
+
+\method{zinbEstimate}{SingleCellExperiment}(counts, design.samples = NULL,
+  design.genes = NULL, common.disp = TRUE, iter.init = 2, iter.opt = 25,
+  stop.opt = 1e-04, params = newZINBParams(), verbose = TRUE,
+  BPPARAM = SerialParam(), ...)
+
+\method{zinbEstimate}{matrix}(counts, design.samples = NULL,
+  design.genes = NULL, common.disp = TRUE, iter.init = 2, iter.opt = 25,
+  stop.opt = 1e-04, params = newZINBParams(), verbose = TRUE,
+  BPPARAM = SerialParam(), ...)
+}
+\arguments{
+\item{counts}{either a counts matrix or a SingleCellExperiment object
+containing count data to estimate parameters from.}
+
+\item{design.samples}{design matrix of sample-level covariates.}
+
+\item{design.genes}{design matrix of gene-level covariates.}
+
+\item{common.disp}{logical. Whether or not a single dispersion for all
+features is estimated.}
+
+\item{iter.init}{number of iterations to use for initalization.}
+
+\item{iter.opt}{number of iterations to use for optimization.}
+
+\item{stop.opt}{stopping criterion for optimization.}
+
+\item{params}{ZINBParams object to store estimated values in.}
+
+\item{verbose}{logical. Whether to print progress messages.}
+
+\item{BPPARAM}{A \code{\link[BiocParallel]{BiocParallelParam}} instance
+giving the parallel back-end to be used. Default is
+\code{\link[BiocParallel]{SerialParam}} which uses a single core.}
+
+\item{...}{additional arguments passes to \code{\link[zinbwave]{zinbFit}}.}
+}
+\value{
+ZINBParams object containing the estimated parameters.
+}
+\description{
+Estimate simulation parameters for the ZINB-WaVE simulation from a real
+dataset.
+}
+\details{
+The function is a wrapper around \code{\link[zinbwave]{zinbFit}} that takes
+the fitted model and inserts it into a \code{\link{ZINBParams}} object. See
+\code{\link{ZINBParams}} for more details on the parameters and
+\code{\link[zinbwave]{zinbFit}} for details of the estimation procedure.
+}
+\examples{
+\dontrun{
+data("sc_example_counts")
+params <- zinbEstimate(sc_example_counts)
+params
+}
+}
diff --git a/man/zinbSimulate.Rd b/man/zinbSimulate.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..17c6611ee19c0ce88a5412947f5945b2737f3738
--- /dev/null
+++ b/man/zinbSimulate.Rd
@@ -0,0 +1,46 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/zinb-simulate.R
+\name{zinbSimulate}
+\alias{zinbSimulate}
+\title{ZINB-WaVE simulation}
+\usage{
+zinbSimulate(params = newZINBParams(), verbose = TRUE, ...)
+}
+\arguments{
+\item{params}{ZINBParams object containing simulation parameters.}
+
+\item{verbose}{logical. Whether to print progress messages}
+
+\item{...}{any additional parameter settings to override what is provided in
+\code{params}.}
+}
+\value{
+SingleCellExperiment containing simulated counts
+}
+\description{
+Simulate counts using the ZINB-WaVE method.
+}
+\details{
+This function is just a wrapper around \code{\link[zinbwave]{zinbSim}} that
+takes a \code{\link{ZINBParams}}, runs the simulation then converts the
+output to a \code{\link[SingleCellExperiment]{SingleCellExperiment}} object.
+See \code{\link[zinbwave]{zinbSim}} and the ZINB-WaVE paper for
+more details about how the simulation works.
+}
+\examples{
+sim <- zinbSimulate()
+
+}
+\references{
+Campbell K, Yau C. Uncovering genomic trajectories with heterogeneous genetic
+and environmental backgrounds across single-cells and populations. bioRxiv
+(2017).
+
+Risso D, Perraudeau F, Gribkova S, Dudoit S, Vert J-P. ZINB-WaVE: A general
+and flexible method for signal extraction from single-cell RNA-seq data
+bioRxiv (2017).
+
+Paper: \url{10.1101/125112}
+
+Code: \url{https://github.com/drisso/zinbwave}
+}
diff --git a/tests/testthat/test-PhenoParams.R b/tests/testthat/test-PhenoParams.R
new file mode 100644
index 0000000000000000000000000000000000000000..d5a252daba9f5f300840bc949f8a199b79d6e7a1
--- /dev/null
+++ b/tests/testthat/test-PhenoParams.R
@@ -0,0 +1,15 @@
+context("PhenoParams")
+
+test_that("constructor is valid", {
+    expect_true(validObject(newPhenoParams()))
+})
+
+test_that("nGenes checks work", {
+    params <- newPhenoParams()
+    expect_error(setParam(params, "nGenes", 1),
+                 "nGenes cannot be set directly")
+    params <- setParam(params, "n.de", 0)
+    total <- getParam(params, "n.de") + getParam(params, "n.pst") +
+             getParam(params, "n.pst.beta") + getParam(params, "n.de.pst.beta")
+    expect_equal(getParam(params, "nGenes"), total)
+})
diff --git a/tests/testthat/test-SplatParams.R b/tests/testthat/test-SplatParams.R
index 88c32aa5b5cc01712952d601bc1ad7bb8505dc0f..208f0dfa24b672635f12709d4823b49cdaa3c7d7 100644
--- a/tests/testthat/test-SplatParams.R
+++ b/tests/testthat/test-SplatParams.R
@@ -20,9 +20,7 @@ test_that("path.from checks work", {
     params <- setParamUnchecked(params, "path.from", c(0, 1))
     expect_silent(validObject(params))
     params <- setParamUnchecked(params, "path.from", c(0, 3))
-    expect_error(validObject(params),
-                 paste('invalid class "SplatParams" object: path.from:',
-                       "All elements must be <= 2"))
+    expect_error(validObject(params), "invalid class")
     params <- setParamUnchecked(params, "path.from", c(1, 0))
     expect_error(validObject(params), "path cannot begin at itself")
     params <- newSplatParams()
diff --git a/tests/testthat/test-ZINBParams.R b/tests/testthat/test-ZINBParams.R
new file mode 100644
index 0000000000000000000000000000000000000000..bbb7abd371aa1cddae7f7332201fe10bfc209f62
--- /dev/null
+++ b/tests/testthat/test-ZINBParams.R
@@ -0,0 +1,13 @@
+context("ZINBParams")
+
+test_that("constructor is valid", {
+    expect_true(validObject(newZINBParams()))
+})
+
+test_that("nGenes checks work", {
+    params <- newZINBParams()
+    expect_error(setParam(params, "nGenes", 1),
+                 "nGenes cannot be set directly")
+    expect_error(setParam(params, "nCells", 1),
+                 "nCells cannot be set directly")
+})
diff --git a/tests/testthat/test-mfa-simulate.R b/tests/testthat/test-mfa-simulate.R
new file mode 100644
index 0000000000000000000000000000000000000000..877e0a9686460f9ec84fe107c0fb1397da969723
--- /dev/null
+++ b/tests/testthat/test-mfa-simulate.R
@@ -0,0 +1,6 @@
+context("mfa simulation")
+
+test_that("mfa simulation output is valid", {
+    expect_true(validObject(mfaSimulate()))
+    expect_true(validObject(mfaSimulate(dropout.present = TRUE)))
+})
diff --git a/tests/testthat/test-pheno-simulate.R b/tests/testthat/test-pheno-simulate.R
new file mode 100644
index 0000000000000000000000000000000000000000..f67a25e72e0ca8cd8ef82537f83a752ae23a429a
--- /dev/null
+++ b/tests/testthat/test-pheno-simulate.R
@@ -0,0 +1,5 @@
+context("PhenoPath simulation")
+
+test_that("PhenoPath simulation output is valid", {
+    expect_true(validObject(phenoSimulate()))
+})
diff --git a/tests/testthat/test-simulate-simple.R b/tests/testthat/test-simple-simulate.R
similarity index 100%
rename from tests/testthat/test-simulate-simple.R
rename to tests/testthat/test-simple-simulate.R
diff --git a/tests/testthat/test-zinb-simulate.R b/tests/testthat/test-zinb-simulate.R
new file mode 100644
index 0000000000000000000000000000000000000000..80b2b1c5bcd8062be039f7a2260458920353d6de
--- /dev/null
+++ b/tests/testthat/test-zinb-simulate.R
@@ -0,0 +1,5 @@
+context("ZINB-WaVE simulation")
+
+test_that("ZINB-WaVE simulation output is valid", {
+    expect_true(validObject(zinbSimulate()))
+})
diff --git a/vignettes/splatter.Rmd b/vignettes/splatter.Rmd
index 7f9a95774a4b6b15c6428ea785b18ed9d0f56c63..e72e8669f529c13dd2a5bca6d20521887056d9da 100644
--- a/vignettes/splatter.Rmd
+++ b/vignettes/splatter.Rmd
@@ -220,8 +220,8 @@ params <- splatEstimate(sc_example_counts)
 ```
 
 Here we estimated parameters from a counts matrix but `splatEstimate` can also
-take an `SCESet` object from the `scater` package. The estimation process has
-the following steps:
+take a `SingleCellExperiment` object. The estimation process has the following
+steps:
 
 1. Mean parameters are estimated by fitting a gamma distribution to the mean
    expression levels.
@@ -250,39 +250,42 @@ sim <- splatSimulate(params, nGenes = 1000, dropout.present = FALSE)
 sim
 ```
 
-Looking at the output of `splatSimulate` we can see that `sim` is an `SCESet`
-object with `r nrow(sim)` features (genes) and `r ncol(sim)` samples
-(cells). The main part of this object is a features by samples matrix containing
-the simulated counts (accessed using `counts`), although it can also hold other
-expression measures such as FPKM or TPM. Additionaly an `SCESet` contains
-phenotype information about each cell (accessed using `pData`) and feature
-information about each gene (accessed using `fData`). Splatter uses these slots
-to store information about the intermediate values of the simulation.
-
-```{r SCESet}
+Looking at the output of `splatSimulate` we can see that `sim` is
+`SingleCellExperiment` object with `r nrow(sim)` features (genes) and
+`r ncol(sim)` samples (cells). The main part of this object is a features
+by samples matrix containing the simulated counts (accessed using `counts`),
+although it can also hold other expression measures such as FPKM or TPM.
+Additionaly a `SingleCellExperiment` contains phenotype information about
+each cell (accessed using `colData`) and feature information about each gene
+(accessed using `rowData`). Splatter uses these slots, as well as `assays`, to
+store information about the intermediate values of the simulation.
+
+```{r SCE}
 # Access the counts
 counts(sim)[1:5, 1:5]
 # Information about genes
-head(fData(sim))
+head(rowData(sim))
 # Information about cells
-head(pData(sim))
+head(colData(sim))
 # Gene by cell matrices
-names(assayData(sim))
+names(assays(sim))
 # Example of cell means matrix
-get_exprs(sim, "CellMeans")[1:5, 1:5]
+assays(sim)$CellMeans[1:5, 1:5]
 ```
 
-An additional (big) advantage of outputting an `SCESet` is that we get immediate
-access to all of the `scater` functions. For example we can make a PCA plot:
+An additional (big) advantage of outputting a `SingleCellExperiment` is that we
+get immediate access to other analysis packages, such as the plotting functions
+in `scater`. For example we can make a PCA plot:
 
 ```{r pca}
-plotPCA(sim)
+plotPCA(sim, exprs_values = "counts")
 ```
 
 (**NOTE:** Your values and plots may look different as the simulation is random
 and produces different results each time it is run.)
 
-For more details of the `SCESet` and what you can do with `scater` refer to the
+For more details about the `SingleCellExperiment` object refer to the [vignette]
+[SCE-vignette]. For information about what you can do with `scater` refer to the
 `scater` documentation and [vignette][scater-vignette].
 
 The `splatSimulate` function outputs the following additional information about
@@ -315,8 +318,8 @@ the simulation:
       cells.
 
 Values that have been added by Splatter are named using `UpperCamelCase` to
-separate them from the `underscore_naming` used by `scater`. For more
-information on the simulation see `?splatSimulate`.
+separate them from the `underscore_naming` used by `scater` and other packages.
+For more information on the simulation see `?splatSimulate`.
 
 ## Simulating groups
 
@@ -333,7 +336,7 @@ printing progress messages.)
 ```{r groups}
 sim.groups <- splatSimulate(group.prob = c(0.5, 0.5), method = "groups",
                             verbose = FALSE)
-plotPCA(sim.groups, colour_by = "Group")
+plotPCA(sim.groups, colour_by = "Group", exprs_values = "counts")
 ```
 
 As we have set both the group probabilites to 0.5 we should get approximately
@@ -351,7 +354,7 @@ method.
 
 ```{r paths}
 sim.paths <- splatSimulate(method = "paths", verbose = FALSE)
-plotPCA(sim.paths, colour_by = "Step")
+plotPCA(sim.paths, colour_by = "Step", exprs_values = "counts")
 ```
 
 Here the colours represent the "step" of each cell or how far along the 
@@ -370,7 +373,7 @@ cells are in each batch:
 
 ```{r batches}
 sim.batches <- splatSimulate(batchCells = c(50, 50), verbose = FALSE)
-plotPCA(sim.batches, colour_by = "Batch")
+plotPCA(sim.batches, colour_by = "Batch", exprs_values = "counts")
 ```
 
 This looks at lot like when we simulated groups and that is because the process
@@ -383,7 +386,8 @@ that we aren't interested in (batch) and the wanted variation we are looking for
 ```{r batch-groups}
 sim.groups <- splatSimulate(batchCells = c(50, 50), group.prob = c(0.5, 0.5),
                             method = "groups", verbose = FALSE)
-plotPCA(sim.groups, shape_by = "Batch", colour_by = "Group")
+plotPCA(sim.groups, shape_by = "Batch", colour_by = "Group",
+        exprs_values = "counts")
 ```
 
 Here we see that the effects of the group (first component) are stronger than
@@ -421,31 +425,31 @@ associated with that simulation. For example the prefix for the simple
 simulation is `simple` so it would store it's parameters in a `SimpleParams`
 object that can be created using `newSimpleParams()` or estimated from real
 data using `simpleEstimate()`. To simulate data using that simulation you
-would use `simpleSimulate()`. Each simulation returns an `SCESet` object with
-intermediate values similar to that returned by `splatSimulate()`. For more
-detailed information on each simulation see the appropriate help page (eg.
-`?simpleSimulate` for information on how the simple simulation works or
-`?lun2Estimate` for details of how the Lun 2 simulation estimates
-parameters) or refer to the appropriate paper or package.
+would use `simpleSimulate()`. Each simulation returns a `SingleCellExperiment`
+object with intermediate values similar to that returned by `splatSimulate()`.
+For more detailed information on each simulation see the appropriate help page
+(eg. `?simpleSimulate` for information on how the simple simulation works or `?
+lun2Estimate` for details of how the Lun 2 simulation estimates parameters) or
+refer to the appropriate paper or package.
 
 # Other expression values
 
 Splatter is designed to simulate count data but some analysis methods expect
-other expression values, particularly length-normalised values such as TPM or
-FPKM. The `scater` package has functions for adding these values to an `SCESet`
-object but they require a length for each gene. The `addGeneLengths` can be
-used to simulate these lengths:
+other expression values, particularly length-normalised values such as TPM
+or FPKM. The `scater` package has functions for adding these values to a
+`SingleCellExperiment` object but they require a length for each gene. The
+`addGeneLengths` function can be used to simulate these lengths:
 
 ```{r lengths}
 sim <- simpleSimulate(verbose = FALSE)
 sim <- addGeneLengths(sim)
-head(fData(sim))
+head(rowData(sim))
 ```
 
 We can then use `scater` to calculate TPM:
 
 ```{r TPM}
-tpm(sim) <- calculateTPM(sim, fData(sim)$Length)
+tpm(sim) <- calculateTPM(sim, rowData(sim)$Length)
 tpm(sim)[1:5, 1:5]
 ```
 
@@ -460,15 +464,15 @@ Alternatively lengths can be sampled from a provided vector (see
 
 One thing you might like to do after simulating data is to compare it to a real
 dataset, or compare simulations with different parameters or models. Splatter
-provides a function `compareSCESets` that aims to make these comparisons easier.
-As the name suggests this function takes a list of `SCESet` objects, combines
-the datasets and produces some plots comparing them. Let's make two small
-simulations and see how they compare.
+provides a function `compareSCEs` that aims to make these comparisons easier. As
+the name suggests this function takes a list of `SingleCellExperiment` objects,
+combines the datasets and produces some plots comparing them. Let's make two
+small simulations and see how they compare.
 
 ```{r comparison}
 sim1 <- splatSimulate(nGenes = 1000, batchCells = 20, verbose = FALSE)
 sim2 <- simpleSimulate(nGenes = 1000, nCells = 20, verbose = FALSE)
-comparison <- compareSCESets(list(Splat = sim1, Simple = sim2))
+comparison <- compareSCEs(list(Splat = sim1, Simple = sim2))
 
 names(comparison)
 names(comparison$Plots)
@@ -496,15 +500,15 @@ ggplot(comparison$PhenoData,
 
 ## Comparing differences
 
-Sometimes instead of visually comparing datasets it may be more interesting to
-look at the differences between them. We can do this using the `diffSCESets`
-function. Similar to `compareSCESets` this function takes a list of `SCESet`
-objects but now we also specify one to be a reference. A series of similar plots
-are returned but instead of showing the overall distributions they demonstrate
-differences from the reference.
+Sometimes instead of visually comparing datasets it may be more interesting
+to look at the differences between them. We can do this using the
+`diffSCEs` function. Similar to `compareSCEs` this function takes a list of
+`SingleCellExperiment` objects but now we also specify one to be a reference.
+A series of similar plots are returned but instead of showing the overall
+distributions they demonstrate differences from the reference.
 
 ```{r difference}
-difference <- diffSCESets(list(Splat = sim1, Simple = sim2), ref = "Simple")
+difference <- diffSCEs(list(Splat = sim1, Simple = sim2), ref = "Simple")
 difference$Plots$Means
 ```
 
@@ -556,3 +560,4 @@ sessionInfo()
 [gamma]: https://en.wikipedia.org/wiki/Gamma_distribution
 [poisson]: https://en.wikipedia.org/wiki/Poisson_distribution
 [scater-vignette]: https://bioconductor.org/packages/release/bioc/vignettes/scater/inst/doc/vignette.html
+[SCE-vignette]: https://bioconductor.org/packages/devel/bioc/vignettes/SingleCellExperiment/inst/doc/intro.html