* Current state of this XACML PDP.
  */
 public class XacmlState {
+    // The logger for this class
     private static final Logger LOGGER = LoggerFactory.getLogger(XacmlState.class);
 
     /**
 
         PdpStatus status2 = makeResponse(message, "");
 
+        // start/stop rest controller based on state change
+        handleXacmlRestController();
+
         // these fields aren't needed in the response, so clear them out to avoid sending
         status2.setPolicies(null);
 
         status2.setResponse(resp);
         return status2;
     }
+
+    /**
+     * Manages the Xacml-Pdp rest controller based on the Xacml-Pdp State.
+     * Current supported states:
+     * ACTIVE  - rest service is running and handling requests
+     * PASSIVE - rest service is not running
+     */
+    private void handleXacmlRestController() {
+        if (status.getState() == PdpState.ACTIVE) {
+            LOGGER.info("State change: {} - Starting rest controller", status.getState());
+            XacmlPdpActivator.getCurrent().startXacmlRestController();
+        } else if (status.getState() == PdpState.PASSIVE) {
+            LOGGER.info("State change: {} - Stopping rest controller", status.getState());
+            XacmlPdpActivator.getCurrent().stopXacmlRestController();
+        } else {
+            // unsupported state
+            LOGGER.warn("Unsupported state: {}", status.getState());
+        }
+    }
 }
 
         addAction("Terminate PDP",
             () -> { },
             () -> sendTerminateMessage(sinkClient, state));
-
         // initial heart beats act as registration messages
         addAction("Heartbeat Publisher",
             heartbeat::start,
             heartbeat::terminate);
 
-        addAction("REST Server",
-            restServer::start,
-            restServer::stop);
-
         // @formatter:on
     }
 
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import org.junit.AfterClass;
         req.setState(PdpState.ACTIVE);
         status = state.updateInternalState(req);
         assertEquals(PdpState.ACTIVE, status.getState());
+        verify(act).startXacmlRestController();
 
         req.setState(PdpState.PASSIVE);
         status = state.updateInternalState(req);
         assertEquals(PdpState.PASSIVE, status.getState());
+        verify(act).stopXacmlRestController();
     }
 
     @Test
 
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2019 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
         activator = new XacmlPdpActivator(parGroup);
     }
 
-    /**
-     * Teardown tests.
-     * @throws PolicyXacmlPdpException on termination errors
-     */
-    @After
-    public void teardown() throws PolicyXacmlPdpException {
-        if (activator != null && activator.isAlive()) {
-            activator.stop();
-        }
-    }
-
     @Test
     public void testXacmlPdpActivator() throws Exception {
         assertFalse(activator.isAlive());
         activator.start();
         assertTrue(activator.isAlive());
 
+        // XacmlPdp starts in PASSIVE state so the rest controller should not be alive
+        assertFalse(activator.isXacmlRestControllerAlive());
         assertTrue(activator.getParameterGroup().isValid());
         assertEquals(CommonTestData.PDPX_PARAMETER_GROUP_NAME, activator.getParameterGroup().getName());
         assertEquals(CommonTestData.PDPX_GROUP, activator.getParameterGroup().getPdpGroup());
 
-        activator.stopXacmlRestController();
-        assertFalse(activator.isXacmlRestControllerAlive());
-
         activator.startXacmlRestController();
         assertTrue(activator.isXacmlRestControllerAlive());
+
+        activator.stopXacmlRestController();
+        assertFalse(activator.isXacmlRestControllerAlive());
     }
 
     @Test
         activator.stop();
         assertFalse(activator.isAlive());
     }
+
+    /**
+     * Teardown tests.
+     * @throws PolicyXacmlPdpException on termination errors
+     */
+    @After
+    public void teardown() throws PolicyXacmlPdpException {
+        if (activator != null && activator.isAlive()) {
+            activator.stop();
+        }
+    }
 }