diff --git a/String.hxx.in b/String.hxx.in
index 6f449bb4aad3fc9ff6fbc75aa05f28d129b1e73b..5157fb63fc2f37848d70cdda4796103c5cee1274 100644
--- a/String.hxx.in
+++ b/String.hxx.in
@@ -54,6 +54,14 @@ public:
     stl_string(s, pos, n) {}
 }; // End Class: String
 
+#if defined(__WATCOMC__)
+inline bool operator<(String const& l, String const& r)
+  {
+  return (static_cast<@KWSYS_NAMESPACE@_stl::string const&>(l) <
+          static_cast<@KWSYS_NAMESPACE@_stl::string const&>(r));
+  }
+#endif
+
 } // namespace @KWSYS_NAMESPACE@
 
 #endif
diff --git a/kwsys_ios_sstream.h.in b/kwsys_ios_sstream.h.in
index 241dfcd827bfd5d7a761bdf78422f093b734f67d..050694d6153a89e20bf88ef52b7040c91d55f921 100644
--- a/kwsys_ios_sstream.h.in
+++ b/kwsys_ios_sstream.h.in
@@ -95,6 +95,8 @@ public:
 // Visual Studio 6 has a strstream::pcount, but this is not rdbuf()->pcount()
 #if (@KWSYS_NAMESPACE@_IOS_USE_STRSTREA_H) && defined(_MSC_VER) && (_MSC_VER == 1200)
     int count = this->pcount();
+#elif defined(__WATCOMC__)
+    int count = this->rdbuf()->out_waiting();
 #else
     int count = this->rdbuf()->pcount();
 #endif
@@ -151,6 +153,10 @@ private:
 # pragma warning (push)
 # pragma warning (disable: 4097) /* typedef-name used as synonym for class */
 #endif
+#if defined(__WATCOMC__)
+// W728: class modifiers for 'A' conflict with class modifiers for 'B'
+# pragma warning 728 10
+#endif
 
 class istringstream: private kwsys_stl::string, public istrstream
 {
@@ -172,6 +178,9 @@ private:
   void operator=(const istringstream&);
 };
 
+#if defined(__WATCOMC__)
+# pragma warning 728 9
+#endif
 #if defined(_MSC_VER)
 # pragma warning (pop)
 #endif