diff --git a/rsov/compiler/Builtin_test.cpp b/rsov/compiler/Builtin_test.cpp
index c180add..256703b 100644
--- a/rsov/compiler/Builtin_test.cpp
+++ b/rsov/compiler/Builtin_test.cpp
@@ -36,9 +36,7 @@
   passes.append(rs2spirv::CreateBuiltinPass());
   auto words1 = passes.run(words);
 
-  std::unique_ptr<InputWordStream> IS1(
-      InputWordStream::Create(std::move(words1)));
-  std::unique_ptr<Module> m1(Deserialize<Module>(*IS1));
+  std::unique_ptr<Module> m1(Deserialize<Module>(words1));
 
   ASSERT_NE(nullptr, m1);
 }
diff --git a/rsov/compiler/Wrapper.cpp b/rsov/compiler/Wrapper.cpp
index 66a00fc..77a7806 100644
--- a/rsov/compiler/Wrapper.cpp
+++ b/rsov/compiler/Wrapper.cpp
@@ -26,7 +26,6 @@
 #include "instructions.h"
 #include "module.h"
 #include "pass.h"
-#include "word_stream.h"
 
 #include <vector>
 
diff --git a/rsov/compiler/Wrapper_test.cpp b/rsov/compiler/Wrapper_test.cpp
index 73a8465..1be643a 100644
--- a/rsov/compiler/Wrapper_test.cpp
+++ b/rsov/compiler/Wrapper_test.cpp
@@ -21,7 +21,6 @@
 #include "instructions.h"
 #include "module.h"
 #include "test_utils.h"
-#include "word_stream.h"
 #include "gtest/gtest.h"
 
 namespace android {
@@ -63,8 +62,7 @@
 }
 
 TEST_F(WrapperTest, testAddWrapper1) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m);
 
@@ -85,8 +83,7 @@
 }
 
 TEST_F(WrapperTest, testAddWrapper2) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsInvert));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsInvert));
 
   ASSERT_NE(nullptr, m);
 
@@ -105,8 +102,7 @@
 }
 
 TEST_F(WrapperTest, testAddWrapperForRoot) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsInvert));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsInvert));
 
   ASSERT_NE(nullptr, m);
 
diff --git a/rsov/compiler/spirit/builder_test.cpp b/rsov/compiler/spirit/builder_test.cpp
index 111bddb..48030ae 100644
--- a/rsov/compiler/spirit/builder_test.cpp
+++ b/rsov/compiler/spirit/builder_test.cpp
@@ -20,7 +20,6 @@
 #include "instructions.h"
 #include "module.h"
 #include "test_utils.h"
-#include "word_stream.h"
 #include "gtest/gtest.h"
 
 namespace android {
@@ -182,17 +181,12 @@
 
   m->consolidateAnnotations();
 
-  std::unique_ptr<WordStream> S(WordStream::Create());
-  m->Serialize(*S);
-  auto words = S->getWords();
+  auto words = Serialize<Module>(m);
 
-  std::unique_ptr<InputWordStream> S1(InputWordStream::Create(words));
-  auto m1 = Deserialize<Module>(*S1);
+  auto m1 = Deserialize<Module>(words);
   ASSERT_NE(nullptr, m1);
 
-  std::unique_ptr<WordStream> S2(WordStream::Create());
-  m1->Serialize(*S2);
-  auto words1 = S2->getWords();
+  auto words1 = Serialize<Module>(m1);
 
   EXPECT_TRUE(words == words1);
 }
@@ -202,9 +196,7 @@
       "frameworks/rs/rsov/compiler/spirit/test_data/");
   const std::string &fullPath = getAbsolutePath(testDataPath + "greyscale.spv");
 
-  std::unique_ptr<InputWordStream> IS(
-      InputWordStream::Create(fullPath.c_str()));
-  Module *m = Deserialize<Module>(*IS);
+  Module *m = Deserialize<Module>(readFile<uint32_t>(fullPath.c_str()));
 
   ASSERT_NE(nullptr, m);
 
