diff --git a/src/com/goldencode/p2j/main/ClientCore.java b/src/com/goldencode/p2j/main/ClientCore.java
index a221c7c..0aca9c0 100644
--- a/src/com/goldencode/p2j/main/ClientCore.java
+++ b/src/com/goldencode/p2j/main/ClientCore.java
@@ -41,6 +41,8 @@
 **                  Also added a chui/gui flag to the parms so that the server doesn't need to
 **                  call down to the client to figure that out.
 ** 021 CA  20150131 Clean the security caches when client restarts.
+** 022 HC  20151124 Improved loading of boolean environment variables from Progress INI files and
+**                  Windows Registry.
 */
 
 package com.goldencode.p2j.main;
@@ -214,7 +216,7 @@ public class ClientCore
          
          // finish initializing the thin client
          ThinClient.initializePost(config, session, context);
-         
+
          // attempt to emulate the '-ininame' command-line parameter: 
          Directory remoteDir = DirectoryManager.getInstance();
          if (remoteDir != null)
@@ -235,6 +237,8 @@ public class ClientCore
             }
          }
          
+         ThinClient.loadEnvironment(config);
+         
          // After full initialization of the client code we can set up the ErrorWriter for
          // client side.
          if (session != null)
diff --git a/src/com/goldencode/p2j/ui/chui/ThinClient.java b/src/com/goldencode/p2j/ui/chui/ThinClient.java
index 3a9b76d..9ba318f 100644
--- a/src/com/goldencode/p2j/ui/chui/ThinClient.java
+++ b/src/com/goldencode/p2j/ui/chui/ThinClient.java
@@ -2185,6 +2185,8 @@
 **                           More fixes related to working with HIDDEN frame/widgets and resolving  
 **                           the window when nested frames are viewed directly.
 ** 792 CA  20151123          More fixes related to nested frame support.
+**     HC  20151124          Utilized Keep3DFillinBorder environment variable when drawing FILL-
+**                           IN border.
 */
 
 package com.goldencode.p2j.ui.chui;
@@ -2560,6 +2562,9 @@ implements ClientExports,
    
    /** THREE-D value for this session. */
    private boolean is3D;
