diff --git a/cpp/src/Slice/CsUtil.cpp b/cpp/src/Slice/CsUtil.cpp
index 0f4ff68..f96205a 100755
--- a/cpp/src/Slice/CsUtil.cpp
+++ b/cpp/src/Slice/CsUtil.cpp
@@ -808,13 +808,14 @@ Slice::CsGenerator::writeSequenceMarshalUnmarshalCode(Output& out,
             out << nl << stream << ".writeSize(" << param << '.' << limitID << ");";
             out << nl << "for(int ix__ = 0; ix__ < " << param << '.' << limitID << "; ++ix__)";
             out << sb;
-            if(streamingAPI)
+            if(!isValueType(type))
             {
-                out << nl << param << "[ix__].ice_write(" << stream << ");";
+                out << nl << "(" << param << "[ix__] == null ? new " << typeS << "() : "
+                    << param << "[ix__])." << (streamingAPI ? "ice_write" : "write__") << "(" << stream << ");";
             }
             else
             {
-                out << nl << param << "[ix__].write__(" << stream << ");";
+                out << nl << param << "[ix__]." << (streamingAPI ? "ice_write" : "write__") << "(" << stream << ");";
             }
             out << eb;
             out << eb;
