 +
 +    // Generate the LU decomposition of the matrix
 +    void GenerateLDUDecomposition(uint8_t* matrix_L, uint8_t* diag_D, uint8_t* matrix_U);
++  CM256Decoder();
 +};
 +
++CM256Decoder::CM256Decoder()
++  : Params(),
++    Recovery(),
++    RecoveryCount(0),
++    Original(),
++    OriginalCount(0),
++    ErasuresIndices()
++{
++}
 +bool CM256Decoder::Initialize(cm256_encoder_params& params, cm256_block* blocks)
 +{
 +    Params = params;

+    return 0;
+}
diff --git a/gf256.cpp b/gf256.cpp
index 510146b..cad3a43 100644
--- a/gf256.cpp
+++ b/gf256.cpp
@@ -27,7 +27,7 @@
     POSSIBILITY OF SUCH DAMAGE.
 */
 
-#include "gf256.h"
+#include <wirehair/gf256.h>
 
 #ifdef LINUX_ARM
 #include <unistd.h>
diff --git a/include/wirehair/cm256.h b/include/wirehair/cm256.h
new file mode 100644
index 0000000..72a8415
--- /dev/null
+++ b/include/wirehair/cm256.h
@@ -0,0 +1,170 @@
+/*
+	Copyright (c) 2015 Christopher A. Taylor.  All rights reserved.
+

 // Compiler-specific debug break
diff --git a/cm256.cpp b/cm256.cpp
new file mode 100644
index 0000000..4abd632
--- /dev/null
+++ b/cm256.cpp
@@ -0,0 +1,613 @@
+/*
+	Copyright (c) 2015 Christopher A. Taylor.  All rights reserved.
+
