diff --git a/Claunia.ReedSolomon/Claunia.ReedSolomon.csproj b/Claunia.ReedSolomon/Claunia.ReedSolomon.csproj
index eddcc6b..ac934e8 100644
--- a/Claunia.ReedSolomon/Claunia.ReedSolomon.csproj
+++ b/Claunia.ReedSolomon/Claunia.ReedSolomon.csproj
@@ -51,6 +51,7 @@
+
diff --git a/Claunia.ReedSolomon/OutputByteInputTableCodingLoop.cs b/Claunia.ReedSolomon/OutputByteInputTableCodingLoop.cs
new file mode 100644
index 0000000..7093500
--- /dev/null
+++ b/Claunia.ReedSolomon/OutputByteInputTableCodingLoop.cs
@@ -0,0 +1,38 @@
+/**
+ * One specific ordering/nesting of the coding loops.
+ *
+ * Copyright 2015, Backblaze, Inc. All rights reserved.
+ * Copyright © 2019 Natalia Portillo
+ */
+
+namespace Claunia.ReedSolomon
+{
+ public class OutputByteInputTableCodingLoop : CodingLoopBase
+ {
+ public override void CodeSomeShards(byte[][] matrixRows, byte[][] inputs, int inputCount, byte[][] outputs,
+ int outputCount, int offset, int byteCount)
+ {
+ byte[][] table = Galois.MULTIPLICATION_TABLE;
+
+ for(int iOutput = 0; iOutput < outputCount; iOutput++)
+ {
+ byte[] outputShard = outputs[iOutput];
+ byte[] matrixRow = matrixRows[iOutput];
+
+ for(int iByte = offset; iByte < offset + byteCount; iByte++)
+ {
+ int value = 0;
+
+ for(int iInput = 0; iInput < inputCount; iInput++)
+ {
+ byte[] inputShard = inputs[iInput];
+ byte[] multTableRow = table[matrixRow[iInput] & 0xFF];
+ value ^= multTableRow[inputShard[iByte] & 0xFF];
+ }
+
+ outputShard[iByte] = (byte)value;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file