diff --git a/source/common/ucnv.c b/source/common/ucnv.c
index 5cf4d15..8d57010 100644
--- a/source/common/ucnv.c
+++ b/source/common/ucnv.c
@@ -1,7 +1,7 @@
 /*
 ******************************************************************************
 *
-*   Copyright (C) 1998-2013, International Business Machines
+*   Copyright (C) 1998-2015, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 ******************************************************************************
@@ -295,12 +295,7 @@ ucnv_safeClone(const UConverter* cnv, void *stackBuffer, int32_t *pBufferSize, U
     }
 
     /* increment refcount of shared data if needed */
-    /*
-    Checking whether it's an algorithic converter is okay
-    in multithreaded applications because the value never changes.
-    Don't check referenceCounter for any other value.
-    */
-    if (cnv->sharedData->referenceCounter != ~0) {
+    if (cnv->sharedData->isReferenceCounted) {
         ucnv_incrementRefCount(cnv->sharedData);
     }
 
@@ -385,12 +380,7 @@ ucnv_close (UConverter * converter)
         uprv_free(converter->subChars);
     }
 
-    /*
-    Checking whether it's an algorithic converter is okay
-    in multithreaded applications because the value never changes.
-    Don't check referenceCounter for any other value.
-    */
-    if (converter->sharedData->referenceCounter != ~0) {
+    if (converter->sharedData->isReferenceCounted) {
         ucnv_unloadSharedDataIfReady(converter->sharedData);
     }
 
diff --git a/source/common/ucnv2022.cpp b/source/common/ucnv2022.cpp
index 7b8df9b..ea165ec 100644
--- a/source/common/ucnv2022.cpp
+++ b/source/common/ucnv2022.cpp
@@ -3813,16 +3813,8 @@ static const UConverterStaticData _ISO2022StaticData={
     0,
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
-const UConverterSharedData _ISO2022Data={
-    sizeof(UConverterSharedData),
-    ~((uint32_t) 0),
-    NULL,
-    NULL,
-    &_ISO2022StaticData,
-    FALSE,
-    &_ISO2022Impl,
-    0, UCNV_MBCS_TABLE_INITIALIZER
-};
+const UConverterSharedData _ISO2022Data=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_ISO2022StaticData, &_ISO2022Impl);
 
 /*************JP****************/
 static const UConverterImpl _ISO2022JPImpl={
@@ -3869,16 +3861,8 @@ static const UConverterStaticData _ISO2022JPStaticData={
 
 namespace {
 
-const UConverterSharedData _ISO2022JPData={
-    sizeof(UConverterSharedData),
-    ~((uint32_t) 0),
-    NULL,
-    NULL,
-    &_ISO2022JPStaticData,
-    FALSE,
-    &_ISO2022JPImpl,
-    0, UCNV_MBCS_TABLE_INITIALIZER
-};
+const UConverterSharedData _ISO2022JPData=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_ISO2022JPStaticData, &_ISO2022JPImpl);
 
 }  // namespace
 
@@ -3928,16 +3912,8 @@ static const UConverterStaticData _ISO2022KRStaticData={
 
 namespace {
 
-const UConverterSharedData _ISO2022KRData={
-    sizeof(UConverterSharedData),
-    ~((uint32_t) 0),
-    NULL,
-    NULL,
-    &_ISO2022KRStaticData,
-    FALSE,
-    &_ISO2022KRImpl,
-    0, UCNV_MBCS_TABLE_INITIALIZER
-};
+const UConverterSharedData _ISO2022KRData=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_ISO2022KRStaticData, &_ISO2022KRImpl);
 
 }  // namespace
 
@@ -3987,16 +3963,8 @@ static const UConverterStaticData _ISO2022CNStaticData={
 
 namespace {
 
-const UConverterSharedData _ISO2022CNData={
-    sizeof(UConverterSharedData),
-    ~((uint32_t) 0),
-    NULL,
-    NULL,
-    &_ISO2022CNStaticData,
-    FALSE,
-    &_ISO2022CNImpl,
-    0, UCNV_MBCS_TABLE_INITIALIZER
-};
+const UConverterSharedData _ISO2022CNData=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_ISO2022CNStaticData, &_ISO2022CNImpl);
 
 }  // namespace
 #endif /* #if !UCONFIG_NO_NON_HTML5_CONVERSION */
diff --git a/source/common/ucnv_bld.cpp b/source/common/ucnv_bld.cpp
index 047f18a..3357a64 100644
--- a/source/common/ucnv_bld.cpp
+++ b/source/common/ucnv_bld.cpp
@@ -285,6 +285,7 @@ ucnv_data_unFlattenClone(UConverterLoadArgs *pArgs, UDataMemory *pData, UErrorCo
 
     if( (uint16_t)type >= UCNV_NUMBER_OF_SUPPORTED_CONVERTER_TYPES ||
         converterData[type] == NULL ||
+        !converterData[type]->isReferenceCounted ||
         converterData[type]->referenceCounter != 1 ||
         source->structSize != sizeof(UConverterStaticData))
     {
@@ -301,26 +302,6 @@ ucnv_data_unFlattenClone(UConverterLoadArgs *pArgs, UDataMemory *pData, UErrorCo
     /* copy initial values from the static structure for this type */
     uprv_memcpy(data, converterData[type], sizeof(UConverterSharedData));
 
-#if 0 /* made UConverterMBCSTable part of UConverterSharedData -- markus 20031107 */
-    /*
-     * It would be much more efficient if the table were a direct member, not a pointer.
-     * However, that would add to the size of all UConverterSharedData objects
-     * even if they do not use this table (especially algorithmic ones).
-     * If this changes, then the static templates from converterData[type]
-     * need more entries.
-     *
-     * In principle, it would be cleaner if the load() function below
-     * allocated the table.
-     */
-    data->table = (UConverterTable *)uprv_malloc(sizeof(UConverterTable));
-    if(data->table == NULL) {
-        uprv_free(data);
-        *status = U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    uprv_memset(data->table, 0, sizeof(UConverterTable));
-#endif
-
     data->staticData = source;
 
     data->sharedDataCached = FALSE;
@@ -331,7 +312,6 @@ ucnv_data_unFlattenClone(UConverterLoadArgs *pArgs, UDataMemory *pData, UErrorCo
     if(data->impl->load != NULL) {
         data->impl->load(data, pArgs, raw + source->structSize, status);
         if(U_FAILURE(*status)) {
-            uprv_free(data->table);
             uprv_free(data);
             return NULL;
         }
@@ -535,25 +515,6 @@ ucnv_deleteSharedConverterData(UConverterSharedData * deadSharedData)
         udata_close(data);
     }
 
-    if(deadSharedData->table != NULL)
-    {
-        uprv_free(deadSharedData->table);
-    }
-
-#if 0
-    /* if the static data is actually owned by the shared data */
-    /* enable if we ever have this situation. */
-    if(deadSharedData->staticDataOwned == TRUE) /* see ucnv_bld.h */
-    {
-        uprv_free((void*)deadSharedData->staticData);
-    }
-#endif
-
-#if 0
-    /* Zap it ! */
-    uprv_memset(deadSharedData->0, sizeof(*deadSharedData));
-#endif
-
     uprv_free(deadSharedData);
 
     UTRACE_EXIT_VALUE((int32_t)TRUE);
@@ -604,7 +565,7 @@ ucnv_load(UConverterLoadArgs *pArgs, UErrorCode *err) {
 
 /**
  * Unload a non-algorithmic converter.
- * It must be sharedData->referenceCounter != ~0
+ * It must be sharedData->isReferenceCounted
  * and this function must be called inside umtx_lock(&cnvCacheMutex).
  */
 U_CAPI void
@@ -623,12 +584,7 @@ ucnv_unload(UConverterSharedData *sharedData) {
 U_CFUNC void
 ucnv_unloadSharedDataIfReady(UConverterSharedData *sharedData)
 {
-    /*
-    Checking whether it's an algorithic converter is okay
-    in multithreaded applications because the value never changes.
-    Don't check referenceCounter for any other value.
-    */
-    if(sharedData != NULL && sharedData->referenceCounter != (uint32_t)~0) {
+    if(sharedData != NULL && sharedData->isReferenceCounted) {
         umtx_lock(&cnvCacheMutex);
         ucnv_unload(sharedData);
         umtx_unlock(&cnvCacheMutex);
@@ -638,12 +594,7 @@ ucnv_unloadSharedDataIfReady(UConverterSharedData *sharedData)
 U_CFUNC void
 ucnv_incrementRefCount(UConverterSharedData *sharedData)
 {
-    /*
-    Checking whether it's an algorithic converter is okay
-    in multithreaded applications because the value never changes.
-    Don't check referenceCounter for any other value.
-    */
-    if(sharedData != NULL && sharedData->referenceCounter != (uint32_t)~0) {
+    if(sharedData != NULL && sharedData->isReferenceCounted) {
         umtx_lock(&cnvCacheMutex);
         sharedData->referenceCounter++;
         umtx_unlock(&cnvCacheMutex);
@@ -933,12 +884,7 @@ ucnv_createAlgorithmicConverter(UConverter *myUConverter,
     }
 
     sharedData = converterData[type];
-    /*
-    Checking whether it's an algorithic converter is okay
-    in multithreaded applications because the value never changes.
-    Don't check referenceCounter for any other value.
-    */
-    if(sharedData == NULL || sharedData->referenceCounter != (uint32_t)~0) {
+    if(sharedData == NULL || sharedData->isReferenceCounted) {
         /* not a valid type, or not an algorithmic converter */
         *err = U_ILLEGAL_ARGUMENT_ERROR;
         UTRACE_EXIT_STATUS(U_ILLEGAL_ARGUMENT_ERROR);
diff --git a/source/common/ucnv_bld.h b/source/common/ucnv_bld.h
index ce6f374..2fbba14 100644
--- a/source/common/ucnv_bld.h
+++ b/source/common/ucnv_bld.h
@@ -1,6 +1,6 @@
 /*
 **********************************************************************
-*   Copyright (C) 1999-2011 International Business Machines
+*   Copyright (C) 1999-2015 International Business Machines
 *   Corporation and others.  All Rights Reserved.
 **********************************************************************
 *
@@ -93,15 +93,15 @@ typedef struct UConverterStaticData {   /* +offset: size */
  */
 struct UConverterSharedData {
     uint32_t structSize;            /* Size of this structure */
-    uint32_t referenceCounter;      /* used to count number of clients, 0xffffffff for static SharedData */
+    uint32_t referenceCounter;      /* used to count number of clients, unused for static/immutable SharedData */
 
     const void *dataMemory;         /* from udata_openChoice() - for cleanup */
-    void *table;                    /* Unused. This used to be a UConverterTable - Pointer to conversion data - see mbcs below */
 
     const UConverterStaticData *staticData; /* pointer to the static (non changing) data. */
 
     UBool                sharedDataCached;   /* TRUE:  shared data is in cache, don't destroy on ucnv_close() if 0 ref.  FALSE: shared data isn't in the cache, do attempt to clean it up if the ref is 0 */
-  /*UBool               staticDataOwned;   TRUE if static data owned by shared data & should be freed with it, NEVER true for udata() loaded statics. This ignored variable was removed to make space for sharedDataCached.   */
+    /** If FALSE, then referenceCounter is not used. Must not change after initialization. */
+    UBool isReferenceCounted;
 
     const UConverterImpl *impl;     /* vtable-style struct of mostly function pointers */
 
@@ -115,16 +115,21 @@ struct UConverterSharedData {
      *   which always has a UConverterMBCSTable
      *
      * To eliminate one allocation, I am making the UConverterMBCSTable
-     * a member of the shared data. It is the last member so that static
-     * definitions of UConverterSharedData work as before.
-     * The table field above also remains to avoid updating all static
-     * definitions, but is now unused.
+     * a member of the shared data.
      *
      * markus 2003-nov-07
      */
     UConverterMBCSTable mbcs;
 };
 
+/** UConverterSharedData initializer for static, non-reference-counted converters. */
+#define UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(pStaticData, pImpl) \
+    { \
+        sizeof(UConverterSharedData), ~((uint32_t)0), \
+        NULL, pStaticData, FALSE, FALSE, pImpl, \
+        0, UCNV_MBCS_TABLE_INITIALIZER \
+    }
+
 /* Defines a UConverter, the lightweight mutable part the user sees */
 
 struct UConverter {
@@ -266,7 +271,7 @@ ucnv_load(UConverterLoadArgs *pArgs, UErrorCode *err);
 
 /**
  * Unload a non-algorithmic converter.
- * It must be sharedData->referenceCounter != ~0
+ * It must be sharedData->isReferenceCounted
  * and this function must be called inside umtx_lock(&cnvCacheMutex).
  */
 U_CAPI void
diff --git a/source/common/ucnv_ct.c b/source/common/ucnv_ct.c
index e723fa6..51362ed 100644
--- a/source/common/ucnv_ct.c
+++ b/source/common/ucnv_ct.c
@@ -629,15 +629,7 @@ static const UConverterStaticData _CompoundTextStaticData = {
     0,
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
-const UConverterSharedData _CompoundTextData = {
-    sizeof(UConverterSharedData),
-    ~((uint32_t) 0),
-    NULL,
-    NULL,
-    &_CompoundTextStaticData,
-    FALSE,
-    &_CompoundTextImpl,
-    0
-};
+const UConverterSharedData _CompoundTextData =
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_CompoundTextStaticData, &_CompoundTextImpl);
 
 #endif /* #if !UCONFIG_NO_LEGACY_CONVERSION */
diff --git a/source/common/ucnv_lmb.c b/source/common/ucnv_lmb.c
index a4fccee..6196660 100644
--- a/source/common/ucnv_lmb.c
+++ b/source/common/ucnv_lmb.c
@@ -606,11 +606,8 @@ static const UConverterStaticData _LMBCSStaticData##n={\
     0, UCNV_IBM, UCNV_LMBCS_##n, 1, 3,\
     { 0x3f, 0, 0, 0 },1,FALSE,FALSE,0,0,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} \
 };\
-const UConverterSharedData _LMBCSData##n={\
-    sizeof(UConverterSharedData), ~((uint32_t) 0),\
-    NULL, NULL, &_LMBCSStaticData##n, FALSE, &_LMBCSImpl##n, \
-    0 \
-};
+const UConverterSharedData _LMBCSData##n= \
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_LMBCSStaticData##n, &_LMBCSImpl##n);
 
  /* The only function we needed to duplicate 12 times was the 'open'
 function, which will do basically the same thing except set a  different
diff --git a/source/common/ucnv_u16.c b/source/common/ucnv_u16.c
index a2044aa..f4f902a 100644
--- a/source/common/ucnv_u16.c
+++ b/source/common/ucnv_u16.c
@@ -1,6 +1,6 @@
 /*  
 **********************************************************************
-*   Copyright (C) 2002-2010, International Business Machines
+*   Copyright (C) 2002-2015, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 **********************************************************************
 *   file name:  ucnv_u16.c
@@ -635,11 +635,8 @@ static const UConverterStaticData _UTF16BEStaticData={
 };
 
 
-const UConverterSharedData _UTF16BEData={
-    sizeof(UConverterSharedData), ~((uint32_t) 0),
-    NULL, NULL, &_UTF16BEStaticData, FALSE, &_UTF16BEImpl, 
-    0
-};
+const UConverterSharedData _UTF16BEData=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF16BEStaticData, &_UTF16BEImpl);
 
 /* UTF-16LE ----------------------------------------------------------------- */
 
@@ -1235,11 +1232,8 @@ static const UConverterStaticData _UTF16LEStaticData={
 };
 
 
-const UConverterSharedData _UTF16LEData={
-    sizeof(UConverterSharedData), ~((uint32_t) 0),
-    NULL, NULL, &_UTF16LEStaticData, FALSE, &_UTF16LEImpl, 
-    0
-};
+const UConverterSharedData _UTF16LEData=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF16LEStaticData, &_UTF16LEImpl);
 
 /* UTF-16 (Detect BOM) ------------------------------------------------------ */
 
@@ -1511,11 +1505,8 @@ static const UConverterStaticData _UTF16StaticData = {
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
 
-const UConverterSharedData _UTF16Data = {
-    sizeof(UConverterSharedData), ~((uint32_t) 0),
-    NULL, NULL, &_UTF16StaticData, FALSE, &_UTF16Impl, 
-    0
-};
+const UConverterSharedData _UTF16Data =
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF16StaticData, &_UTF16Impl);
 
 static const UConverterImpl _UTF16v2Impl = {
     UCNV_UTF16,
@@ -1552,10 +1543,7 @@ static const UConverterStaticData _UTF16v2StaticData = {
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
 
-static const UConverterSharedData _UTF16v2Data = {
-    sizeof(UConverterSharedData), ~((uint32_t) 0),
-    NULL, NULL, &_UTF16v2StaticData, FALSE, &_UTF16v2Impl, 
-    0
-};
+static const UConverterSharedData _UTF16v2Data =
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF16v2StaticData, &_UTF16v2Impl);
 
 #endif
diff --git a/source/common/ucnv_u32.c b/source/common/ucnv_u32.c
index c24aaee..49d6746 100644
--- a/source/common/ucnv_u32.c
+++ b/source/common/ucnv_u32.c
@@ -495,11 +495,8 @@ static const UConverterStaticData _UTF32BEStaticData = {
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
 
-const UConverterSharedData _UTF32BEData = {
-    sizeof(UConverterSharedData), ~((uint32_t) 0),
-    NULL, NULL, &_UTF32BEStaticData, FALSE, &_UTF32BEImpl, 
-    0
-};
+const UConverterSharedData _UTF32BEData =
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF32BEStaticData, &_UTF32BEImpl);
 
 /* UTF-32LE ---------------------------------------------------------- */
 
@@ -991,11 +988,8 @@ static const UConverterStaticData _UTF32LEStaticData = {
 };
 
 
-const UConverterSharedData _UTF32LEData = {
-    sizeof(UConverterSharedData), ~((uint32_t) 0),
-    NULL, NULL, &_UTF32LEStaticData, FALSE, &_UTF32LEImpl, 
-    0
-};
+const UConverterSharedData _UTF32LEData =
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF32LEStaticData, &_UTF32LEImpl);
 
 /* UTF-32 (Detect BOM) ------------------------------------------------------ */
 
@@ -1240,10 +1234,7 @@ static const UConverterStaticData _UTF32StaticData = {
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
 
-const UConverterSharedData _UTF32Data = {
-    sizeof(UConverterSharedData), ~((uint32_t) 0),
-    NULL, NULL, &_UTF32StaticData, FALSE, &_UTF32Impl, 
-    0
-};
+const UConverterSharedData _UTF32Data = 
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF32StaticData, &_UTF32Impl);
 
 #endif
diff --git a/source/common/ucnv_u7.c b/source/common/ucnv_u7.c
index 6466b87..80bb209 100644
--- a/source/common/ucnv_u7.c
+++ b/source/common/ucnv_u7.c
@@ -775,11 +775,8 @@ static const UConverterStaticData _UTF7StaticData={
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
 
-const UConverterSharedData _UTF7Data={
-    sizeof(UConverterSharedData), ~((uint32_t)0),
-    NULL, NULL, &_UTF7StaticData, FALSE, &_UTF7Impl,
-    0
-};
+const UConverterSharedData _UTF7Data=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF7StaticData, &_UTF7Impl);
 
 /* IMAP mailbox name encoding ----------------------------------------------- */
 
@@ -1475,10 +1472,7 @@ static const UConverterStaticData _IMAPStaticData={
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
 
-const UConverterSharedData _IMAPData={
-    sizeof(UConverterSharedData), ~((uint32_t)0),
-    NULL, NULL, &_IMAPStaticData, FALSE, &_IMAPImpl,
-    0
-};
+const UConverterSharedData _IMAPData=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_IMAPStaticData, &_IMAPImpl);
 
 #endif
diff --git a/source/common/ucnv_u8.c b/source/common/ucnv_u8.c
index 24205f5..15dfbd0 100644
--- a/source/common/ucnv_u8.c
+++ b/source/common/ucnv_u8.c
@@ -1043,11 +1043,8 @@ static const UConverterStaticData _UTF8StaticData={
 };
 
 
-const UConverterSharedData _UTF8Data={
-    sizeof(UConverterSharedData), ~((uint32_t) 0),
-    NULL, NULL, &_UTF8StaticData, FALSE, &_UTF8Impl,
-    0
-};
+const UConverterSharedData _UTF8Data=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_UTF8StaticData, &_UTF8Impl);
 
 /* CESU-8 converter data ---------------------------------------------------- */
 
@@ -1086,10 +1083,7 @@ static const UConverterStaticData _CESU8StaticData={
 };
 
 
-const UConverterSharedData _CESU8Data={
-    sizeof(UConverterSharedData), ~((uint32_t) 0),
-    NULL, NULL, &_CESU8StaticData, FALSE, &_CESU8Impl,
-    0
-};
+const UConverterSharedData _CESU8Data=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_CESU8StaticData, &_CESU8Impl);
 
 #endif
diff --git a/source/common/ucnvbocu.cpp b/source/common/ucnvbocu.cpp
index 281d6d9..a995207 100644
--- a/source/common/ucnvbocu.cpp
+++ b/source/common/ucnvbocu.cpp
@@ -1392,11 +1392,7 @@ static const UConverterStaticData _Bocu1StaticData={
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
 
-const UConverterSharedData _Bocu1Data={
-    sizeof(UConverterSharedData), ~((uint32_t)0),
-    NULL, NULL, &_Bocu1StaticData, FALSE, &_Bocu1Impl,
-    0,
-    UCNV_MBCS_TABLE_INITIALIZER
-};
+const UConverterSharedData _Bocu1Data=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_Bocu1StaticData, &_Bocu1Impl);
 
 #endif
diff --git a/source/common/ucnvhz.c b/source/common/ucnvhz.c
index 51825e2..84df1a8 100644
--- a/source/common/ucnvhz.c
+++ b/source/common/ucnvhz.c
@@ -622,17 +622,8 @@ static const UConverterStaticData _HZStaticData={
         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, /* reserved */
 
 };
-            
-            
-const UConverterSharedData _HZData={
-    sizeof(UConverterSharedData),
-        ~((uint32_t) 0),
-        NULL, 
-        NULL, 
-        &_HZStaticData, 
-        FALSE, 
-        &_HZImpl, 
-        0
-};
+
+const UConverterSharedData _HZData=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_HZStaticData, &_HZImpl);
 
 #endif /* #if !UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION && !UCONFIG_NO_NON_HTML5_CONVERSION */
diff --git a/source/common/ucnvisci.c b/source/common/ucnvisci.c
index 16fd0a3..70b6477 100644
--- a/source/common/ucnvisci.c
+++ b/source/common/ucnvisci.c
@@ -1617,15 +1617,7 @@ static const UConverterStaticData _ISCIIStaticData={
 
 };
 
-const UConverterSharedData _ISCIIData={
-    sizeof(UConverterSharedData),
-        ~((uint32_t) 0),
-        NULL,
-        NULL,
-        &_ISCIIStaticData,
-        FALSE,
-        &_ISCIIImpl,
-        0
-};
+const UConverterSharedData _ISCIIData=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_ISCIIStaticData, &_ISCIIImpl);
 
 #endif /* #if !UCONFIG_NO_LEGACY_CONVERSION */
diff --git a/source/common/ucnvlat1.c b/source/common/ucnvlat1.c
index 202f8aa..95e0495 100644
--- a/source/common/ucnvlat1.c
+++ b/source/common/ucnvlat1.c
@@ -1,6 +1,6 @@
 /* 
 **********************************************************************
-*   Copyright (C) 2000-2012, International Business Machines
+*   Copyright (C) 2000-2015, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 **********************************************************************
 *   file name:  ucnvlat1.cpp
@@ -458,11 +458,8 @@ static const UConverterStaticData _Latin1StaticData={
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
 
-const UConverterSharedData _Latin1Data={
-    sizeof(UConverterSharedData), ~((uint32_t) 0),
-    NULL, NULL, &_Latin1StaticData, FALSE, &_Latin1Impl, 
-    0
-};
+const UConverterSharedData _Latin1Data=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_Latin1StaticData, &_Latin1Impl);
 
 /* US-ASCII ----------------------------------------------------------------- */
 
@@ -735,10 +732,7 @@ static const UConverterStaticData _ASCIIStaticData={
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
 
-const UConverterSharedData _ASCIIData={
-    sizeof(UConverterSharedData), ~((uint32_t) 0),
-    NULL, NULL, &_ASCIIStaticData, FALSE, &_ASCIIImpl, 
-    0
-};
+const UConverterSharedData _ASCIIData=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_ASCIIStaticData, &_ASCIIImpl);
 
 #endif
diff --git a/source/common/ucnvmbcs.cpp b/source/common/ucnvmbcs.cpp
index f03f8a8..4e4de8d 100644
--- a/source/common/ucnvmbcs.cpp
+++ b/source/common/ucnvmbcs.cpp
@@ -1,7 +1,7 @@
 /*
 ******************************************************************************
 *
-*   Copyright (C) 2000-2014, International Business Machines
+*   Copyright (C) 2000-2015, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 ******************************************************************************
@@ -510,7 +510,7 @@ static const UConverterImpl _MBCSImpl={
 
 const UConverterSharedData _MBCSData={
     sizeof(UConverterSharedData), 1,
-    NULL, NULL, NULL, FALSE, &_MBCSImpl, 
+    NULL, NULL, FALSE, TRUE, &_MBCSImpl,
     0, UCNV_MBCS_TABLE_INITIALIZER
 };
 
diff --git a/source/common/ucnvscsu.c b/source/common/ucnvscsu.c
index a6f8c9e..5b4787f 100644
--- a/source/common/ucnvscsu.c
+++ b/source/common/ucnvscsu.c
@@ -2009,10 +2009,7 @@ static const UConverterStaticData _SCSUStaticData={
     { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved */
 };
 
-const UConverterSharedData _SCSUData={
-    sizeof(UConverterSharedData), ~((uint32_t)0),
-    NULL, NULL, &_SCSUStaticData, FALSE, &_SCSUImpl,
-    0
-};
+const UConverterSharedData _SCSUData=
+        UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(&_SCSUStaticData, &_SCSUImpl);
 
 #endif
