diff --git a/src/register/prdfRegisterCache.H b/src/register/prdfRegisterCache.H
new file mode 100644
index 0000000..be34884
--- /dev/null
+++ b/src/register/prdfRegisterCache.H
@@ -0,0 +1,124 @@
+/* IBM_PROLOG_BEGIN_TAG                                                   */
+/* This is an automatically generated prolog.                             */
+/*                                                                        */
+/* $Source: src/usr/diag/prdf/common/framework/register/prdfRegisterCache.H $ */
+/*                                                                        */
+/* OpenPOWER HostBoot Project                                             */
+/*                                                                        */
+/* Contributors Listed Below - COPYRIGHT 2012,2017                        */
+/* [+] International Business Machines Corp.                              */
+/*                                                                        */
+/*                                                                        */
+/* 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.                         */
+/*                                                                        */
+/* IBM_PROLOG_END_TAG                                                     */
+
+#ifndef REG_CACHE_H
+#define REG_CACHE_H
+
+/** @file prdfRegisterCache.H */
+
+#include <map>
+#include <iipbits.h>
+#include <prdfGlobal.H>
+#include <prdfScanFacility.H>
+#include <prdfScomRegisterAccess.H>
+#include <prdfTargetFwdRef.H>
+
+class BitString;
+
+namespace PRDF
+{
+/**
+ * @brief Caches the contents of registers used during analysis.
+ *
+ * It maintains the latest content of a register in a map. If contents of the
+ * register remain unchanged, register read returns contents stored in
+ * cache rather than reading from hardware. Hence it brings efficiency in read.
+ * Whenever write to actual hardware takes place, it is expected that once write
+ * to hardware succeeds, the user of cache shall call flush. It drops the
+ * particular register from map. As a result, when read takes place from same
+ * register next time, read from cache fails and actual access to hardware
+ * takes place.
+ */
+class RegDataCache
+{
+  public:
+
+    /**
+     * @brief Constructor
+     */
+    RegDataCache()
+    { }
+
+    /**
+     * @brief Destructor
+     */
+    ~RegDataCache();
+
+    /**
+     * @brief  Returns reference to singleton instance of the RegDataCache.
+     * @return The singleton reference.
+     */
+     static RegDataCache & getCachedRegisters();
+
+    /**
+     * @brief Returns the data buffer for the given target and address.
+     * @param i_chip The target associated with the register.
+     * @param i_reg  Pointer to register to be read.
+     * @return A reference to the data buffer associated with the register.
+     */
+    BitString & read( ExtensibleChip * i_chip,
+                             const SCAN_COMM_REGISTER_CLASS * i_reg );
+
+    /**
+     * @brief Flushes entire contents from cache.
+     */
+    void flush();
+
+    /**
+     * @brief Removes a single entry from the cache.
+     * @param i_pChip       The rulechip  associated with the register.
+     * @param i_pRegister   points to the register to be flushed from cache.
+     */
+    void flush( ExtensibleChip* i_pChip,
+                const SCAN_COMM_REGISTER_CLASS * i_pRegister );
+    /**
+     * @brief Queries if a specific entry exist in cache.
+     * @param i_pChip       The rulechip  associated with the register.
+     * @param i_pRegister   base part of register entry to be queried in cache.
+     * @return pointer to cache entry associated with a given register
+     */
+     BitString * queryCache( ExtensibleChip* i_pChip,
+                            const SCAN_COMM_REGISTER_CLASS * i_pRegister )const;
+    /**
+     * @brief Queries if a specific entry exist in cache.
+     * @param i_scomAccessKey Reference to register to be queried.
+     * @return pointer to cache entry associated with a given register
+     */
+
+    BitString * queryCache(
+                        const ScomRegisterAccess & i_scomAccessKey )const;
+  private: // data
+
+    typedef std::map<ScomRegisterAccess, BitString *> CacheDump;
+    CacheDump iv_cachedRead;
+
+};
+
+PRDF_DECLARE_SINGLETON(RegDataCache, ReadCache);
+
+} // namespace PRDF
+
+#endif // REG_CACHE_H
+
