diff --git a/power-supply/average.hpp b/power-supply/average.hpp
new file mode 100644
index 0000000..817f0bf
--- /dev/null
+++ b/power-supply/average.hpp
@@ -0,0 +1,57 @@
+#pragma once
+#include <functional>
+#include <org/open_power/Sensor/Aggregation/History/Average/server.hpp>
+
+namespace witherspoon
+{
+namespace power
+{
+namespace history
+{
+
+template <typename T>
+using ServerObject = typename sdbusplus::server::object::object<T>;
+
+using AverageInterface = sdbusplus::org::open_power::
+        Sensor::Aggregation::History::server::Average;
+
+/**
+ * @class Average
+ *
+ * Implements Sensor.Aggregation.History.Average
+ *
+ * This includes a property that is an array of timestamp/average tuples
+ * and a property to specify the scale.
+ */
+class Average : public ServerObject<AverageInterface>
+{
+    public:
+
+        static constexpr auto name = "average";
+
+        Average() = delete;
+        Average(const Average&) = delete;
+        Average& operator=(const Average&) = delete;
+        Average(Average&&) = delete;
+        Average& operator=(Average&&) = delete;
+        ~Average() = default;
+
+        /**
+         * @brief Constructor
+         *
+         * @param[in] bus - D-Bus object
+         * @param[in] objectPath - the D-Bus object path
+         */
+        Average(sdbusplus::bus::bus& bus,
+                const std::string& objectPath) :
+                ServerObject<AverageInterface>(bus, objectPath.c_str())
+        {
+            unit(Average::Unit::Watts);
+            scale(0);
+        }
+};
+
+
+}
+}
+}
diff --git a/power-supply/maximum.hpp b/power-supply/maximum.hpp
new file mode 100644
index 0000000..e1fbffc
--- /dev/null
+++ b/power-supply/maximum.hpp
@@ -0,0 +1,57 @@
+#pragma once
+#include <functional>
+#include <org/open_power/Sensor/Aggregation/History/Maximum/server.hpp>
+
+namespace witherspoon
+{
+namespace power
+{
+namespace history
+{
+
+template <typename T>
+using ServerObject = typename sdbusplus::server::object::object<T>;
+
+using MaximumInterface = sdbusplus::org::open_power::
+        Sensor::Aggregation::History::server::Maximum;
+
+/**
+ * @class Maximum
+ *
+ * Implements Sensor.Aggregation.History.Maximum
+ *
+ * This includes a property that is an array of timestamp/maximum tuples
+ * and a property to specify the scale.
+ */
+class Maximum : public ServerObject<MaximumInterface>
+{
+    public:
+
+        static constexpr auto name = "maximum";
+
+        Maximum() = delete;
+        Maximum(const Maximum&) = delete;
+        Maximum& operator=(const Maximum&) = delete;
+        Maximum(Maximum&&) = delete;
+        Maximum& operator=(Maximum&&) = delete;
+        ~Maximum() = default;
+
+        /**
+         * @brief Constructor
+         *
+         * @param[in] bus - D-Bus object
+         * @param[in] objectPath - the D-Bus object path
+         */
+        Maximum(sdbusplus::bus::bus& bus,
+                const std::string& objectPath) :
+                ServerObject<MaximumInterface>(bus, objectPath.c_str())
+        {
+            unit(Maximum::Unit::Watts);
+            scale(0);
+        }
+};
+
+
+}
+}
+}
