diff --git a/packages/xdc/runtime/Core.xdc b/packages/xdc/runtime/Core.xdc
index 09abf7d..8071365 100644
--- a/packages/xdc/runtime/Core.xdc
+++ b/packages/xdc/runtime/Core.xdc
@@ -49,6 +49,9 @@
 
 internal:
 
+    config String S_CREATE_POLICY_ERROR = "create policy error";
+    config String S_DELETE_POLICY_ERROR = "delete policy error";
+
     struct ObjDesc {
         Ptr             fxnTab;
         Types.Link      *modLink;
diff --git a/packages/xdc/runtime/Log.c b/packages/xdc/runtime/Log.c
index cc36fd5..c7a6182 100644
--- a/packages/xdc/runtime/Log.c
+++ b/packages/xdc/runtime/Log.c
@@ -27,13 +27,13 @@
  * 32-bit format strings
  */
 #if (xdc_target__bitsPerChar * xdc_target__sizeof_Int) == 32
-#define SERIAL "#%010u "
-#define HI "%0.8x:"
-#define LO "%0.8x] "
+static const Char SERIAL[] = "#%010u ";
+static const Char HI[] = "%0.8x:";
+static const Char LO[] = "%0.8x] ";
 #elif (xdc_target__bitsPerChar * xdc_target__sizeof_Long) == 32 
-#define SERIAL "#%010lu "
-#define HI "%0.8lx:"
-#define LO "%0.8lx] "
+static const Char SERIAL[] = "#%010lu ";
+static const Char HI[] =  "%0.8lx:";
+static const Char LO[] = "%0.8lx] ";
 #else
 #error xdc.runtime.Log does not support this target. 
 #endif
@@ -48,6 +48,10 @@
     String fmt;
     Bits32 hi, lo;
 
+    static const Char STR_FMT[] = "{evt: fmt=%p, args=[0x%x, 0x%x ...]}";
+    static const Char STR_PRE[] = "[t=0x";
+    static const Char STR_SEP[] = ": ";
+    
     /* print serial number if there is one; 0 isn't a valid serial number */
     if (er->serial) {
         System_printf(SERIAL, er->serial);
@@ -57,7 +61,7 @@
     hi = er->tstamp.hi;
     lo = er->tstamp.lo;
     if (lo != ~0 && hi != ~0) {
-        System_printf("[t=0x");
+        System_printf(STR_PRE);
         if (hi) {
             System_printf(HI, hi);
         }
@@ -66,7 +70,7 @@
 
     /* print module name */
     Text_putMod((Text_RopeId)Types_getModuleId(er->evt), NULL, -1);
-    System_printf(": ");
+    System_printf(STR_SEP);
     
     /* print event */
     rope = Types_getEventId(er->evt);   /* the event id is the message rope */
@@ -85,7 +89,7 @@
                 er->arg[4], er->arg[5], er->arg[6], er->arg[7]);
         }
         else {
-            System_aprintf("{evt: fmt=%p, args=[0x%x, 0x%x ...]}",
+            System_aprintf(STR_FMT,
                 fmt, er->arg[0], er->arg[1]);
         }
     }
diff --git a/packages/xdc/runtime/Startup.c b/packages/xdc/runtime/Startup.c
index db9b917..ba8ccc1 100644
--- a/packages/xdc/runtime/Startup.c
+++ b/packages/xdc/runtime/Startup.c
@@ -54,6 +54,8 @@
  */
 Void Startup_startMods(Int state[], Int len)
 {
+//    static const Char STR_MSG[] = "xdc.runtime.Startup: 'maxPasses' exceeded";
+
     Int curPass;
     Int i;
     Bool done;
@@ -85,7 +87,7 @@
     }
 
     if (!done) {
-        System_abort("xdc.runtime.Startup: 'maxPasses' exceeded");
+        System_abort(Startup_errorMsg);
     }
 
     module->stateTab = NULL;
diff --git a/packages/xdc/runtime/Startup.xdc b/packages/xdc/runtime/Startup.xdc
index e0eb72b..fbc179b 100644
--- a/packages/xdc/runtime/Startup.xdc
+++ b/packages/xdc/runtime/Startup.xdc
@@ -121,6 +121,12 @@
     config Int maxPasses = 32;
     
     /*!
+     *  ======== errorMsg ========
+     *  Message to print when startup diverges
+     */
+    config String errorMsg = "xdc.runtime.Startup: 'maxPasses' exceeded";
+
+    /*!
      *  ======== InitFxn ========
      *  Type of function assignable to `firstFxns`, `lastFxns`, or `resetFxn`
      */
diff --git a/packages/xdc/runtime/System.c b/packages/xdc/runtime/System.c
index fc8d0e4..25972c5 100644
--- a/packages/xdc/runtime/System.c
+++ b/packages/xdc/runtime/System.c
@@ -31,8 +31,6 @@
  */
 #define OUTMAX      ((32 + 2) / 3) + 5
 
-static const Char digtohex[] = "0123456789abcdef";
-
 /*
  *  ======== System_Module_startup ========
  */
@@ -217,6 +215,8 @@
     Int     res;
     Char    outbuf[OUTMAX];
    
+    static const Char STR_NULL[] = "(null)";
+
     /* vars passed to System_extendFxn. Also keep track in while loop */
     struct System_ParseData parse;
 
@@ -360,7 +360,7 @@
 
                 /* substitute (null) for NULL pointer */
                 if (parse.ptr == (char *)NULL) {
-                    parse.ptr = "(null)";
+                    parse.ptr = (char *)STR_NULL;
                 }
                 parse.len = strlen(parse.ptr);
                 if (parse.precis != -1 && parse.precis < parse.len) {
@@ -420,6 +420,8 @@
  */
 Char *System_formatNum(Char *ptr, UInt32 un, Int zpad, Int base)
 {
+    static const Char STR_HEXDIGS[] = "0123456789abcdef";
+
     Int i = 0;
     Char sign = 0;
 
@@ -440,7 +442,7 @@
 
     /* compute digits in number from right to left */
     do {
-        *(--ptr) = digtohex[(Int) (n % base)];
+        *(--ptr) = STR_HEXDIGS[(Int) (n % base)];
         n = n / base;
         ++i;
     } while (n);
diff --git a/packages/xdc/runtime/Text.c b/packages/xdc/runtime/Text.c
index 9179401..9a0a6d7 100644
--- a/packages/xdc/runtime/Text.c
+++ b/packages/xdc/runtime/Text.c
@@ -97,13 +97,15 @@
  */
 Bool Text_printVisFxn(Ptr obj, String src)
 {
+    static const Char STR_FMT[] = "%.*s";
+
     Text_PrintVisState *state = obj;
 
     if (state->len == 0) {
         return (TRUE);
     }
     else {
-        Int oc = Text_xprintf(state->bufp, "%.*s", state->len, src);
+        Int oc = Text_xprintf(state->bufp, STR_FMT, state->len, src);
         state->res += oc;
         if (state->len > 0) {
             state->len -= oc;
@@ -118,17 +120,20 @@
  */
 Int Text_putLab(Types_Label *lab, Char **bufp, Int len)
 {
+    static const Char STR_FMT1[] = "%p";
+    static const Char STR_FMT2[] = "('%s')";
+
     Int res;
 
     res = Text_putMod(lab->modId, bufp, len);
     if (len < 0 || (len - res) > 8) {  /* need at most 9 characters for "%p" */
-        res += Text_xprintf(bufp, "%p", lab->handle);
+        res += Text_xprintf(bufp, STR_FMT1, lab->handle);
     }
     
     if (lab->named
         && (len < 0 || (len - res) >= (4 + (Int)strlen(lab->iname))) ) {
 
-        res += Text_xprintf(bufp, "('%s')", lab->iname);
+        res += Text_xprintf(bufp, STR_FMT2, lab->iname);
     }
 
     return (res);
@@ -139,14 +144,17 @@
  */
 Int Text_putMod(Types_ModuleId mid, Char **bufp, Int len)
 {
+    static const Char STR_FMT1[] = "{module#%d}";
+    static const Char STR_FMT2[] = "{module-rope:%x}";
+
     Text_PrintVisState state;
 
     if (mid < 0x8000) {
-        return (Text_xprintf(bufp, "{module#%d}", mid));
+        return (Text_xprintf(bufp, STR_FMT1, mid));
     }
 
     if (!Text_isLoaded) {
-        return (Text_xprintf(bufp, "{module-rope:%x}", mid));
+        return (Text_xprintf(bufp, STR_FMT2, mid));
     }
     
     state.bufp = bufp;
@@ -164,6 +172,10 @@
  */
 Int Text_putSite(Types_Site *site, Char **bufp, Int len)
 {
+    static const Char STR_FMT1[] = ": ";
+    static const Char STR_FMT2[] = "\"%s\"";
+    static const Char STR_FMT3[] = "line %d: ";
+
     Int res;
     Int max = len < 0 ? 0x7fff : len;   /* 0x7fff == infinite, well almost */
 
@@ -175,21 +187,21 @@
     max -= (res + 2);     /* +2 for the ": " string below */
 
     if (max > 0) {
-        res += Text_xprintf(bufp, ": ");
+        res += Text_xprintf(bufp, STR_FMT1);
 
         if (site->line == 0) {
             return (res);
         }
     
         if (site->file && (max >= ((Int)strlen(site->file) + 4))) {
-            Int oc = Text_xprintf(bufp, "\"%s\", ", site->file);
+            Int oc = Text_xprintf(bufp, STR_FMT2, site->file);
             res += oc;
             max -= oc;
         }
         
         /* 7 = length of "line : ", 10 = max decimal digits in 32-bit number */
         if (max >= (7 + 10)) {
-            res += Text_xprintf(bufp, "line %d: ", site->line);
+            res += Text_xprintf(bufp, STR_FMT3, site->line);
         }
     }
 
diff --git a/packages/xdc/services/intern/gen/Config.java b/packages/xdc/services/intern/gen/Config.java
index 44f5642..9e78b4f 100644
--- a/packages/xdc/services/intern/gen/Config.java
+++ b/packages/xdc/services/intern/gen/Config.java
@@ -501,10 +501,11 @@
     /*
      *  ======== genError ========
      */
-    private void genError( Unit unit, String msg )
+    private void genError( Unit unit, String kind )
     {
-        glob.out.printf("%t%1_raiseX(NULL, %2Module__id__C, NULL, 0, %1_E_generic, (xdc_IArg)\"%3\", 0);\n",
-                "xdc_runtime_Error", glob.cname, msg);
+        String msgC = "xdc_runtime_Core_S_" + kind + "_POLICY_ERROR__C";
+        glob.out.printf("%t%1_raiseX(NULL, %2Module__id__C, NULL, 0, %1_E_generic, (xdc_IArg)%3, 0);\n",
+                "xdc_runtime_Error", glob.cname, msgC);
     }
 
     /*
@@ -2434,7 +2435,7 @@
             glob.out.printf("%-}\n");
         }
         else {
-            genError(unit, "create policy error");
+            genError(unit, "CREATE");
             glob.out.printf("%treturn NULL;\n");
             glob.out.printf("%-}\n");
         }
@@ -2463,11 +2464,11 @@
         else {
             glob.genTitleD("Object__destruct__S");
             glob.out.printf("xdc_Void %1Object__destruct__S( xdc_Ptr obj ) \n{\n%+", glob.cname);
-            genError(unit, "delete policy error");
+            genError(unit, "DELETE");
             glob.out.printf("%-}\n");
             glob.genTitleD("Object__delete__S");
             glob.out.printf("xdc_Void %1Object__delete__S( xdc_Ptr instp ) \n{\n%+", glob.cname);
-            genError(unit, "delete policy error");
+            genError(unit, "DELETE");
             glob.out.printf("%-}\n");
         }
     }
