diff --git a/source/adios2/toolkit/interop/adios1/ADIOS1Common.h b/source/adios2/toolkit/interop/adios1/ADIOS1Common.h
index 75f5c99fb568e7e5d3091c22e1709a2ba1c553cc..0473c896b10954f2d7d0bb4b2878184cba25d9a0 100644
--- a/source/adios2/toolkit/interop/adios1/ADIOS1Common.h
+++ b/source/adios2/toolkit/interop/adios1/ADIOS1Common.h
@@ -97,6 +97,6 @@ ADIOS2_FOREACH_TYPE_1ARG(declare_template_instantiation)
 #undef declare_template_instantiation
 
 } // end namespace interop
-} // end namespace adios
+} // end namespace adios2
 
 #endif /* ADIOS2_TOOLKIT_INTEROP_ADIOS1_ADIOS1COMMON_H_ */
diff --git a/source/adios2/toolkit/interop/adios1/ADIOS1Common.tcc b/source/adios2/toolkit/interop/adios1/ADIOS1Common.tcc
index b0fde3f8edfdf06348f4b4e937812c8615c19770..2233621a8907f6b44147e83177668c2df726a5ce 100644
--- a/source/adios2/toolkit/interop/adios1/ADIOS1Common.tcc
+++ b/source/adios2/toolkit/interop/adios1/ADIOS1Common.tcc
@@ -48,6 +48,11 @@ enum ADIOS_DATATYPES ADIOS1Common::GetADIOS1Type<char>() const {
     return adios_byte;
 }
 
+template <>
+enum ADIOS_DATATYPES ADIOS1Common::GetADIOS1Type<signed char>() const {
+    return adios_byte;
+}
+
 template <>
 enum ADIOS_DATATYPES ADIOS1Common::GetADIOS1Type<unsigned char>() const {
     return adios_unsigned_byte;
@@ -126,6 +131,6 @@ enum ADIOS_DATATYPES ADIOS1Common::GetADIOS1Type<cldouble>() const {
 }
 
 } // end namespace interop
-} // end namespace adios
+} // end namespace adios2
 
 #endif /* ADIOS2_TOOLKIT_INTEROP_ADIOS1_ADIOS1COMMON_TCC_ */
diff --git a/testing/adios2/engine/SmallTestData.h b/testing/adios2/engine/SmallTestData.h
index 05de0729e8e7fdf1ba957942892a24a945722082..b008d09f393fa1ea09d448efd234db25a461602e 100644
--- a/testing/adios2/engine/SmallTestData.h
+++ b/testing/adios2/engine/SmallTestData.h
@@ -10,6 +10,7 @@
 struct SmallTestData
 {
     std::array<char, 10> I8 = {{0, 1, -2, 3, -4, 5, -6, 7, -8, 9}};
+    std::array<signed char, 10> SI8 = {{0, -1, 2, -3, 4, -5, 6, -7, 8, -9}};
     std::array<short, 10> I16 = {
         {512, 513, -510, 515, -508, 517, -506, 519, -504, 521}};
     std::array<int, 10> I32 = {{131072, 131073, -131070, 131075, -131068,
diff --git a/testing/adios2/engine/bp/TestBPWriteRead.cpp b/testing/adios2/engine/bp/TestBPWriteRead.cpp
index 3857839916b6267b266a1dcfbb805d71915d0439..ae4257c25e2e7a96973b6ff749b28d185fc782b2 100644
--- a/testing/adios2/engine/bp/TestBPWriteRead.cpp
+++ b/testing/adios2/engine/bp/TestBPWriteRead.cpp
@@ -41,6 +41,8 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read1D8)
         {
             auto &var_i8 =
                 io.DefineVariable<char>("i8", {}, {}, adios2::Dims{8});
+            auto &var_si8 =
+                io.DefineVariable<signed char>("si8", {}, {}, adios2::Dims{8});
             auto &var_i16 =
                 io.DefineVariable<short>("i16", {}, {}, adios2::Dims{8});
             auto &var_i32 =
@@ -72,6 +74,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read1D8)
         {
             // Retrieve the variables that previously went out of scope
             auto &var_i8 = io.GetVariable<char>("i8");
+            auto &var_si8 = io.GetVariable<signed char>("si8");
             auto &var_i16 = io.GetVariable<short>("i16");
             auto &var_i32 = io.GetVariable<int>("i32");
             auto &var_i64 = io.GetVariable<long>("i64");
@@ -84,6 +87,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read1D8)
 
             // Write each one
             engine->Write(var_i8, m_TestData.I8.data() + step);
+            engine->Write(var_si8, m_TestData.SI8.data() + step);
             engine->Write(var_i16, m_TestData.I16.data() + step);
             engine->Write(var_i32, m_TestData.I32.data() + step);
             engine->Write(var_i64, m_TestData.I64.data() + step);
@@ -124,6 +128,10 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read1D8)
         ASSERT_NE(var_i8, nullptr);
         ASSERT_EQ(var_i8->ndim, 1);
         ASSERT_EQ(var_i8->dims[0], 8);
+        ADIOS_VARINFO *var_si8 = adios_inq_var(f, "si8");
+        ASSERT_NE(var_si8, nullptr);
+        ASSERT_EQ(var_si8->ndim, 1);
+        ASSERT_EQ(var_si8->dims[0], 8);
         ADIOS_VARINFO *var_i16 = adios_inq_var(f, "i16");
         ASSERT_NE(var_i16, nullptr);
         ASSERT_EQ(var_i16->ndim, 1);
@@ -162,6 +170,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read1D8)
         ASSERT_EQ(var_r64->dims[0], 8);
 
         std::array<char, 8> I8;