@@ -227,17 +219,12 @@
 
   m->consolidateAnnotations();
 
-  std::unique_ptr<OutputWordStream> S(OutputWordStream::Create());
-  m->Serialize(*S);
-  auto words = S->getWords();
+  auto words = Serialize<Module>(m);
 
-  std::unique_ptr<InputWordStream> S1(InputWordStream::Create(words));
-  auto m1 = Deserialize<Module>(*S1);
+  auto m1 = Deserialize<Module>(words);
   ASSERT_NE(nullptr, m1);
 
-  std::unique_ptr<OutputWordStream> S2(OutputWordStream::Create());
-  m1->Serialize(*S2);
-  auto words1 = S2->getWords();
+  auto words1 = Serialize<Module>(m1);
 
   EXPECT_TRUE(words == words1);
 }
diff --git a/rsov/compiler/spirit/entity.h b/rsov/compiler/spirit/entity.h
index f6587a9..33c112b 100644
--- a/rsov/compiler/spirit/entity.h
+++ b/rsov/compiler/spirit/entity.h
@@ -20,13 +20,13 @@
 #include <memory>
 #include <vector>
 
+#include "word_stream.h"
+
 namespace android {
 namespace spirit {
 
 class Builder;
-class InputWordStream;
 class IVisitor;
-class OutputWordStream;
 
 class Entity {
 public:
@@ -54,6 +54,11 @@
   return entity.release();
 }
 
+template <typename T> T *Deserialize(const std::vector<uint32_t> &words) {
+  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(words));
+  return Deserialize<T>(*IS);
+}
+
 template <class T>
 void DeserializeZeroOrMore(InputWordStream &IS, std::vector<T *> &all) {
   while (auto entity = Deserialize<T>(IS)) {
@@ -61,6 +66,13 @@
   }
 }
 
+template <class T>
+std::vector<uint32_t> Serialize(T* e) {
+  std::unique_ptr<OutputWordStream> OS(OutputWordStream::Create());
+  e->Serialize(*OS);
+  return OS->getWords();
+}
+
 } // namespace spirit
 } // namespace android
 
diff --git a/rsov/compiler/spirit/instructions_test.cpp b/rsov/compiler/spirit/instructions_test.cpp
index 7b089ca..ce4325e 100644
--- a/rsov/compiler/spirit/instructions_test.cpp
+++ b/rsov/compiler/spirit/instructions_test.cpp
@@ -16,7 +16,6 @@
 
 #include "instructions.h"
 
-#include "word_stream.h"
 #include "gtest/gtest.h"
 
 #include <memory>
@@ -27,8 +26,7 @@
 
 TEST(InstructionTest, testOpCapability) {
   std::vector<uint32_t> words = {0x00020011, 0x00000001};
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(words));
-  auto *i = Deserialize<CapabilityInst>(*IS);
+  auto *i = Deserialize<CapabilityInst>(words);
   EXPECT_NE(nullptr, i);
 }
 
@@ -37,8 +35,7 @@
                      0x43, 0x44, 0x45, 0x46, 'G',  0x00};
   std::vector<uint32_t> words((uint32_t *)bytes,
                               (uint32_t *)(bytes + sizeof(bytes)));
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(words));
-  auto *i = Deserialize<ExtensionInst>(*IS);
+  auto *i = Deserialize<ExtensionInst>(words);
   ASSERT_NE(nullptr, i);
   EXPECT_STREQ("ABCDEFG", i->mOperand1.c_str());
 }
@@ -49,8 +46,7 @@
                      0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00};
   std::vector<uint32_t> words((uint32_t *)bytes,
                               (uint32_t *)(bytes + sizeof(bytes)));
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(words));
-  auto *i = Deserialize<ExtInstImportInst>(*IS);
+  auto *i = Deserialize<ExtInstImportInst>(words);
   ASSERT_NE(nullptr, i);
   EXPECT_STREQ("GLSL.std.450", i->mOperand1.c_str());
 }
