diff --git a/libpldm/bios.h b/libpldm/bios.h
index 6f9e42b..7030f5d 100644
--- a/libpldm/bios.h
+++ b/libpldm/bios.h
@@ -16,6 +16,36 @@
 
 enum pldm_bios_commands { PLDM_GET_DATE_TIME = 0x0c };
 
+enum pldm_bios_table_types {
+	PLDM_BIOS_STRING_TABLE,
+	PLDM_BIOS_ATTR_TABLE,
+	PLDM_BIOS_ATTR_VAL_TABLE,
+};
+
+struct pldm_bios_string_table_entry {
+	uint16_t string_handle;
+	uint16_t string_length;
+	char name[1];
+} __attribute__((packed));
+
+struct pldm_bios_attr_table_entry {
+	uint16_t attr_handle;
+	uint8_t attr_type;
+	uint16_t string_handle;
+	uint8_t metadata[1];
+} __attribute__((packed));
+
+struct pldm_bios_enum_attr {
+	uint8_t num_possible_values;
+	uint16_t indices[1];
+} __attribute__((packed));
+
+struct pldm_bios_attr_val_table_entry {
+	uint16_t attr_handle;
+	uint8_t attr_type;
+	uint8_t value[1];
+} __attribute__((packed));
+
 /** @struct pldm_get_date_time_resp
  *
  *  Structure representing PLDM get date time response
diff --git a/libpldmresponder/Makefile.am b/libpldmresponder/Makefile.am
index 9113b3a..a285b8f 100644
--- a/libpldmresponder/Makefile.am
+++ b/libpldmresponder/Makefile.am
@@ -5,7 +5,8 @@
 	utils.cpp \
 	bios.cpp \
 	effecters.cpp \
-	pdr.cpp
+	pdr.cpp \
+	bios_table.cpp
 libpldmresponder_la_LIBADD = \
 	../libpldm/libpldm.la \
 	$(CODE_COVERAGE_LIBS)
diff --git a/libpldmresponder/bios_table.cpp b/libpldmresponder/bios_table.cpp
new file mode 100644
index 0000000..df2c8dd
--- /dev/null
+++ b/libpldmresponder/bios_table.cpp
@@ -0,0 +1,49 @@
+#include "bios_table.hpp"
+
+#include <fstream>
+
+namespace pldm
+{
+
+namespace responder
+{
+
+namespace bios
+{
+
+BIOSTable::BIOSTable(const char* filePath) : filePath(filePath)
+{
+}
+
+bool BIOSTable::isEmpty() const noexcept
+{
+    bool empty = false;
+    try
+    {
+        empty = fs::is_empty(filePath);
+    }
+    catch (fs::filesystem_error& e)
+    {
+        return true;
+    }
+    return empty;
+}
+
+void BIOSTable::store(const Table& table)
+{
+    std::ofstream stream(filePath.string(), std::ios::out | std::ios::binary);
+    stream.write(reinterpret_cast<const char*>(table.data()), table.size());
+}
+
+void BIOSTable::load(Response& response) const
+{
+    auto currSize = response.size();
+    auto fileSize = fs::file_size(filePath);
+    response.resize(currSize + fileSize);
+    std::ifstream stream(filePath.string(), std::ios::in | std::ios::binary);
+    stream.read(reinterpret_cast<char*>(response.data() + currSize), fileSize);
+}
+
+} // namespace bios
+} // namespace responder
+} // namespace pldm
diff --git a/libpldmresponder/bios_table.hpp b/libpldmresponder/bios_table.hpp
new file mode 100644
index 0000000..2b4077c
--- /dev/null
+++ b/libpldmresponder/bios_table.hpp
@@ -0,0 +1,76 @@
+#pragma once
+
+#include <stdint.h>
+
+#include <filesystem>
+#include <vector>
+
+#include "libpldm/bios.h"
+
+namespace pldm
+{
+
+namespace responder
+{
+
+namespace bios
+{
+
+using Table = std::vector<uint8_t>;
+using Response = std::vector<uint8_t>;
+namespace fs = std::filesystem;
+
+/** @class BIOSTable
+ *
+ *  @brief Provides APIs for storing and loading BIOS tables
+ *
+ *  Typical usage is as follows:
+ *  BIOSTable table(BIOS_STRING_TABLE_FILE_PATH);
+ *  if (table.isEmpty()) { // no persisted table
+ *    // construct BIOSTable 't'
+ *    // prepare Response 'r'
+ *    // send response to GetBIOSTable
+ *    table.store(t); // persisted
+ *  }
+ *  else { // persisted table exists
+ *    // create Response 'r' which has response fields (except
+ *    // the table itself) to a GetBIOSTable command
+ *    table.load(r); // actual table will be pushed back to the vector
+ *  }
+ */
+class BIOSTable
+{
+  public:
+    /** @brief Ctor - set file path to persist BIOS table
+     *
+     *  @param[in] filePath - file where BIOS table should be persisted
+     */
+    BIOSTable(const char* filePath);
+
+    /** @brief Checks if there's a persisted BIOS table
+     *
+     *  @return bool - true if table exists, false otherwise
+     */
+    bool isEmpty() const noexcept;
+
+    /** @brief Persist a BIOS table(string/attribute/attribute value)
+     *
+     *  @param[in] table - BIOS table
+     */
+    void store(const Table& table);
+
+    /** @brief Load BIOS table from persistent store to memory
+     *
+     *  @param[in,out] response - PLDM response message to GetBIOSTable
+     *  (excluding table), table will be pushed back to this.
+     */
+    void load(Response& response) const;
+
+  private:
+    // file storing PLDM BIOS table
+    fs::path filePath;
+};
+
+} // namespace bios
+} // namespace responder
+} // namespace pldm
diff --git a/test/Makefile.am b/test/Makefile.am
index fef5f96..1ab21e7 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -8,7 +8,8 @@
 	libpldmresponder_base_test \
 	libpldm_bios_test \
 	libpldmresponder_bios_test \