+        std::array<signed char, 8> SI8;
         std::array<int16_t, 8> I16;
         std::array<int32_t, 8> I32;
         std::array<int64_t, 8> I64;
@@ -181,6 +190,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read1D8)
         {
             // Read the current step
             adios_schedule_read_byid(f, sel, var_i8->varid, t, 1, I8.data());
+            adios_schedule_read_byid(f, sel, var_si8->varid, t, 1, SI8.data());
             adios_schedule_read_byid(f, sel, var_i16->varid, t, 1, I16.data());
             adios_schedule_read_byid(f, sel, var_i32->varid, t, 1, I32.data());
             adios_schedule_read_byid(f, sel, var_i64->varid, t, 1, I64.data());
@@ -200,6 +210,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read1D8)
                 std::string msg = ss.str();
 
                 EXPECT_EQ(I8[i], m_TestData.I8[i + t]) << msg;
+                EXPECT_EQ(SI8[i], m_TestData.SI8[i + t]) << msg;
                 EXPECT_EQ(I16[i], m_TestData.I16[i + t]) << msg;
                 EXPECT_EQ(I32[i], m_TestData.I32[i + t]) << msg;
                 EXPECT_EQ(I64[i], m_TestData.I64[i + t]) << msg;
@@ -216,6 +227,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read1D8)
 
         // Cleanup variable structures
         adios_free_varinfo(var_i8);
+        adios_free_varinfo(var_si8);
         adios_free_varinfo(var_i16);
         adios_free_varinfo(var_i32);
         adios_free_varinfo(var_i64);
@@ -257,6 +269,9 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D2x4)
         {
             auto &var_i8 =
                 io.DefineVariable<char>("i8", {}, {}, adios2::Dims{2, 4});
+
+            auto &var_si8 = io.DefineVariable<signed char>("si8", {}, {},
+                                                           adios2::Dims{2, 4});
             auto &var_i16 =
                 io.DefineVariable<short>("i16", {}, {}, adios2::Dims{2, 4});
             auto &var_i32 =
@@ -288,6 +303,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D2x4)
         {
             // Retrieve the variables that previously went out of scope
             auto &var_i8 = io.GetVariable<char>("i8");
+            auto &var_si8 = io.GetVariable<signed char>("si8");
             auto &var_i16 = io.GetVariable<short>("i16");
             auto &var_i32 = io.GetVariable<int>("i32");
             auto &var_i64 = io.GetVariable<long>("i64");
@@ -300,6 +316,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D2x4)
 
             // Write each one
             engine->Write(var_i8, m_TestData.I8.data() + step);
+            engine->Write(var_si8, m_TestData.SI8.data() + step);
             engine->Write(var_i16, m_TestData.I16.data() + step);
             engine->Write(var_i32, m_TestData.I32.data() + step);
             engine->Write(var_i64, m_TestData.I64.data() + step);