diff --git a/rsov/compiler/spirit/module_test.cpp b/rsov/compiler/spirit/module_test.cpp
index f24268f..20b342c 100644
--- a/rsov/compiler/spirit/module_test.cpp
+++ b/rsov/compiler/spirit/module_test.cpp
@@ -19,7 +19,6 @@
 #include "file_utils.h"
 #include "instructions.h"
 #include "test_utils.h"
-#include "word_stream.h"
 #include "gtest/gtest.h"
 
 #include <fstream>
@@ -50,8 +49,7 @@
 };
 
 TEST_F(ModuleTest, testDeserialization1) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  auto m = Deserialize<Module>(*IS);
+  auto m = Deserialize<Module>(mWordsGreyscale);
 
   ASSERT_NE(nullptr, m);
 
@@ -115,55 +113,44 @@
 }
 
 TEST_F(ModuleTest, testDeserialization2) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsInvert));
-  Module *m = Deserialize<Module>(*IS);
+  Module *m = Deserialize<Module>(mWordsInvert);
   ASSERT_NE(nullptr, m);
 
   std::unique_ptr<Module> mDeleter(m);
 
-  std::unique_ptr<OutputWordStream> OS(OutputWordStream::Create());
-  m->Serialize(*OS);
-  auto outwords = OS->getWords();
+  auto outwords = Serialize<Module>(m);
 
   EXPECT_TRUE(mWordsInvert == outwords);
 }
 
 TEST_F(ModuleTest, testSerialization1) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  Module *m = Deserialize<Module>(*IS);
+  Module *m = Deserialize<Module>(mWordsGreyscale);
   ASSERT_NE(nullptr, m);
 
   std::unique_ptr<Module> mDeleter(m);
 
   EXPECT_EQ(2, countEntity<FunctionDefinition>(m));
 
-  std::unique_ptr<OutputWordStream> OS(OutputWordStream::Create());
-  m->Serialize(*OS);
-  auto outwords = OS->getWords();
+  auto outwords = Serialize<Module>(m);
 
   EXPECT_TRUE(mWordsGreyscale == outwords);
 }
 
 TEST_F(ModuleTest, testSerialization2) {
-  std::unique_ptr<InputWordStream> IS(
-      InputWordStream::Create(mWordsGreyscale2));
-  Module *m = Deserialize<Module>(*IS);
+  Module *m = Deserialize<Module>(mWordsGreyscale2);
   ASSERT_NE(nullptr, m);
 
   std::unique_ptr<Module> mDeleter(m);
 
   EXPECT_EQ(1, countEntity<FunctionDefinition>(m));
 
-  std::unique_ptr<OutputWordStream> OS(OutputWordStream::Create());
-  m->Serialize(*OS);
-  auto outwords = OS->getWords();
+  auto outwords = Serialize<Module>(m);
 
   EXPECT_TRUE(mWordsGreyscale2 == outwords);
 }
 
 TEST_F(ModuleTest, testLookupByName) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  Module *m = Deserialize<Module>(*IS);
+  Module *m = Deserialize<Module>(mWordsGreyscale);
 
   ASSERT_NE(nullptr, m);
 
diff --git a/rsov/compiler/spirit/pass.cpp b/rsov/compiler/spirit/pass.cpp
index 6653f96..d8c3afe 100644
--- a/rsov/compiler/spirit/pass.cpp
+++ b/rsov/compiler/spirit/pass.cpp
@@ -17,7 +17,6 @@
 #include "pass.h"
 
 #include "module.h"
