diff --git a/source/common/cmemory.c b/source/common/cmemory.c
index cd3ccac..42885f2 100644
--- a/source/common/cmemory.c
+++ b/source/common/cmemory.c
@@ -1,7 +1,7 @@
 /*
 ******************************************************************************
 *
-*   Copyright (C) 2002-2012, International Business Machines
+*   Copyright (C) 2002-2015, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 ******************************************************************************
@@ -33,10 +33,6 @@ static UMemAllocFn    *pAlloc;
 static UMemReallocFn  *pRealloc;
 static UMemFreeFn     *pFree;
 
-/* Flag indicating whether any heap allocations have happened.
- *   Used to prevent changing out the heap functions after allocations have been made */
-static UBool   gHeapInUse;
-
 #if U_DEBUG && defined(UPRV_MALLOC_COUNT)
 #include <stdio.h>
 static int n=0;
@@ -78,7 +74,6 @@ uprv_malloc(size_t s) {
 #endif
 #endif
     if (s > 0) {
-        gHeapInUse = TRUE;
         if (pAlloc) {
             return (*pAlloc)(pContext, s);
         } else {
@@ -105,7 +100,6 @@ uprv_realloc(void * buffer, size_t size) {
         }
         return (void *)zeroMem;
     } else {
-        gHeapInUse = TRUE;
         if (pRealloc) {
             return (*pRealloc)(pContext, buffer, size);
         } else {
@@ -150,10 +144,6 @@ u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMem
         *status = U_ILLEGAL_ARGUMENT_ERROR;
         return;
     }
-    if (gHeapInUse) {
-        *status = U_INVALID_STATE_ERROR;
-        return;
-    }
     pContext  = context;
     pAlloc    = a;
     pRealloc  = r;
@@ -166,18 +156,5 @@ U_CFUNC UBool cmemory_cleanup(void) {
     pAlloc     = NULL;
     pRealloc   = NULL;
     pFree      = NULL;
-    gHeapInUse = FALSE;
     return TRUE;
 }
-
-
-/*
- *   gHeapInUse
- *       Return True if ICU has allocated any memory.
- *       Used by u_SetMutexFunctions() and similar to verify that ICU has not
- *               been used, that it is in a pristine initial state.
- */
-U_CFUNC UBool cmemory_inUse() {
-    return gHeapInUse;
-}
-
diff --git a/source/common/cmemory.h b/source/common/cmemory.h
index ed29b63..d182b5a 100644
--- a/source/common/cmemory.h
+++ b/source/common/cmemory.h
@@ -1,7 +1,7 @@
 /*
 ******************************************************************************
 *
-*   Copyright (C) 1997-2014, International Business Machines
+*   Copyright (C) 1997-2015, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 ******************************************************************************
@@ -116,13 +116,6 @@ typedef union {
 #define U_ALIGNMENT_OFFSET_UP(ptr) (sizeof(UAlignedMemory) - U_ALIGNMENT_OFFSET(ptr))
 
 /**
-  *  Indicate whether the ICU allocation functions have been used.
-  *  This is used to determine whether ICU is in an initial, unused state.
-  */
-U_CFUNC UBool 
-cmemory_inUse(void);
-
-/**
   *  Heap clean up function, called from u_cleanup()
   *    Clears any user heap functions from u_setMemoryFunctions()
   *    Does NOT deallocate any remaining allocated memory.
diff --git a/source/common/icuplug.cpp b/source/common/icuplug.cpp
index 135eb92..2764ea5 100644
--- a/source/common/icuplug.cpp
+++ b/source/common/icuplug.cpp
@@ -1,7 +1,7 @@
 /*
 ******************************************************************************
 *
-*   Copyright (C) 2009-2014, International Business Machines
+*   Copyright (C) 2009-2015, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 ******************************************************************************
@@ -618,12 +618,10 @@ uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *conf
 
 #endif
 
+static UPlugLevel gCurrentLevel = UPLUG_LEVEL_LOW;
+
 U_CAPI UPlugLevel U_EXPORT2 uplug_getCurrentLevel() {
-  if(cmemory_inUse()) {
-    return UPLUG_LEVEL_HIGH;
-  } else {
-    return UPLUG_LEVEL_LOW;
-  }
+  return gCurrentLevel;
 }
 
 static UBool U_CALLCONV uplug_cleanup(void)
@@ -639,6 +637,7 @@ static UBool U_CALLCONV uplug_cleanup(void)
     uplug_doUnloadPlug(pluginToRemove, &subStatus);
   }
   /* close other held libs? */
+  gCurrentLevel = UPLUG_LEVEL_LOW;
   return TRUE;
 }
 
@@ -710,6 +709,8 @@ uplug_getPluginFile() {
 }
 
 
+//  uplug_init()  is called first thing from u_init().
+
 U_CAPI void U_EXPORT2
 uplug_init(UErrorCode *status) {
 #if !U_ENABLE_DYLOAD
@@ -866,5 +867,6 @@ uplug_init(UErrorCode *status) {
   }
   uplug_loadWaitingPlugs(status);
 #endif /* U_ENABLE_DYLOAD */
+  gCurrentLevel = UPLUG_LEVEL_HIGH;
   ucln_registerCleanup(UCLN_UPLUG, uplug_cleanup);
 }
diff --git a/source/test/cintltst/hpmufn.c b/source/test/cintltst/hpmufn.c
index a0e2aa1..edb7a98 100644
--- a/source/test/cintltst/hpmufn.c
+++ b/source/test/cintltst/hpmufn.c
@@ -1,6 +1,6 @@
 /********************************************************************
  * COPYRIGHT: 
- * Copyright (c) 2003-2013, International Business Machines Corporation and
+ * Copyright (c) 2003-2015, International Business Machines Corporation and
  * others. All Rights Reserved.
  ********************************************************************/
 /*
@@ -129,10 +129,6 @@ static void TestHeapFunctions() {
      *  probably because some earlier test accidently left something open. */
     ctest_resetICU();
 
-    /* Can not set memory functions if ICU is already initialized */
-    u_setMemoryFunctions(&gContext, myMemAlloc, myMemRealloc, myMemFree, &status);
-    TEST_STATUS(status, U_INVALID_STATE_ERROR);
-
     /* Un-initialize ICU */
     u_cleanup();
 
@@ -155,13 +151,11 @@ static void TestHeapFunctions() {
     TEST_STATUS(status, U_ZERO_ERROR);
 
 
-    /* After reinitializing ICU, we should not be able to set the memory funcs again. */
+    /* After reinitializing ICU, we can not set the memory funcs again. */
     status = U_ZERO_ERROR;
     u_setDataDirectory(icuDataDir);
     u_init(&status);
     TEST_STATUS(status, U_ZERO_ERROR);
-    u_setMemoryFunctions(NULL, myMemAlloc, myMemRealloc, myMemFree, &status);
-    TEST_STATUS(status, U_INVALID_STATE_ERROR);
 
     /* Doing ICU operations should cause allocations to come through our test heap */
     gBlockCount = 0;