+   
+   /** The effective value of the keep3DFillinBorder environment variable. */
+   private boolean keep3DFillinBorder;
 
    /**
     * Constructor.
@@ -2794,6 +2799,21 @@ implements ClientExports,
       // initialize the font manager
       FontManager.init(tc.server);
 
+      // initialize the client side widget ID worker
+      WidgetIdHelper.initWorker(new ClientIdHelper());
+   }
+   
+   /**
+    * The method is called when the enviornment ({@see EnvironmentDaemon}) has
+    * been fully initialized.
+    * 
+    * @param    cfg
+    *           A valid bootstrap configuration.
+    */
+   public static void loadEnvironment(BootstrapConfig cfg)
+   {
+      ThinClient tc = getInstance();
+      
       if (!OutputManager.instance().isChui())
       {
          Window<?> defw = WindowManager.getDefaultWindow();
@@ -2839,22 +2859,26 @@ implements ClientExports,
          
          // get the default value for the "use-3d-size" setting - if a custom env exists, that
          // is the value which will be used
+         boolean use3dSize = true;
          String cuse3dSize = cfg.getString("client", "gui", "use-3d-size", null);
-         String suse3dSize = (ed == null ? null : ed.getKeyValue("Startup", "use-3d-size"));
-         boolean use3dSize = (cuse3dSize == null || cuse3dSize.length() == 0 
-                                ? suse3dSize == null || suse3dSize.length() == 0 
-                                   ? true
-                                   : Boolean.parseBoolean(suse3dSize)
-                                : Boolean.parseBoolean(cuse3dSize));
+         if (cuse3dSize != null && !cuse3dSize.isEmpty())
+         {
+            use3dSize = Boolean.parseBoolean(cuse3dSize);
+         }
+         else
+         {
+            use3dSize = ed.getBooleanKeyValue("Startup", "use-3d-size", use3dSize);
+         }
          FontManager.setThreeD(use3dSize);
 
+         // get the value for the "Keep3DFillinBorder" environment variable
+         boolean keep3DFillinBorder = ed.getBooleanKeyValue("Startup", "Keep3DFillinBorder", false);
+         tc.setKeep3DFillinBorder(keep3DFillinBorder);
+         
          // initialize initial tooltip settings
          ToolTip.setSessionTooltips(tc.server.getSessionTooltips());
       }
-
-      // initialize the client side widget ID worker
-      WidgetIdHelper.initWorker(new ClientIdHelper());
-   }
+   }   
 
    /**
     * Clears all content from the terminal.
@@ -18385,6 +18409,27 @@ implements ClientExports,
    }
 
    /**
+    * Get the Keep3DFillinBorder environment value for this client session.
+    * 
+    * @return   See above.
+    */
+   public boolean isKeep3DFillinBorder()
+   {
+      return keep3DFillinBorder;
+   }
+
+   /**
+    * Set the Keep3DFillinBorder environment value for this client session.
+    * 
+    * @param    value
+    *           The value to set.
+    */
+   public void setKeep3DFillinBorder(boolean value)
+   {
+      keep3DFillinBorder = value;
+   }
+   
+   /**
     * Move the widget to the top in z-order
     * 
     * @param id
diff --git a/src/com/goldencode/p2j/ui/client/gui/EntryFieldGuiImpl.java b/src/com/goldencode/p2j/ui/client/gui/EntryFieldGuiImpl.java
index 24e82d7..7684c10 100644
--- a/src/com/goldencode/p2j/ui/client/gui/EntryFieldGuiImpl.java
+++ b/src/com/goldencode/p2j/ui/client/gui/EntryFieldGuiImpl.java
@@ -18,6 +18,7 @@
 **                  GuiDriver: all access to the driver is done exclusively, each thread taking
 **                  and releasing ownership for the duration of the drawing operation or other
 **                  GUI API invocation which requires access to the underlying physical window.
+** 005 HC  20151124 Utilized Keep3DFillinBorder environment variable when drawing FILL-IN border.
 */
 
 package com.goldencode.p2j.ui.client.gui;
@@ -26,7 +27,6 @@ package com.goldencode.p2j.ui.client.gui;
 // AWT/Swing event model itself; no other AWT/Swing usage is occurring in this class
 
 import com.goldencode.p2j.ui.*;
-import com.goldencode.p2j.ui.chui.ThinClient;
 import com.goldencode.p2j.ui.client.*;
 import com.goldencode.p2j.ui.client.event.*;
 import com.goldencode.p2j.ui.client.gui.driver.*;
@@ -251,9 +251,11 @@ extends FillInGuiImpl
     *           The border box color.
     * @param    borderDim
     *           The border box size.
+    * @param    three_d
+    *           Indicates whether 3d or flat border should be drawn. 
     */
    @Override
-   protected void drawBorder(ColorRgb borderColor, NativeDimension borderDim)
+   protected void drawBorder(ColorRgb borderColor, NativeDimension borderDim, boolean three_d)
    {
       // entry field in combo-box has no border
    }
diff --git a/src/com/goldencode/p2j/ui/client/gui/FillInGuiImpl.java b/src/com/goldencode/p2j/ui/client/gui/FillInGuiImpl.java
index dab605b..52f7184 100644
--- a/src/com/goldencode/p2j/ui/client/gui/FillInGuiImpl.java
+++ b/src/com/goldencode/p2j/ui/client/gui/FillInGuiImpl.java
@@ -51,6 +51,7 @@
 **     EVL 20151021 Fix for selection replacement. This covers resolution for tiny input issue
 **                  when selected text replacing incorrectly.
 **     HC  20151112 Implemented THREE-D runtime support.
+** 022 HC  20151124 Utilized Keep3DFillinBorder environment variable when drawing FILL-IN border.
 */
 
 package com.goldencode.p2j.ui.client.gui;
