diff --git a/Makefile.am b/Makefile.am
index ce9b119..3c01879 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -111,13 +111,26 @@
 test_get_mbox_info_v2_timeout_SOURCES = test/get_mbox_info_v2_timeout.c \
 					$(TEST_MBOX_SRCS) $(TEST_MOCK_SRCS)
 
+TEST_MBOX_VPNOR_SRCS = common.c pnor_partition_table.cpp
+
 test_create_pnor_partition_table_SOURCES = \
-	test/create_pnor_partition_table.cpp \
-	common.c \
-	pnor_partition_table.cpp
+	$(TEST_MBOX_VPNOR_SRCS) \
+	test/create_pnor_partition_table.cpp
 test_create_pnor_partition_table_LDFLAGS = $(OESDK_TESTCASE_FLAGS)
 test_create_pnor_partition_table_LDADD = -lstdc++fs
 
+test_create_read_window_vpnor_SOURCES = \
+	$(TEST_MBOX_VPNOR_SRCS) $(TEST_MOCK_SRCS) \
+	mboxd_msg.c \
+	mboxd_windows.c \
+	mboxd_lpc.c \
+	mboxd_flash.c \
+	mboxd_pnor_partition_table.cpp \
+	mboxd_flash_virtual.cpp \
+	test/create_read_window_vpnor.cpp
+test_create_read_window_vpnor_LDFLAGS = $(OESDK_TESTCASE_FLAGS)
+test_create_read_window_vpnor_LDADD = -lstdc++fs
+
 check_PROGRAMS = test/sanity \
 		 test/copy_flash \
 		 test/erase_flash \
@@ -147,7 +160,7 @@
 		 test/get_mbox_info_v2_timeout
 
 if VIRTUAL_PNOR_ENABLED
-check_PROGRAMS += test/create_pnor_partition_table
+check_PROGRAMS += test/create_pnor_partition_table test/create_read_window_vpnor
 endif
 
 TESTS = $(check_PROGRAMS)
diff --git a/mboxd_pnor_partition_table.cpp b/mboxd_pnor_partition_table.cpp
index 72a8953..87de2b9 100644
--- a/mboxd_pnor_partition_table.cpp
+++ b/mboxd_pnor_partition_table.cpp
@@ -1,6 +1,7 @@
 #include "mboxd_pnor_partition_table.h"
 #include "mbox.h"
 #include "pnor_partition_table.hpp"
+#include <experimental/filesystem>
 
 struct vpnor_partition_table
 {
@@ -9,14 +10,24 @@
 
 void vpnor_create_partition_table(struct mbox_context *context)
 {
-    if (context)
+    if (context && !context->vpnor)
     {
-        if (!context->vpnor)
-        {
-            context->vpnor = new vpnor_partition_table;
-            context->vpnor->table =
-                new openpower::virtual_pnor::partition::Table;
-        }
+        context->vpnor = new vpnor_partition_table;
+        context->vpnor->table =
+            new openpower::virtual_pnor::partition::Table;
+    }
+}
+
+void vpnor_create_partition_table_from_path(struct mbox_context *context,
+                                            const char *path)
+{
+    std::experimental::filesystem::path dir(path);
+
+    if (context && !context->vpnor)
+    {
+        context->vpnor = new vpnor_partition_table;
+        context->vpnor->table =
+            new openpower::virtual_pnor::partition::Table(std::move(dir));
     }
 }
 
diff --git a/mboxd_pnor_partition_table.h b/mboxd_pnor_partition_table.h
index ec21923..f494830 100644
--- a/mboxd_pnor_partition_table.h
+++ b/mboxd_pnor_partition_table.h
@@ -27,6 +27,18 @@
  */
 void vpnor_create_partition_table(struct mbox_context *context);
 
+/** @brief Create a virtual PNOR partition table.
+ *
+ *  @param[in] context - mbox context pointer
+ *  @param[in] path - location of the partition file
+ *
+ *  This API is same as above one but it reads the partition file from
+ *  from the given location(path).
+ */
+
+void vpnor_create_partition_table_from_path(struct mbox_context *context,
+                                            const char* path);
+
 
 /** @brief Get partition table size, in blocks (1 block = 4KB)
  *
diff --git a/test/create_read_window_vpnor.cpp b/test/create_read_window_vpnor.cpp
new file mode 100644
index 0000000..855d88d
--- /dev/null
+++ b/test/create_read_window_vpnor.cpp
@@ -0,0 +1,89 @@
+#include "config.h"
+#include "mboxd_pnor_partition_table.h"
+
+extern "C" {
+#include "test/mbox.h"
+#include "test/system.h"
+}
+
+#include <assert.h>
+#include <string.h>
+
+#include <vector>
+#include <fstream>
+#include <experimental/filesystem>
+
+constexpr auto line = "partition01=HBB,00000000,00000400,ECC,PRESERVED";
+constexpr auto partition = "HBB";
+char tmplt[] = "/tmp/create_read_test.XXXXXX";
+uint8_t data[8] = { 0xaa, 0x55, 0xaa, 0x66, 0x77, 0x88, 0x99, 0xab };
+
+#define BLOCK_SIZE  4096
+#define MEM_SIZE    (BLOCK_SIZE *2)
+#define ERASE_SIZE  BLOCK_SIZE
+#define N_WINDOWS   1
+#define WINDOW_SIZE BLOCK_SIZE
+
+static const uint8_t get_info[] = {
+        0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+// offset 1 and size 6
+static const uint8_t create_read_window[] = {
+        0x04, 0x01, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const uint8_t response[] = {
+        0x04, 0x01, 0xfe, 0xff, 0x01, 0x00, 0x01, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x01
+};
+
+namespace fs = std::experimental::filesystem;
+
+int main()
+{
+    char* tmpdir = mkdtemp(tmplt);
+    assert(tmpdir != nullptr);
+
+    // create the toc file
+    fs::path tocFilePath{tmpdir};
+    tocFilePath /= PARTITION_TOC_FILE;
+    std::ofstream tocFile(tocFilePath.c_str());
+    tocFile.write(line, strlen(line));
+    tocFile.close();
+
+    // create the partition file
+    fs::path partitionFilePath{tmpdir};
+    partitionFilePath /= partition;
+    std::ofstream partitionFile(partitionFilePath.c_str());
+
+    partitionFile.write((char*)data,sizeof(data));
+    partitionFile.close();
+
+    system_set_reserved_size(MEM_SIZE);
+    system_set_mtd_sizes(MEM_SIZE, ERASE_SIZE);
+
+    struct mbox_context *ctx = mbox_create_test_context(N_WINDOWS, WINDOW_SIZE);
+    strcpy(ctx->paths.ro_loc,tmpdir);
+
+    vpnor_create_partition_table_from_path(ctx, tmpdir);
+
+    int rc = mbox_command_dispatch(ctx, get_info, sizeof(get_info));
+    assert(rc == 1);
+
+    // send the request for partition1
+    rc = mbox_command_dispatch(ctx, create_read_window,
+                        sizeof(create_read_window));
+    assert(rc == 1);
+
+    rc = mbox_cmp(ctx, response, sizeof(response));
+    assert(rc == 0);
+
+    // Compare the reserved memory to the pnor
+    rc = memcmp(ctx->mem, data, 6);
+    assert(rc == 0);
+
+    fs::remove_all(fs::path{tmpdir});
+    return rc;
+}
