diff --git a/skeleton/Program/Build/RaspberryCloud.v12.suo b/skeleton/Program/Build/RaspberryCloud.v12.suo
index 8b277e7538bdb15dbfc9ef54f71888b851971cdb..72b9117380fa07eeaa98d85489ba24ec78451468 100644
Binary files a/skeleton/Program/Build/RaspberryCloud.v12.suo and b/skeleton/Program/Build/RaspberryCloud.v12.suo differ
diff --git a/skeleton/Program/Source/dataAccess/ComputeOnClient.cpp b/skeleton/Program/Source/dataAccess/ComputeOnClient.cpp
index 54a6dab39eb1a824c6218ff8ab6f0fdc84ed7154..215a21d7803ab2063ec9992239b4171967d74fa7 100644
--- a/skeleton/Program/Source/dataAccess/ComputeOnClient.cpp
+++ b/skeleton/Program/Source/dataAccess/ComputeOnClient.cpp
@@ -52,7 +52,7 @@ string ComputeOnClient::getFile(FileDescriptor fileDescriptor) {
 			FileDescriptor* downloaded = cloudFileSystem.getCloudAccessLayer()->download(*fileToDownload);
 			cloudFileSystem.unlock(*fileToDownload);
 
-			return Decoder::decode(downloaded);
+			return Decoder::decode(fileToDownload);
 		}
 		else
 		{
diff --git a/skeleton/Program/Source/dataAccess/Decoder.cpp b/skeleton/Program/Source/dataAccess/Decoder.cpp
index bd17d22c2e464d3afacc23f13a05c5d0e905b026..711b3a73ea62c0b6556a58d990308f651749c9ed 100644
--- a/skeleton/Program/Source/dataAccess/Decoder.cpp
+++ b/skeleton/Program/Source/dataAccess/Decoder.cpp
@@ -4,6 +4,11 @@
 #include "Encoder.h"
 #include <string>
 #include <fstream>
+
+#include <kodo/object/file_decoder.hpp>
+#include <kodo/rlnc/full_rlnc_codes.hpp>
+
+#include <boost/format.hpp>
 /**
  * Decoder implementation
  */
@@ -17,29 +22,60 @@ string Decoder::decode(FileDescriptor* fileDescriptor) {
 		return "unable to decode";
 	}
 
-	vector<Fragment> frags = fileDescriptor->getFragments();
-	if (frags.size() > 0)
+	auto fragments = fileDescriptor->getFragments();
+	if (fragments.size() > 0)
 	{
-		Fragment f = frags.at(0);
-		//check if file exists
-		if (!Encoder::exists(fragFolder+f.getCloudFileID())){
-			throw CloudException("No such file exists");
-			return NULL;
-		}
+		uint32_t max_symbols = 10;
+		uint32_t max_symbol_size = fileDescriptor->getSize() / 10 + 1;
+
+		using file_decoder = kodo::object::file_decoder<
+			kodo::shallow_full_rlnc_decoder<fifi::binary >> ;
+
+		file_decoder::factory decoder_factory(max_symbols, max_symbol_size);
+
+		decoder_factory.set_filename(dataFolder + fileDescriptor->getFileID());
+		decoder_factory.set_file_size(fileDescriptor->getSize());
+
+		auto decoder = decoder_factory.build();
 
-		ifstream src(fragFolder + f.getCloudFileID(), std::ios::binary);
-		ofstream dst(dataFolder + fileDescriptor->getFileID(), std::ios::binary);
-		dst << src.rdbuf();
+		for (uint32_t i = 0; i < decoder->blocks(); i++)
+		{
+			auto d = decoder->build(i);
 
-		src.close();
-		dst.close();
+			for (int fragNum = 0; fragNum < fragments.size() && !d->is_complete(); fragNum++)
+			{
+				std::vector<uint8_t> payload;
 
-		//delete temp
-		string spath = fragFolder + f.getCloudFileID();
-		const char* path = spath.c_str();
-		int res = remove(path);
-		cout << res;
-		cout << spath << endl;
+				std::ifstream fragFile(
+					fragFolder + fragments[fragNum].getCloudFileID(),
+					std::ios::in | std::ios::binary);
+
+				if (!fragFile) 
+				{
+					throw CloudException("No such file exists");
+				}
+
+				std::copy(std::istreambuf_iterator<char>(fragFile),
+					std::istreambuf_iterator<char>(),
+					std::back_inserter(payload));
+				fragFile.close();
+				payload.shrink_to_fit();
+
+				d->decode(payload.data());
+			}
+
+			// Not removed in previous loop, because that doesn't necessarily 
+			// iterate through every fragment
+			for each (Fragment fragment in fragments)
+			{
+				remove((fragFolder + fragment.getCloudFileID()).c_str());
+			}
+
+			if (!d->is_complete())
+			{
+				throw CloudException("Error while assembling file");
+			}
+		}
 
 		return "Successfully decoded " + fileDescriptor->getFileID();
 	} else {
diff --git a/skeleton/Program/Source/dataAccess/Encoder.cpp b/skeleton/Program/Source/dataAccess/Encoder.cpp
index 6507ec7fe8bf22cea5e28a122b4a0d898a51d293..666d273c252e4415e3b040bc1641c7e0663b9039 100644
--- a/skeleton/Program/Source/dataAccess/Encoder.cpp
+++ b/skeleton/Program/Source/dataAccess/Encoder.cpp
@@ -4,7 +4,6 @@
 #include  <fstream>
 
 #include <kodo/object/file_encoder.hpp>
-#include <kodo/object/file_decoder.hpp>
 #include <kodo/rlnc/full_rlnc_codes.hpp>
 
 #include <boost/format.hpp>