@@ -341,6 +358,11 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D2x4)
         ASSERT_EQ(var_i8->ndim, 2);
         ASSERT_EQ(var_i8->dims[0], 2);
         ASSERT_EQ(var_i8->dims[1], 4);
+        ADIOS_VARINFO *var_si8 = adios_inq_var(f, "si8");
+        ASSERT_NE(var_si8, nullptr);
+        ASSERT_EQ(var_si8->ndim, 2);
+        ASSERT_EQ(var_si8->dims[0], 2);
+        ASSERT_EQ(var_si8->dims[1], 4);
         ADIOS_VARINFO *var_i16 = adios_inq_var(f, "i16");
         ASSERT_NE(var_i16, nullptr);
         ASSERT_EQ(var_i16->ndim, 2);
@@ -388,6 +410,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D2x4)
         ASSERT_EQ(var_r64->dims[1], 4);
 
         std::array<char, 8> I8;
+        std::array<signed char, 8> SI8;
         std::array<int16_t, 8> I16;
         std::array<int32_t, 8> I32;
         std::array<int64_t, 8> I64;
@@ -407,6 +430,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D2x4)
         {
             // Read the current step
             adios_schedule_read_byid(f, sel, var_i8->varid, t, 1, I8.data());
+            adios_schedule_read_byid(f, sel, var_si8->varid, t, 1, SI8.data());
             adios_schedule_read_byid(f, sel, var_i16->varid, t, 1, I16.data());
             adios_schedule_read_byid(f, sel, var_i32->varid, t, 1, I32.data());
             adios_schedule_read_byid(f, sel, var_i64->varid, t, 1, I64.data());
@@ -426,6 +450,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D2x4)
                 std::string msg = ss.str();
 
                 EXPECT_EQ(I8[i], m_TestData.I8[i + t]) << msg;
+                EXPECT_EQ(SI8[i], m_TestData.SI8[i + t]) << msg;
                 EXPECT_EQ(I16[i], m_TestData.I16[i + t]) << msg;
                 EXPECT_EQ(I32[i], m_TestData.I32[i + t]) << msg;
                 EXPECT_EQ(I64[i], m_TestData.I64[i + t]) << msg;
@@ -442,6 +467,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D2x4)
 
         // Cleanup variable structures
         adios_free_varinfo(var_i8);
+        adios_free_varinfo(var_si8);
         adios_free_varinfo(var_i16);
         adios_free_varinfo(var_i32);
         adios_free_varinfo(var_i64);
@@ -483,6 +509,8 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D4x2)
         {
             auto &var_i8 =
                 io.DefineVariable<char>("i8", {}, {}, adios2::Dims{4, 2});
+            auto &var_si8 = io.DefineVariable<signed char>("si8", {}, {},
+                                                           adios2::Dims{4, 2});
             auto &var_i16 =
                 io.DefineVariable<short>("i16", {}, {}, adios2::Dims{4, 2});
             auto &var_i32 =
@@ -514,6 +542,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D4x2)
         {
             // Retrieve the variables that previously went out of scope
             auto &var_i8 = io.GetVariable<char>("i8");
+            auto &var_si8 = io.GetVariable<signed char>("si8");
             auto &var_i16 = io.GetVariable<short>("i16");
             auto &var_i32 = io.GetVariable<int>("i32");
             auto &var_i64 = io.GetVariable<long>("i64");
@@ -526,6 +555,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D4x2)
 
             // Write each one
             engine->Write(var_i8, m_TestData.I8.data() + step);
+            engine->Write(var_si8, m_TestData.SI8.data() + step);
             engine->Write(var_i16, m_TestData.I16.data() + step);
             engine->Write(var_i32, m_TestData.I32.data() + step);
             engine->Write(var_i64, m_TestData.I64.data() + step);
@@ -567,6 +597,11 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D4x2)
         ASSERT_EQ(var_i8->ndim, 2);
         ASSERT_EQ(var_i8->dims[0], 4);
         ASSERT_EQ(var_i8->dims[1], 2);
