diff --git a/libSAEDEA.nimble b/libSAEDEA.nimble
index c71f6211224362c6cacb204ba156e2f361d4929b..e240774a48d0a1b5838d1b36ac5e4905d4c3f844 100644
--- a/libSAEDEA.nimble
+++ b/libSAEDEA.nimble
@@ -1,8 +1,8 @@
 # Package
 
-version       = "0.9.4"
+version       = "0.9.5"
 author        = "m33"
-description   = "Library implementing a variation of Simple And Efficient Data Encryption Algorithm (INTERNATIONAL JOURNAL OF SCIENTIFIC & TECHNOLOGY RESEARCH VOLUME 8, ISSUE 12, DECEMBER 2019 ISSN 2277-8616)"
+description   = "Library implementing a variation of the Simple And Efficient Data Encryption Algorithm (INTERNATIONAL JOURNAL OF SCIENTIFIC & TECHNOLOGY RESEARCH VOLUME 8, ISSUE 12, DECEMBER 2019 ISSN 2277-8616)"
 license       = "MIT"
 srcDir        = "src"
 binDir        = "bin"
diff --git a/src/libSAEDEA/saedea.nim b/src/libSAEDEA/saedea.nim
index adaec24d875cb669e23c0580ff85cca96739ae5c..04b53196b0abefe2c64cc645f5b4803fea048e34 100644
--- a/src/libSAEDEA/saedea.nim
+++ b/src/libSAEDEA/saedea.nim
@@ -17,7 +17,7 @@ proc gen_iv*(random_data: string): string =
 
 
 #
-# encrypt_stage1(secret, iv): string
+# encrypt_stage1(secret, iv, length): string
 #
 # First pass of string encryption, xor the secret key and initialization vector
 #
@@ -38,7 +38,28 @@ proc encrypt_stage1(secret: string, iv: string, len: int): string =
 
 
 #
-# decrypt_stage1(secret, iv): string
+# encrypt_stage1(secret, iv): string
+#
+# First pass of string encryption, xor the secret key and initialization vector
+#
+proc encrypt_light_stage1(secret: string, iv: string): string =
+  var hidden_str: string
+  var i = 0
+
+  # xor on repeated secret text and iv up to cleartext length
+  while i < secret.len:
+    hidden_str.add(cast[char](
+                    cast[int32](
+                      secret[i]) xor
+                    cast[int32](
+                      iv[(i mod iv.len)])))
+    i+=1
+  return hidden_str
+#endproc
+
+
+#
+# decrypt_stage1(secret, iv, length): string
 #
 # First pass of string decryption, xor secret,initialization vector, then cypertext and the product
 #
@@ -58,6 +79,27 @@ proc decrypt_stage1(hidden: string, iv: string, len: int): string =
 #endproc
 
 
+#
+# decrypt_stage1(secret, iv): string
+#
+# First pass of string decryption, xor secret,initialization vector, then cypertext and the product
+#
+proc decrypt_light_stage1(hidden: string, iv: string): string =
+  var product: string
+  var i = 0
+
+  # xor on repeated ciphertext and iv up to cleartext length
+  while i < hidden.len:
+    product.add(cast[char](
+                  cast[int32](
+                    hidden[i]) xor
+                  cast[int32](
+                    iv[(i mod iv.len)])))
+    i+=1
+  return product
+#endproc
+
+
 #
 # encrypt(text, secret, initialization vector, text length): string
 #
@@ -67,21 +109,19 @@ proc decrypt_stage1(hidden: string, iv: string, len: int): string =
 #
 proc encrypt*(text: string, secret: string, iv: string, len: int): string =
   let intermediate = encrypt_stage1(secret, iv, len)
-  #return encode(encrypt_stage1(text, intermediate, text.len))
   return encrypt_stage1(text, intermediate, len)
 #endproc
 
 
 #
-# encrypt(text, secret, initialization vector): string
+# encrypt_light(text, secret, initialization vector): string
 #
 # Light version
 # Simple encryption for text, using secret and a random initialization vector
 #
-proc encrypt*(text: string, secret: string, iv: string): string =
-  let intermediate = encrypt_stage1(secret, iv, text.len)
-  #return encode(encrypt_stage1(text, intermediate, text.len))
-  return encrypt_stage1(text, intermediate, intermediate.len)
+proc encrypt_light*(text: string, secret: string, iv: string): string =
+  let intermediate = encrypt_light_stage1(secret, iv)
+  return encrypt_light_stage1(text, intermediate)
 #endproc
 
 #
