diff --git a/control/manager.cpp b/control/manager.cpp
index 5fe0781..9359a6b 100644
--- a/control/manager.cpp
+++ b/control/manager.cpp
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include <algorithm>
 #include "manager.hpp"
 
 namespace phosphor
@@ -25,7 +26,40 @@
 Manager::Manager(sdbusplus::bus::bus& bus) :
     _bus(bus)
 {
-    //TODO
+    //Create the appropriate Zone objects based on the
+    //actual system configuration.
+
+    //Find the 1 ZoneGroup that meets all of its conditions
+    for (auto& group : _zoneLayouts)
+    {
+        auto& conditions = std::get<conditionListPos>(group);
+
+        if (std::all_of(conditions.begin(), conditions.end(),
+                        [](const auto& c)
+                        {
+                            //TODO: openbmc/openbmc#1500
+                            //Still need to actually evaluate the conditions
+                            return true;
+                        }))
+        {
+            //Create a Zone object for each zone in this group
+            auto& zones = std::get<zoneListPos>(group);
+
+            for (auto& z : zones)
+            {
+                _zones.emplace(std::get<zoneNumPos>(z),
+                               std::make_unique<Zone>(_bus, z));
+            }
+
+            break;
+        }
+    }
+
+    //Set to full since we don't know state of system yet.
+    for (auto& z: _zones)
+    {
+        z.second->setFullSpeed();
+    }
 }
 
 
diff --git a/control/manager.hpp b/control/manager.hpp
index 44f445e..7f8baa3 100644
--- a/control/manager.hpp
+++ b/control/manager.hpp
@@ -4,6 +4,7 @@
 #include <vector>
 #include <sdbusplus/bus.hpp>
 #include "types.hpp"
+#include "zone.hpp"
 
 namespace phosphor
 {
@@ -12,6 +13,9 @@
 namespace control
 {
 
+using ZoneMap = std::map<unsigned int,
+                         std::unique_ptr<Zone>>;
+
 /**
  * @class Fan control manager
  */
@@ -43,6 +47,11 @@
         sdbusplus::bus::bus& _bus;
 
         /**
+         * The fan zones in the system
+         */
+        ZoneMap _zones;
+
+        /**
          * The fan zone layout for the system.
          * This is generated data.
          */