+        ADIOS_VARINFO *var_si8 = adios_inq_var(f, "si8");
+        ASSERT_NE(var_si8, nullptr);
+        ASSERT_EQ(var_si8->ndim, 2);
+        ASSERT_EQ(var_si8->dims[0], 4);
+        ASSERT_EQ(var_si8->dims[1], 2);
         ADIOS_VARINFO *var_i16 = adios_inq_var(f, "i16");
         ASSERT_NE(var_i16, nullptr);
         ASSERT_EQ(var_i16->ndim, 2);
@@ -614,6 +649,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D4x2)
         ASSERT_EQ(var_r64->dims[1], 2);
 
         std::array<char, 8> I8;
+        std::array<signed char, 8> SI8;
         std::array<int16_t, 8> I16;
         std::array<int32_t, 8> I32;
         std::array<int64_t, 8> I64;
@@ -633,6 +669,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D4x2)
         {
             // Read the current step
             adios_schedule_read_byid(f, sel, var_i8->varid, t, 1, I8.data());
+            adios_schedule_read_byid(f, sel, var_si8->varid, t, 1, SI8.data());
             adios_schedule_read_byid(f, sel, var_i16->varid, t, 1, I16.data());
             adios_schedule_read_byid(f, sel, var_i32->varid, t, 1, I32.data());
             adios_schedule_read_byid(f, sel, var_i64->varid, t, 1, I64.data());
@@ -652,6 +689,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D4x2)
                 std::string msg = ss.str();
 
                 EXPECT_EQ(I8[i], m_TestData.I8[i + t]) << msg;
+                EXPECT_EQ(SI8[i], m_TestData.SI8[i + t]) << msg;
                 EXPECT_EQ(I16[i], m_TestData.I16[i + t]) << msg;
                 EXPECT_EQ(I32[i], m_TestData.I32[i + t]) << msg;
                 EXPECT_EQ(I64[i], m_TestData.I64[i + t]) << msg;
@@ -668,6 +706,7 @@ TEST_F(BPWriteReadTest, ADIOS2BPWriteADIOS1Read2D4x2)
 
         // Cleanup variable structures
         adios_free_varinfo(var_i8);
+        adios_free_varinfo(var_si8);
         adios_free_varinfo(var_i16);
         adios_free_varinfo(var_i32);
         adios_free_varinfo(var_i64);
diff --git a/testing/adios2/interface/TestADIOSInterfaceWrite.cpp b/testing/adios2/interface/TestADIOSInterfaceWrite.cpp
index 03f3132640587da5b8912fa3ff92060cb9c65e0d..d636a3169d65afbeb54388c553766753c6ebcc41 100644
--- a/testing/adios2/interface/TestADIOSInterfaceWrite.cpp
+++ b/testing/adios2/interface/TestADIOSInterfaceWrite.cpp
@@ -43,6 +43,30 @@ TEST_F(ADIOSInterfaceWriteTest, DefineVarChar1x10)
     EXPECT_EQ(var_i8.m_Type, "char");
 }
 
+TEST_F(ADIOSInterfaceWriteTest, DefineVarSChar1x10)
+{
+    // Define ADIOS variables for each type
+    auto &var_si8 =
+        io.DefineVariable<signed char>("si8", {}, {}, adios2::Dims{10});
+
+    // Verify the return type is as expected
+    ::testing::StaticAssertTypeEq<decltype(var_si8),
+                                  adios2::Variable<signed char> &>();
+
+    // Verify exceptions are thrown upon duplicate variable names
+    EXPECT_THROW(auto &foo =
+                     io.DefineVariable<char>("si8", {}, {}, adios2::Dims{10}),
+                 std::invalid_argument);
+
+    // Verify the dimensions, name, and type are correct
+    ASSERT_EQ(var_si8.m_Shape.size(), 0);
+    EXPECT_EQ(var_si8.m_Start.size(), 0);
+    EXPECT_EQ(var_si8.m_Count.size(), 1);
+    EXPECT_EQ(var_si8.m_Count[0], 10);
+    EXPECT_EQ(var_si8.m_Name, "si8");
+    EXPECT_EQ(var_si8.m_Type, "signed char");
+}
+
 // Rinse  and repeat for remaining types
 TEST_F(ADIOSInterfaceWriteTest, DefineVarShort1x10)
 {