diff --git a/src/main/java/org/xerial/snappy/Snappy.java b/src/main/java/org/xerial/snappy/Snappy.java
index f6be1ee..84ccd03 100755
--- a/src/main/java/org/xerial/snappy/Snappy.java
+++ b/src/main/java/org/xerial/snappy/Snappy.java
@@ -38,10 +38,10 @@ public class Snappy
         int uLen = uncompressed.remaining();
         int compressedSize = SnappyNative.rawCompress(uncompressed, uPos, uLen, compressed, compressed.position());
 
-        //            pos      limit
-        // [ ....XXXXXX.........]
-        uncompressed.limit(uncompressed.capacity());
-        uncompressed.position(uPos + uLen);
+        //        //            pos      limit
+        //        // [ ....XXXXXX.........]
+        //        uncompressed.limit(uncompressed.capacity());
+        //        uncompressed.position(uPos + uLen);
 
         //         pos  limit
         // [ ......BBBBBBB.........]
@@ -69,8 +69,8 @@ public class Snappy
 
         boolean ret = SnappyNative.rawDecompress(compressed, cPos, cLen, decompressed, decompressed.position());
 
-        compressed.limit(compressed.capacity());
-        compressed.position(cPos + cLen);
+        //        compressed.limit(compressed.capacity());
+        //        compressed.position(cPos + cLen);
 
         return ret;
     }
diff --git a/src/main/java/org/xerial/snappy/SnappyNative.cpp b/src/main/java/org/xerial/snappy/SnappyNative.cpp
index bf5810e..446b00d 100755
--- a/src/main/java/org/xerial/snappy/SnappyNative.cpp
+++ b/src/main/java/org/xerial/snappy/SnappyNative.cpp
@@ -62,11 +62,8 @@ JNIEXPORT jint JNICALL Java_org_xerial_snappy_SnappyNative_maxCompressedLength
 JNIEXPORT jint JNICALL Java_org_xerial_snappy_SnappyNative_getUncompressedLength
   (JNIEnv * env, jclass self, jobject compressed, jint cpos, jint clen)
 {
-	char* compressedBuffer = (char*) env->GetDirectBufferAddress(compressed);
-	if(compressedBuffer == 0)
-		return (jint) -1;
-	compressedBuffer += cpos;
-
+	char* compressedBuffer = (char*) env->GetDirectBufferAddress(compressed) + cpos;
+	size_t result;
 	snappy::GetUncompressedLength(compressedBuffer, (size_t) clen, &result);
 	return (jint) result;
 }
diff --git a/src/main/resources/org/xerial/snappy/native/Windows/amd64/snappy.dll b/src/main/resources/org/xerial/snappy/native/Windows/amd64/snappy.dll
index a32e9c4..bfa71c6 100755
Binary files a/src/main/resources/org/xerial/snappy/native/Windows/amd64/snappy.dll and b/src/main/resources/org/xerial/snappy/native/Windows/amd64/snappy.dll differ
diff --git a/src/test/java/org/xerial/snappy/SnappyTest.java b/src/test/java/org/xerial/snappy/SnappyTest.java
index 74a7ec9..b0d2f8e 100755
--- a/src/test/java/org/xerial/snappy/SnappyTest.java
+++ b/src/test/java/org/xerial/snappy/SnappyTest.java
@@ -55,11 +55,19 @@ public class SnappyTest
         int maxCompressedLen = Snappy.getMaxCompressedLength(src.remaining());
         _logger.info("max compressed length:" + maxCompressedLen);
 
-        int uncompressedLen = Snappy.getUncompressedLength(src);
+        ByteBuffer compressed = ByteBuffer.allocateDirect(1024);
+        int compressedSize = Snappy.compress(src, compressed);
+        _logger.info("compressed size: " + compressedSize);
+
+        int uncompressedLen = Snappy.getUncompressedLength(compressed);
         _logger.info("uncompressed length: " + uncompressedLen);
+        ByteBuffer extract = ByteBuffer.allocateDirect(1024);
+        Snappy.decompress(compressed, extract);
+        extract.limit(uncompressedLen);
 
-        ByteBuffer dest = ByteBuffer.allocateDirect(1024);
-        Snappy.compress(src, dest);
-
+        byte[] b = new byte[uncompressedLen];
+        extract.get(b);
+        String decompressed = new String(b);
+        _logger.info(decompressed);
     }
 }