-#include "word_stream.h"
 
 namespace android {
 namespace spirit {
@@ -31,8 +30,7 @@
     }
     return nullptr;
   }
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(words));
-  return Deserialize<Module>(*IS);
+  return Deserialize<Module>(words);
 }
 
 std::vector<uint32_t> Pass::runAndSerialize(Module *module, int *error) {
@@ -44,9 +42,7 @@
     }
     return std::vector<uint32_t>();
   }
-  std::unique_ptr<OutputWordStream> OS(OutputWordStream::Create());
-  m1->Serialize(*OS);
-  return OS->getWords();
+  return Serialize<Module>(m1);
 }
 
 } // namespace spirit
diff --git a/rsov/compiler/spirit/pass_queue.cpp b/rsov/compiler/spirit/pass_queue.cpp
index 0a37e0a..1bbdd2c 100644
--- a/rsov/compiler/spirit/pass_queue.cpp
+++ b/rsov/compiler/spirit/pass_queue.cpp
@@ -17,7 +17,6 @@
 #include "pass_queue.h"
 
 #include "module.h"
-#include "word_stream.h"
 
 namespace android {
 namespace spirit {
@@ -72,9 +71,7 @@
     return spirvWords;
   }
 
-  std::unique_ptr<InputWordStream> IS(
-      InputWordStream::Create(std::move(spirvWords)));
-  Module *module = Deserialize<Module>(*IS);
+  Module *module = Deserialize<Module>(spirvWords);
   if (!module || !module->resolveIds()) {
     return std::vector<uint32_t>();
   }
@@ -85,9 +82,7 @@
 std::vector<uint32_t> PassQueue::runAndSerialize(Module *module, int *error) {
   const int n = mPasses.size();
   if (n < 1) {
-    std::unique_ptr<OutputWordStream> OS(OutputWordStream::Create());
-    module->Serialize(*OS);
-    return OS->getWords();
+    return Serialize<Module>(module);
   }
 
   // A unique ptr to keep intermediate modules from leaking
diff --git a/rsov/compiler/spirit/pass_queue_test.cpp b/rsov/compiler/spirit/pass_queue_test.cpp
index 0e7c183..23e18e2 100644
--- a/rsov/compiler/spirit/pass_queue_test.cpp
+++ b/rsov/compiler/spirit/pass_queue_test.cpp
@@ -20,7 +20,6 @@
 #include "spirit.h"
 #include "test_utils.h"
 #include "transformer.h"
-#include "word_stream.h"
 #include "gtest/gtest.h"
 
 #include <stdint.h>
@@ -92,8 +91,7 @@
 };
 
 TEST_F(PassQueueTest, testMulToAdd) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m);
 
@@ -113,8 +111,7 @@
 }
 
 TEST_F(PassQueueTest, testInPlaceModifying) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m);
 
@@ -136,8 +133,7 @@
 }
 
 TEST_F(PassQueueTest, testDeletion) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m.get());
 
@@ -152,8 +148,7 @@
 }
 
 TEST_F(PassQueueTest, testMulToAddToDiv) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m);
 
@@ -175,8 +170,7 @@
 }
 
 TEST_F(PassQueueTest, testAMix) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m);
 
@@ -203,8 +197,7 @@
 }
 
 TEST_F(PassQueueTest, testAnotherMix) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m);
 
@@ -219,8 +212,7 @@
   passes.append(new AddToDivTransformer());
   auto outputWords = passes.runAndSerialize(m.get());
 
-  std::unique_ptr<InputWordStream> IS1(InputWordStream::Create(outputWords));
-  std::unique_ptr<Module> m1(Deserialize<Module>(*IS1));
+  std::unique_ptr<Module> m1(Deserialize<Module>(outputWords));
 
   ASSERT_NE(nullptr, m1);
 
@@ -238,8 +230,7 @@
   passes.append(new AddToDivTransformer());
   auto outputWords = passes.run(std::move(mWordsGreyscale));
 
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(outputWords));
-  std::unique_ptr<Module> m1(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m1(Deserialize<Module>(outputWords));
 
   ASSERT_NE(nullptr, m1);
 
@@ -251,8 +242,7 @@
 }
 
 TEST_F(PassQueueTest, testMulToAddToDivToWords) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m);
 