-	libpldmresponder_pdr_state_effecter_test
+	libpldmresponder_pdr_state_effecter_test \
+	libpldmresponder_bios_table_test
 
 if OEM_IBM
 check_PROGRAMS += \
@@ -130,3 +131,21 @@
 	$(PHOSPHOR_DBUS_INTERFACES_LIBS) \
 	-lstdc++fs
 libpldmresponder_pdr_state_effecter_test_SOURCES = libpldmresponder_pdr_state_effecter_test.cpp
+
+libpldmresponder_bios_table_test_CPPFLAGS = $(test_cppflags)
+libpldmresponder_bios_table_test_CXXFLAGS = $(test_cxxflags)
+libpldmresponder_bios_table_test_LDFLAGS = \
+        $(test_ldflags) \
+        $(SDBUSPLUS_LIBS)
+libpldmresponder_bios_table_test_LDADD = \
+        $(top_builddir)/libpldmresponder/libpldmresponder_la-bios.o \
+        $(top_builddir)/libpldmresponder/libpldmresponder_la-bios_table.o \
+        $(top_builddir)/libpldmresponder/libpldmresponder_la-utils.o \
+        $(top_builddir)/libpldm/libpldm_la-base.o  \
+        $(top_builddir)/libpldm/libpldm_la-bios.o \
+	$(top_builddir)/pldmd-registration.o \
+        $(CODE_COVERAGE_LIBS) \
+        $(SDBUSPLUS_LIBS) \
+	-lstdc++fs
+libpldmresponder_bios_table_test_SOURCES = \
+        libpldmresponder_bios_table_test.cpp
diff --git a/test/libpldmresponder_bios_table_test.cpp b/test/libpldmresponder_bios_table_test.cpp
new file mode 100644
index 0000000..47764ee
--- /dev/null
+++ b/test/libpldmresponder_bios_table_test.cpp
@@ -0,0 +1,61 @@
+#include "libpldmresponder/bios_table.hpp"
+
+#include <stdlib.h>
+
+#include <algorithm>
+#include <vector>
+
+#include <gtest/gtest.h>
+
+using namespace pldm::responder::bios;
+
+class TestBIOSTable : public testing::Test
+{
+  public:
+    void SetUp() override
+    {
+        char tmpdir[] = "/tmp/pldm_bios_table.XXXXXX";
+        dir = fs::path(mkdtemp(tmpdir));
+    }
+
+    void TearDown() override
+    {
+        fs::remove_all(dir);
+    }
+
+    fs::path dir;
+};
+
+TEST_F(TestBIOSTable, testStoreLoad)
+{
+    std::vector<uint8_t> table{10, 34, 56, 100, 44, 55, 69, 21, 48, 2, 7, 82};
+    fs::path file(dir / "t1");
+    BIOSTable t(file.string().c_str());
+    std::vector<uint8_t> out{};
+
+    ASSERT_THROW(t.load(out), fs::filesystem_error);
+
+    ASSERT_EQ(true, t.isEmpty());
+
+    t.store(table);
+    t.load(out);
+    ASSERT_EQ(true, std::equal(table.begin(), table.end(), out.begin()));
+}
+
+TEST_F(TestBIOSTable, testLoadOntoExisting)
+{
+    std::vector<uint8_t> table{10, 34, 56, 100, 44, 55, 69, 21, 48, 2, 7, 82};
+    fs::path file(dir / "t1");
+    BIOSTable t(file.string().c_str());
+    std::vector<uint8_t> out{99, 99};
+
+    ASSERT_THROW(t.load(out), fs::filesystem_error);
+
+    ASSERT_EQ(true, t.isEmpty());
+
+    t.store(table);
+    t.load(out);
+    ASSERT_EQ(true, std::equal(table.begin(), table.end(), out.begin() + 2));
+    ASSERT_EQ(out[0], 99);
+    ASSERT_EQ(out[1], 99);
+}
