diff --git a/src/propertywatch.cpp b/src/propertywatch.cpp
new file mode 100644
index 0000000..defde78
--- /dev/null
+++ b/src/propertywatch.cpp
@@ -0,0 +1,49 @@
+/**
+ * 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 "propertywatchimpl.hpp"
+
+namespace phosphor
+{
+namespace dbus
+{
+namespace monitoring
+{
+
+/** @brief convert index.
+ *
+ *  An optimal start implementation requires objects organized in the
+ *  same structure as the mapper response.  The convert method reorganizes
+ *  the flat structure of the index to match.
+ *
+ *  @param[in] index - The index to be converted.
+ */
+MappedPropertyIndex convert(const PropertyIndex& index)
+{
+    MappedPropertyIndex m;
+
+    for (const auto& i : index)
+    {
+        const auto& path = std::get<0>(i.first);
+        const auto& interface = std::get<1>(i.first);
+        const auto& property = std::get<2>(i.first);
+        m[path][interface].push_back(property);
+    }
+
+    return m;
+}
+} // namespace monitoring
+} // namespace dbus
+} // namespace phosphor
