diff --git a/control/Makefile.am b/control/Makefile.am
index 56ba948..fc2a2dc 100644
--- a/control/Makefile.am
+++ b/control/Makefile.am
@@ -8,7 +8,8 @@
 	generated.cpp \
 	fan.cpp \
 	main.cpp \
-	manager.cpp
+	manager.cpp \
+	zone.cpp
 
 phosphor_fan_control_LDADD = \
 	$(top_builddir)/libfan.la \
diff --git a/control/zone.cpp b/control/zone.cpp
new file mode 100644
index 0000000..1e50060
--- /dev/null
+++ b/control/zone.cpp
@@ -0,0 +1,51 @@
+/**
+ * Copyright © 2017 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "zone.hpp"
+
+namespace phosphor
+{
+namespace fan
+{
+namespace control
+{
+
+
+Zone::Zone(sdbusplus::bus::bus& bus,
+           const ZoneDefinition& def) :
+    _bus(bus),
+    _fullSpeed(std::get<fullSpeedPos>(def)),
+    _zoneNum(std::get<zoneNumPos>(def))
+{
+    auto& fanDefs = std::get<fanListPos>(def);
+
+    for (auto& def : fanDefs)
+    {
+        _fans.emplace_back(std::make_unique<Fan>(bus, def));
+    }
+}
+
+
+void Zone::setSpeed(uint64_t speed)
+{
+    for (auto& fan : _fans)
+    {
+        fan->setSpeed(speed);
+    }
+}
+
+}
+}
+}
diff --git a/control/zone.hpp b/control/zone.hpp
new file mode 100644
index 0000000..985a46d
--- /dev/null
+++ b/control/zone.hpp
@@ -0,0 +1,84 @@
+#pragma once
+#include <vector>
+#include <sdbusplus/bus.hpp>
+#include "fan.hpp"
+#include "types.hpp"
+
+namespace phosphor
+{
+namespace fan
+{
+namespace control
+{
+
+/**
+ * @class Represents a fan control zone, which is a group of fans
+ * that behave the same.
+ */
+class Zone
+{
+    public:
+
+        Zone() = delete;
+        Zone(const Zone&) = delete;
+        Zone(Zone&&) = default;
+        Zone& operator=(const Zone&) = delete;
+        Zone& operator=(Zone&&) = delete;
+        ~Zone() = default;
+
+        /**
+         * Constructor
+         * Creates the appropriate fan objects based on
+         * the zone definition data passed in.
+         *
+         * @param[in] bus - the dbus object
+         * @param[in] def - the fan zone definition data
+         */
+        Zone(sdbusplus::bus::bus& bus,
+             const ZoneDefinition& def);
+
+        /**
+         * Sets all fans in the zone to the speed
+         * passed in
+         *
+         * @param[in] speed - the fan speed
+         */
+        void setSpeed(uint64_t speed);
+
+        /**
+         * Sets the zone to full speed
+         */
+        inline void setFullSpeed()
+        {
+            if (_fullSpeed != 0)
+            {
+                setSpeed(_fullSpeed);
+            }
+        }
+
+    private:
+
+        /**
+         * The dbus object
+         */
+        sdbusplus::bus::bus& _bus;
+
+        /**
+         * Full speed for the zone
+         */
+        const uint64_t _fullSpeed;
+
+        /**
+         * The zone number
+         */
+        const size_t _zoneNum;
+
+        /**
+         * The vector of fans in this zone
+         */
+        std::vector<std::unique_ptr<Fan>> _fans;
+};
+
+}
+}
+}
