diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index f3403c35b2422e66b2797294a8276fbbc2d79468..f8e8c2dce3b8c95a5506c271a22db5a4b8997e51 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -134,6 +134,7 @@ public class Controller implements IFloodlightProviderService, IStorageSourceLis
      * based on parameters that are only available in init()
      */
     private static RoleManager roleManager;
+    protected static boolean shutdownOnTransitionToStandby = false;
 
     /* Storage table names */
     protected static final String CONTROLLER_TABLE_NAME = "controller_controller";
@@ -620,10 +621,21 @@ public class Controller implements IFloodlightProviderService, IStorageSourceLis
         }        
         log.info("ControllerId set to {}", this.controllerId);
         
+        String shutdown = configParams.get("shutdownOnTransitionToStandby");
+        if (!Strings.isNullOrEmpty(shutdown)) {
+            try {
+                shutdownOnTransitionToStandby = Boolean.parseBoolean(shutdown.trim());
+            } catch (Exception e) {
+                log.error("Could not parse 'shutdownOnTransitionToStandby' of {}. Using default setting of {}", 
+                        shutdown, shutdownOnTransitionToStandby);
+            }
+        }        
+        log.info("Shutdown when controller transitions to STANDBY HA role: {}", shutdownOnTransitionToStandby);
+        
         String decodeEth = configParams.get("deserializeEthPacketIns");
         if (!Strings.isNullOrEmpty(decodeEth)) {
         	try {
-        		alwaysDecodeEth = Boolean.parseBoolean(decodeEth);
+        		alwaysDecodeEth = Boolean.parseBoolean(decodeEth.trim());
         	} catch (Exception e) {
         		log.error("Could not parse 'deserializeEthPacketIns' of {}. Using default setting of {}", decodeEth, alwaysDecodeEth);
         	}
diff --git a/src/main/java/net/floodlightcontroller/core/internal/RoleManager.java b/src/main/java/net/floodlightcontroller/core/internal/RoleManager.java
index de73d0cf3292edb0f834d58917ee1850943def8a..0e088d01f73c08418c321532c99ab575228b39aa 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/RoleManager.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/RoleManager.java
@@ -219,7 +219,7 @@ public class RoleManager {
 
            controller.setNotifiedRole(newRole);
 
-           if(newRole == HARole.STANDBY) {
+           if (newRole == HARole.STANDBY && Controller.shutdownOnTransitionToStandby) {
                String reason = String.format("Received role request to "
                        + "transition from ACTIVE to STANDBY (reason: %s)",
                        getRoleInfo().getRoleChangeDescription());
diff --git a/src/main/java/net/floodlightcontroller/core/web/ControllerRoleResource.java b/src/main/java/net/floodlightcontroller/core/web/ControllerRoleResource.java
index 69c3723ae1e7dbde817c29991849cb9b6cd57115..cf7eed54b33f3c6b9673f8e9f1a0ef1ce02c48b2 100644
--- a/src/main/java/net/floodlightcontroller/core/web/ControllerRoleResource.java
+++ b/src/main/java/net/floodlightcontroller/core/web/ControllerRoleResource.java
@@ -16,11 +16,13 @@
 
 package net.floodlightcontroller.core.web;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.restlet.resource.ServerResource;
 
+import net.floodlightcontroller.core.HARole;
 import net.floodlightcontroller.core.IFloodlightProviderService;
 import net.floodlightcontroller.core.RoleInfo;
 
@@ -30,17 +32,16 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
 import com.fasterxml.jackson.databind.MappingJsonFactory;
 
 public class ControllerRoleResource extends ServerResource {
 
     protected static Logger log = LoggerFactory.getLogger(ControllerRoleResource.class);
     
-    private static final String STR_ACTIVE = "ACTIVE";
-    private static final String STR_STANDBY = "STANDBY";
     private static final String STR_ROLE = "role";
-    private static final String STR_ROLE_CHANGE_DESC = "role-change-description";
-    private static final String STR_ROLE_CHANGE_DATE_TIME = "role-change-date-time";
+    private static final String STR_ROLE_CHANGE_DESC = "role_change_description";
+    private static final String STR_ROLE_CHANGE_DATE_TIME = "role_change_date_time";
 
     @Get("json")
     public Map<String, String> getRole() {
@@ -68,12 +69,9 @@ public class ControllerRoleResource extends ServerResource {
 		String role = null;
 		String roleChangeDesc = null;
 		
-		retValue.put("TBD", "Not yet implemented");
-		return retValue;
-		/*
 		try {
 			try {
-				jp = f.createJsonParser(json);
+				jp = f.createParser(json);
 			} catch (IOException e) {
 				e.printStackTrace();
 			}
@@ -106,16 +104,14 @@ public class ControllerRoleResource extends ServerResource {
 			}
 		} catch (IOException e) {
 			e.printStackTrace();
-			retValue.put("ERROR", "Caught IOException while parsing JSON POST request in role request.");
+			retValue.put("ERROR", "Caught exception while parsing controller role request. Supported roles: ACTIVE, STANDBY (or MASTER, SLAVE)");
 		}
     
         HARole harole = null;
         try {
-        	harole = HARole.valueOfBackwardsCompatible(role);
+        	harole = HARole.valueOfBackwardsCompatible(role.toUpperCase().trim());
         } catch (IllegalArgumentException | NullPointerException e) {
-            // The role value in the REST call didn't match a valid
-            // role name, so just leave the role as null and handle
-            // the error below.
+            retValue.put("ERROR", "Caught exception while parsing controller role request. Supported roles: ACTIVE, STANDBY (or MASTER, SLAVE)");
         }
 
         if (roleChangeDesc == null) {
@@ -129,6 +125,6 @@ public class ControllerRoleResource extends ServerResource {
         retValue.put(STR_ROLE_CHANGE_DESC, ri.getRoleChangeDescription());
         retValue.put(STR_ROLE_CHANGE_DATE_TIME, ri.getRoleChangeDateTime().toString());
         
-		return retValue;*/
+		return retValue;
     }
 }
diff --git a/src/main/resources/floodlightdefault.properties b/src/main/resources/floodlightdefault.properties
index 51ab0d18f243c5d874b91600d53ef44164357123..31a9dead47b56ad42126176ed60a316c06233cfc 100644
--- a/src/main/resources/floodlightdefault.properties
+++ b/src/main/resources/floodlightdefault.properties
@@ -37,6 +37,7 @@ net.floodlightcontroller.core.internal.FloodlightProvider.role=ACTIVE
 net.floodlightcontroller.core.internal.FloodlightProvider.controllerId=1
 net.floodlightcontroller.linkdiscovery.internal.LinkDiscoveryManager.latency-history-size=10
 net.floodlightcontroller.linkdiscovery.internal.LinkDiscoveryManager.latency-update-threshold=0.5
+net.floodlightcontroller.core.internal.FloodlightProvider.shutdownOnTransitionToStandby=true
 net.floodlightcontroller.core.internal.OFSwitchManager.openFlowPort=6653
 net.floodlightcontroller.core.internal.OFSwitchManager.openFlowAddresses=0.0.0.0
 net.floodlightcontroller.core.internal.OFSwitchManager.workerThreads=16