@@ -264,8 +254,7 @@
   passes.append(new AddToDivTransformer());
   auto outputWords = passes.runAndSerialize(m.get());
 
-  std::unique_ptr<InputWordStream> IS1(InputWordStream::Create(outputWords));
-  std::unique_ptr<Module> m1(Deserialize<Module>(*IS1));
+  std::unique_ptr<Module> m1(Deserialize<Module>(outputWords));
 
   ASSERT_NE(nullptr, m1);
 
@@ -277,8 +266,7 @@
 }
 
 TEST_F(PassQueueTest, testAddMulAfterAdd) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m);
 
@@ -293,8 +281,7 @@
   }
   auto outputWords = passes.runAndSerialize(m.get());
 
-  std::unique_ptr<InputWordStream> IS1(InputWordStream::Create(outputWords));
-  std::unique_ptr<Module> m1(Deserialize<Module>(*IS1));
+  std::unique_ptr<Module> m1(Deserialize<Module>(outputWords));
 
   ASSERT_NE(nullptr, m1);
 
diff --git a/rsov/compiler/spirit/transformer.cpp b/rsov/compiler/spirit/transformer.cpp
index 4d2ab1f..0eb9621 100644
--- a/rsov/compiler/spirit/transformer.cpp
+++ b/rsov/compiler/spirit/transformer.cpp
@@ -23,8 +23,7 @@
 
 Module *Transformer::run(Module *module, int *error) {
   auto words = runAndSerialize(module, error);
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(words));
-  return Deserialize<Module>(*IS);
+  return Deserialize<Module>(words);
 }
 
 std::vector<uint32_t> Transformer::runAndSerialize(Module *m, int *error) {
diff --git a/rsov/compiler/spirit/transformer_test.cpp b/rsov/compiler/spirit/transformer_test.cpp
index e5f39a6..a78969f 100644
--- a/rsov/compiler/spirit/transformer_test.cpp
+++ b/rsov/compiler/spirit/transformer_test.cpp
@@ -19,7 +19,6 @@
 #include "file_utils.h"
 #include "spirit.h"
 #include "test_utils.h"
-#include "word_stream.h"
 #include "gtest/gtest.h"
 
 #include <stdint.h>
@@ -77,8 +76,7 @@
 };
 
 TEST_F(TransformerTest, testMulToAdd) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m);
 
@@ -97,8 +95,7 @@
 }
 
 TEST_F(TransformerTest, testDeletion) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m.get());
 
@@ -114,8 +111,7 @@
 }
 
 TEST_F(TransformerTest, testAddInstructionUsingNewDataType) {
-  std::unique_ptr<InputWordStream> IS(InputWordStream::Create(mWordsGreyscale));
-  std::unique_ptr<Module> m(Deserialize<Module>(*IS));
+  std::unique_ptr<Module> m(Deserialize<Module>(mWordsGreyscale));
 
   ASSERT_NE(nullptr, m.get());
 
diff --git a/rsov/compiler/spirit/word_stream.h b/rsov/compiler/spirit/word_stream.h
index 0c740de..94333bb 100644
--- a/rsov/compiler/spirit/word_stream.h
+++ b/rsov/compiler/spirit/word_stream.h
@@ -28,9 +28,6 @@
 namespace android {
 namespace spirit {
 
-// TODO: this constant might be too small
-constexpr uint32_t MAXIMUM_STRING_LITERAL_LENGTH = 256;
-
 struct IdRef;
 class Instruction;
 
@@ -111,7 +108,6 @@
 
   OutputWordStream &operator<<(const IdRef &RHS) {
     return *this << RHS.mId;
-    ;
   }
 
   OutputWordStream &operator<<(const PairLiteralIntegerIdRef &RHS) {