@@ -92,18 +132,16 @@ proc encrypt*(text: string, secret: string, iv: string): string =
 #
 proc decrypt*(hidden_str: string, secret: string, iv: string, len: int): string =
   let intermediate = decrypt_stage1(secret, iv, len)
-  #return decrypt_stage1(decode(hidden_str), intermediate, len)
   return decrypt_stage1(hidden_str, intermediate, len)
 #endproc
 
 #
-# decrypt(hidden, secret, initialization vector): string
+# decrypt_light(hidden, secret, initialization vector): string
 #
 # Light version
 # Simple decryption for ciphertext, using secret and a random initialization vector
 #
-proc decrypt*(hidden_str: string, secret: string, iv: string): string =
-  let intermediate = decrypt_stage1(secret, iv, hidden_str.len)
-  #return decrypt_stage1(decode(hidden_str), intermediate, len)
-  return decrypt_stage1(hidden_str, intermediate, intermediate.len)
+proc decrypt_light*(hidden_str: string, secret: string, iv: string): string =
+  let intermediate = decrypt_light_stage1(secret, iv)
+  return decrypt_light_stage1(hidden_str, intermediate)
 #endproc
diff --git a/tests/test1 b/tests/test1
index f2edaab11976af99a75f06cb1dddf37078c6880f..94a08e3effcf35f0ca67af03b594d9aac845a48e 100755
Binary files a/tests/test1 and b/tests/test1 differ
diff --git a/tests/test1.nim b/tests/test1.nim
index 63ada14f7c559848ae5985c73dc43505197f8c1d..5fdbdc8938fe3e5170cb56637b4bf7d512168a20 100644
--- a/tests/test1.nim
+++ b/tests/test1.nim
@@ -3,6 +3,7 @@
 import unittest
 import times
 import libSAEDEA
+import std/sha1
 
 proc cmpStrChars(s1: string, s2: string): bool =
   if s1.len != s2.len:
@@ -19,14 +20,18 @@ let iv = gen_iv("some random data" & $getTime())
 var encrypted = encrypt(text, secret, iv, text.len)
 var decrypted = decrypt(encrypted, secret, iv, text.len)
 
-var encrypted_light = encrypt(text, secret, iv)
-var decrypted_light = decrypt(encrypted, secret, iv)
-  #echo "Secret:", secret
-  #echo "IV:", iv
-  #echo "Cleartext:", text
-  #echo "Decrypted:", decrypted
-  #echo "Encrypted:", encrypted
-  #echo "Decrypted_light:", decrypted_light
+var encrypted_light = encrypt_light(text, secret, iv)
+var decrypted_light = decrypt_light(encrypted_light, secret, iv)
+
+echo "Secret:", secret
+echo "IV:", iv
+echo "Cleartext          :", text
+echo "Decrypted          :", decrypted
+echo "Decrypted_light    :", decrypted_light
+#echo "Encrypted          :", encrypted
+echo "Encrypted sha1     :", secureHash(encrypted)
+#echo "Encrypted_light    :", encrypted_light
+echo "Encrpted_light sha1:", secureHash(encrypted_light)
 
 echo "Matching test"
 check cmpStrChars(text, decrypted) == true
@@ -51,13 +56,13 @@ echo "Matching test with light encryption"
 check cmpStrChars(text, decrypted_light) == true
 
 echo "Wrong secret test with light encryption"
-decrypted_light = decrypt(encrypted, "wrong secret", iv)
+decrypted_light = decrypt_light(encrypted_light, "wrong secret", iv)
 check cmpStrChars(text, decrypted_light) == false
 
 echo "Wrong IV test with light encryption"
-decrypted_light = decrypt(encrypted, secret, "wrong iv")
+decrypted_light = decrypt_light(encrypted_light, secret, "wrong iv")
 check cmpStrChars(text, decrypted_light) == false
 
 echo "All wrong test with light encryption"
-decrypted_light = decrypt(encrypted, "wrong secret", "wrong iv")
+decrypted_light = decrypt_light(encrypted_light, "wrong secret", "wrong iv")
 check cmpStrChars(text, decrypted_light) == false