--- a
+++ b/singlecellmultiomics/modularDemultiplexer/demultiplexModules/CELSeq2.py
@@ -0,0 +1,138 @@
+from singlecellmultiomics.modularDemultiplexer.baseDemultiplexMethods import UmiBarcodeDemuxMethod
+
+# Cell seq 2 with 6bp UMI
+
+
+class CELSeq2_c8_u6(UmiBarcodeDemuxMethod):
+    def __init__(self, barcodeFileParser, **kwargs):
+        self.barcodeFileAlias = 'celseq2'
+        UmiBarcodeDemuxMethod.__init__(
+            self,
+            umiRead=0,
+            umiStart=0,
+            umiLength=6,
+            barcodeRead=0,
+            barcodeStart=6,
+            barcodeLength=8,
+            random_primer_read=1,
+            random_primer_length=6,
+            barcodeFileAlias=self.barcodeFileAlias,
+            barcodeFileParser=barcodeFileParser,
+            **kwargs)
+        self.shortName = 'CS2C8U6'
+        self.longName = 'CELSeq 2, CB: 8bp, UMI: 6bp'
+        self.autoDetectable = True
+        self.description = 'R1 starts with a 6bp UMI  followed by a 8bp cell barcode. R2 ends with a 6bp random primer'
+
+
+class CELSeq2_c8_u6_NH(UmiBarcodeDemuxMethod):
+    def __init__(self, barcodeFileParser, **kwargs):
+        self.barcodeFileAlias = 'celseq2'
+        UmiBarcodeDemuxMethod.__init__(
+            self,
+            umiRead=0,
+            umiStart=0,
+            umiLength=6,
+            barcodeRead=0,
+            barcodeStart=6,
+            barcodeLength=8,
+            random_primer_read=None,
+            random_primer_length=None,
+            barcodeFileAlias=self.barcodeFileAlias,
+            barcodeFileParser=barcodeFileParser,
+            **kwargs)
+        self.shortName = 'CS2C8U6NH'
+        self.longName = 'CELSeq 2, CB: 8bp, UMI: 6bp, NO random primer'
+        self.autoDetectable = False
+        self.description = 'R1 starts with a 6bp UMI  followed by a 8bp cell barcode. R2 has no random primer. Use this demultiplexing method for VASA'
+
+# Reversed case:
+class CELSeq2_c8_u6_swapped_reads(UmiBarcodeDemuxMethod):
+    def __init__(self, barcodeFileParser, **kwargs):
+        self.barcodeFileAlias = 'celseq2'
+        UmiBarcodeDemuxMethod.__init__(
+            self,
+            umiRead=1,
+            umiStart=0,
+            umiLength=6,
+            barcodeRead=1,
+            barcodeStart=6,
+            barcodeLength=8,
+            random_primer_read=0,
+            random_primer_length=6,
+            barcodeFileAlias=self.barcodeFileAlias,
+            barcodeFileParser=barcodeFileParser,
+            **kwargs)
+        self.shortName = 'CS2C8U6S'
+        self.longName = 'CELSeq 2, CB: 8bp, UMI: 6bp, RP: 6bp'
+        self.autoDetectable = True
+        self.description = 'R2 starts with a 6bp UMI  followed by a 8bp cell barcode. R1 ends with a 6bp random primer'
+
+
+# Cell seq 2 with 8bp UMI
+class CELSeq2_c8_u8(UmiBarcodeDemuxMethod):
+    def __init__(self, barcodeFileParser, **kwargs):
+        self.barcodeFileAlias = 'celseq2'
+        UmiBarcodeDemuxMethod.__init__(
+            self,
+            umiRead=0,
+            umiStart=0,
+            umiLength=8,
+            random_primer_read=1,
+            random_primer_length=6,
+            barcodeRead=0,
+            barcodeStart=8,
+            barcodeLength=8,
+            barcodeFileAlias=self.barcodeFileAlias,
+            barcodeFileParser=barcodeFileParser,
+            **kwargs)
+        self.shortName = 'CS2C8U8'
+        self.longName = 'CELSeq 2, CB: 8bp, UMI: 8bp'
+        self.autoDetectable = True
+        self.description = 'R1 starts with a longer 8bp UMI  followed by a 8bp cell barcode. R2 ends with a 6bp random primer'
+
+# Reversed case:
+
+
+class CELSeq2_c8_u8(UmiBarcodeDemuxMethod):
+    def __init__(self, barcodeFileParser, **kwargs):
+        self.barcodeFileAlias = 'celseq2'
+        UmiBarcodeDemuxMethod.__init__(
+            self,
+            umiRead=1,
+            umiStart=0,
+            umiLength=8,
+            barcodeRead=1,
+            barcodeStart=8,
+            barcodeLength=8,
+            random_primer_read=1,
+            random_primer_length=6,
+            barcodeFileAlias=self.barcodeFileAlias,
+            barcodeFileParser=barcodeFileParser,
+            **kwargs)
+        self.shortName = 'CS2C8U8S'
+        self.longName = 'CELSeq 2, CB: 8bp, UMI: 8bp'
+        self.autoDetectable = True
+        self.description = 'R2 starts with a longer 8bp UMI  followed by a 8bp cell barcode. R1 ends with a 6bp primer'
+
+
+class CELSeq2_c8_u8_NNLAIII(UmiBarcodeDemuxMethod):
+    def __init__(self, barcodeFileParser, **kwargs):
+        self.barcodeFileAlias = 'celseq2_noNla'
+        UmiBarcodeDemuxMethod.__init__(
+            self,
+            umiRead=0,
+            umiStart=0,
+            umiLength=8,
+            barcodeRead=0,
+            barcodeStart=8,
+            barcodeLength=8,
+            random_primer_read=1,
+            random_primer_length=6,
+            barcodeFileAlias=self.barcodeFileAlias,
+            barcodeFileParser=barcodeFileParser,
+            **kwargs)
+        self.shortName = 'CS2C8U8NNLA'
+        self.longName = 'CELSeq 2, CB: 8bp, UMI: 8bp, NLAIII free'
+        self.autoDetectable = False
+        self.description = 'CEL-Seq2 without NLAIII digestable barcodes '