@@ -60,6 +61,7 @@ package com.goldencode.p2j.ui.client.gui;
 import java.awt.event.MouseEvent;
 
 import com.goldencode.p2j.ui.*;
+import com.goldencode.p2j.ui.chui.*;
 import com.goldencode.p2j.ui.client.*;
 import com.goldencode.p2j.ui.client.event.*;
 import com.goldencode.p2j.ui.client.event.listener.*;
@@ -830,9 +832,14 @@ implements AutoResizable<FillInConfig>
             gd.setColor(gcd.bgColor);
             gd.fillRect(0, 0, dim.width, dim.height);
             
-            if (isEnabled())
+            ThinClient tc = ThinClient.getInstance();
+            
+            boolean enabled = isEnabled();
+            boolean threeDBorder = isThreeD() && (tc.isKeep3DFillinBorder() || enabled);
+            
+            if (enabled || threeDBorder)
             {
-               drawBorder(gcd.boxColor, dim);
+               drawBorder(gcd.boxColor, dim, threeDBorder);
             }
 
             if (!uninit)
@@ -1046,10 +1053,12 @@ implements AutoResizable<FillInConfig>
     *           The border box color in the non THREE-D mode.
     * @param    borderDim
     *           The border box size.
+    * @param    three_d
+    *           Indicates whether 3d or flat border should be drawn. 
     */
-   protected void drawBorder(ColorRgb borderColor, NativeDimension borderDim)
+   protected void drawBorder(ColorRgb borderColor, NativeDimension borderDim, boolean three_d)
    {
-      if (isThreeD())
+      if (three_d)
       {
          gd.setColor(gd.getSysColor(SysColor.COLOR_3DSHADOW));
          gd.drawLine(0, 0, 0, borderDim.height - 2);
diff --git a/src/com/goldencode/p2j/util/EnvironmentDaemon.java b/src/com/goldencode/p2j/util/EnvironmentDaemon.java
index f7b8723..c237ecd 100644
--- a/src/com/goldencode/p2j/util/EnvironmentDaemon.java
+++ b/src/com/goldencode/p2j/util/EnvironmentDaemon.java
@@ -2,7 +2,7 @@
 ** Module   : EnvironmentDaemon.java
 ** Abstract : Client side daemon to handle Progress 4GL compatible Winodws environment handling
 **
-** Copyright (c) 2013-2014, Golden Code Development Corporation.
+** Copyright (c) 2013-2015, Golden Code Development Corporation.
 ** ALL RIGHTS RESERVED. Use is subject to license terms.
 **
 **           Golden Code Development Corporation
@@ -16,6 +16,8 @@
 ** 004 MAG 20140908 Added getEnvironmentType APIs. Added return value to load() method.
 **                  Change the unload() implementation. Implements read only environments loading.
 **                  Added setDefaultEnvironment() which override default environment.              
+** 005 HC  20151124 Improved loading of boolean environment variables from Progress INI files and
+**                  Windows Registry.
 */
 
 package com.goldencode.p2j.util;
@@ -235,6 +237,33 @@ implements EnvironmentAccessor
       }
       return "";
    }
+   
+   /**
+    * Getting the boolean key value from the current environment.
+    * 
+    * @param    section
+    *           The name of the section containing the key to get.
+    * @param    key
+    *           The name of the key key to get or default key if not specified.
+    * @param    defValue
+    *           The default value, to be returned when the value does not exist
+    *           in the environment.
+    * 
+    * @return   The boolean key value, <code>defValue</code> if the value
+    *           does not exist in the environment.
+    */
+   public Boolean getBooleanKeyValue(String section, String key, Boolean defValue)
+   {
+      String strValue = getKeyValue(section, key);
+      if (strValue == null)
+      {
+         return defValue;
+      }
+      
+      // the only valid boolean true for Progress INI file is the case insensitive 'yes' 
+      // TODO: is this compatible with the allowed boolean values in Windows registry?
+      return strValue.trim().equalsIgnoreCase("yes"); 
+   }
 
    /**
     * Unloads specifies environment from the current one.
