diff -rupN jxrlib/image/sys/common.h jxrlib-new/image/sys/common.h
--- jxrlib/image/sys/common.h	2013-03-21 17:30:54.000000000 +0100
+++ jxrlib-new/image/sys/common.h	2015-09-03 10:31:06.528657911 +0200
@@ -124,8 +124,8 @@ Void Adapt (CAdaptiveHuffman *pAdHuff, B
 Void AdaptFixed (CAdaptiveHuffman *pAdHuff);
 Void AdaptDiscriminant (CAdaptiveHuffman *pAdHuff);
 
-#ifndef _PREFAST_
-#pragma warning(disable:4068)
-#endif
+// #ifndef _PREFAST_
+// #pragma warning(disable:4068)
+// #endif
 
 #endif  // WMI_COMMON_H
diff -rupN jxrlib/image/sys/strcodec.c jxrlib-new/image/sys/strcodec.c
--- jxrlib/image/sys/strcodec.c	2013-03-20 19:16:21.000000000 +0100
+++ jxrlib-new/image/sys/strcodec.c	2015-09-03 10:30:31.018971760 +0200
@@ -668,9 +668,7 @@ ERR detach_SB(SimpleBitIO* pSB)
 // WinCE ARM and Desktop x86
 #else
 // other platform
-#ifdef _BIG__ENDIAN_
-#define _byteswap_ulong(x)  (x)
-#else // _BIG__ENDIAN_
+#ifndef _BIG__ENDIAN_
 U32 _byteswap_ulong(U32 bits)
 {
     U32 r = (bits & 0xffu) << 24;
diff -rupN jxrlib/image/sys/strcodec.h jxrlib-new/image/sys/strcodec.h
--- jxrlib/image/sys/strcodec.h	2013-03-21 19:22:34.000000000 +0100
+++ jxrlib-new/image/sys/strcodec.h	2015-09-03 10:30:31.019971779 +0200
@@ -64,7 +64,7 @@
 
 #ifndef UNREFERENCED_PARAMETER
 #define UNREFERENCED_PARAMETER(P) { (P) = (P); }
-#endif UNREFERENCED_PARAMETER
+#endif // UNREFERENCED_PARAMETER
 
 #ifdef UNDER_CE
 #define PLATFORM_WCE
@@ -673,6 +673,16 @@ void flushToByte(BitIOInfo* pIO);
     pIO->cBitsUsed &= 16 - 1;\
     pIO->uiAccumulator = LOAD16(pIO->pbCurrent) << pIO->cBitsUsed;\
     return 0;
-//    pIO->uiAccumulator = LOAD16(pIO->pbCurrent) & ((U32)(-1) >> pIO->cBitsUsed);\
 
 void OutputPerfTimerReport(CWMImageStrCodec *pState);
+
+#if (defined(WIN32) && !defined(UNDER_CE)) || (defined(UNDER_CE) && defined(_ARM_))
+// WinCE ARM and Desktop x86
+#else
+// other platform
+#ifdef _BIG__ENDIAN_
+#define _byteswap_ulong(x)  (x)
+#else // _BIG__ENDIAN_
+U32 _byteswap_ulong(U32 bits);
+#endif // _BIG__ENDIAN_
+#endif
\ No newline at end of file
diff -rupN jxrlib/jxrencoderdecoder/JxrDecApp.c jxrlib-new/jxrencoderdecoder/JxrDecApp.c
--- jxrlib/jxrencoderdecoder/JxrDecApp.c	2013-05-08 18:45:08.000000000 +0200
+++ jxrlib-new/jxrencoderdecoder/JxrDecApp.c	2015-09-03 10:30:31.019971779 +0200
@@ -423,7 +423,7 @@ ERR WmpDecAppCreateEncoderFromExt(
     Call(GetTestEncodeIID(szExt, &pIID));
 
     // Create encoder
-    Call(PKTestFactory_CreateCodec(pIID, ppIE));
+    Call(PKTestFactory_CreateCodec(pIID, (void**)ppIE));
 
 Cleanup:
     return err;
diff -rupN jxrlib/jxrencoderdecoder/JxrEncApp.c jxrlib-new/jxrencoderdecoder/JxrEncApp.c
--- jxrlib/jxrencoderdecoder/JxrEncApp.c	2013-05-28 20:58:22.000000000 +0200
+++ jxrlib-new/jxrencoderdecoder/JxrEncApp.c	2015-09-03 10:30:31.020971798 +0200
@@ -578,7 +578,7 @@ main(int argc, char* argv[])
 
     //================================
     Call(PKCreateCodecFactory(&pCodecFactory, WMP_SDK_VERSION));
-    Call(pCodecFactory->CreateCodec(&IID_PKImageWmpEncode, &pEncoder));
+    Call(pCodecFactory->CreateCodec(&IID_PKImageWmpEncode, (void**)&pEncoder));
 
     //----------------------------------------------------------------
     Call(PKCreateTestFactory(&pTestFactory, WMP_SDK_VERSION));
diff -rupN jxrlib/jxrgluelib/JXRGlueJxr.c jxrlib-new/jxrgluelib/JXRGlueJxr.c
--- jxrlib/jxrgluelib/JXRGlueJxr.c	2013-03-20 20:01:13.000000000 +0100
+++ jxrlib-new/jxrgluelib/JXRGlueJxr.c	2015-09-03 10:30:31.021971818 +0200
@@ -28,6 +28,7 @@
 //*@@@---@@@@******************************************************************
 #include <limits.h>
 #include <JXRGlue.h>
+#include <wchar.h>
 
 
 static const char szHDPhotoFormat[] = "<dc:format>image/vnd.ms-photo</dc:format>";
diff -rupN jxrlib/jxrgluelib/JXRMeta.h jxrlib-new/jxrgluelib/JXRMeta.h
--- jxrlib/jxrgluelib/JXRMeta.h	2013-03-20 19:06:24.000000000 +0100
+++ jxrlib-new/jxrgluelib/JXRMeta.h	2015-09-03 10:30:31.021971818 +0200
@@ -34,7 +34,7 @@
 
 #ifndef UNREFERENCED_PARAMETER
 #define UNREFERENCED_PARAMETER(P) { (P) = (P); }
-#endif UNREFERENCED_PARAMETER
+#endif // UNREFERENCED_PARAMETER
 
 //================================================================
 // Container
diff -rupN jxrlib/jxrtestlib/JXRTest.c jxrlib-new/jxrtestlib/JXRTest.c
--- jxrlib/jxrtestlib/JXRTest.c	2013-03-19 20:06:18.000000000 +0100
+++ jxrlib-new/jxrtestlib/JXRTest.c	2015-09-03 10:30:31.022971837 +0200
@@ -198,7 +198,7 @@ ERR PKTestFactory_CreateDecoderFromFile(
     ERR err = WMP_errSuccess;
 
     char *pExt = NULL;
-    PKIID* pIID = NULL;
+    const PKIID* pIID = NULL;
 
     struct WMPStream* pStream = NULL;
     PKImageDecode* pDecoder = NULL;
@@ -214,7 +214,7 @@ ERR PKTestFactory_CreateDecoderFromFile(
     Call(CreateWS_File(&pStream, szFilename, "rb"));
 
     // Create decoder
-    Call(PKTestFactory_CreateCodec(pIID, ppDecoder));
+    Call(PKTestFactory_CreateCodec(pIID, (void**)ppDecoder));
     pDecoder = *ppDecoder;
 
     // attach stream to decoder
@@ -232,7 +232,7 @@ ERR PKCreateTestFactory(PKCodecFactory**
 
     UNREFERENCED_PARAMETER( uVersion );
 
-    Call(PKAlloc(ppCFactory, sizeof(**ppCFactory)));
+    Call(PKAlloc((void**)ppCFactory, sizeof(**ppCFactory)));
     pCFactory = *ppCFactory;
 
     pCFactory->CreateCodec = PKTestFactory_CreateCodec;
@@ -287,7 +287,7 @@ ERR PKTestDecode_Release(
 
     pID->fStreamOwner && pID->pStream->Close(&pID->pStream);
 
-    return PKFree(ppID);
+    return PKFree((void**)ppID);
 }
 
 ERR PKTestDecode_Create(
@@ -296,7 +296,7 @@ ERR PKTestDecode_Create(
     ERR err = WMP_errSuccess;
     PKTestDecode* pID = NULL;
 
-    Call(PKAlloc(ppID, sizeof(**ppID)));
+    Call(PKAlloc((void**)ppID, sizeof(**ppID)));
 
     pID = *ppID;
     pID->Initialize = PKTestDecode_Initialize;
diff -rupN jxrlib/jxrtestlib/JXRTestHdr.c jxrlib-new/jxrtestlib/JXRTestHdr.c
--- jxrlib/jxrtestlib/JXRTestHdr.c	2013-03-20 17:40:08.000000000 +0100
+++ jxrlib-new/jxrtestlib/JXRTestHdr.c	2015-09-03 10:30:31.022971837 +0200
@@ -27,7 +27,7 @@
 //*@@@---@@@@******************************************************************
 #ifndef ANSI
 #define _CRT_SECURE_NO_WARNINGS
-#endif ANSI
+#endif // ANSI
 
 #include <stdlib.h>
 #include <string.h>
diff -rupN jxrlib/jxrtestlib/JXRTestPnm.c jxrlib-new/jxrtestlib/JXRTestPnm.c
--- jxrlib/jxrtestlib/JXRTestPnm.c	2013-03-19 22:43:44.000000000 +0100
+++ jxrlib-new/jxrtestlib/JXRTestPnm.c	2015-09-03 10:30:31.023971856 +0200
@@ -27,7 +27,7 @@
 //*@@@---@@@@******************************************************************
 #ifndef ANSI
 #define _CRT_SECURE_NO_WARNINGS
-#endif ANSI
+#endif // ANSI
 
 #include <stdlib.h>
 
diff -rupN jxrlib/jxrtestlib/JXRTestTif.c jxrlib-new/jxrtestlib/JXRTestTif.c
--- jxrlib/jxrtestlib/JXRTestTif.c	2013-03-19 20:17:12.000000000 +0100
+++ jxrlib-new/jxrtestlib/JXRTestTif.c	2015-09-03 10:30:31.023971856 +0200
@@ -909,8 +909,8 @@ ERR PKImageDecode_Release_TIF(PKTestDeco
 
     PKTestDecode *pID = *ppID;
 
-    Call(WMPFree(&pID->EXT.TIF.uStripOffsets));
-    Call(WMPFree(&pID->EXT.TIF.uStripByteCounts));
+    Call(WMPFree((void**)&pID->EXT.TIF.uStripOffsets));
+    Call(WMPFree((void**)&pID->EXT.TIF.uStripByteCounts));
 
     Call(PKTestDecode_Release(ppID));
 
