diff --git a/bindings/pyroot/src/Converters.cxx b/bindings/pyroot/src/Converters.cxx
index 7d944867160d4d9317c73a5f8679d1513c0156e1..5dcdff56f3019a2655576f3013c7f4c332ffe0a3 100644
--- a/bindings/pyroot/src/Converters.cxx
+++ b/bindings/pyroot/src/Converters.cxx
@@ -504,7 +504,7 @@ Bool_t PyROOT::TCStringConverter::SetArg(
 
 // set the value and declare success
    if ( func )
-      gInterpreter->CallFunc_SetArg( func,  reinterpret_cast< Long_t >( fBuffer.c_str() ) );
+      gInterpreter->CallFunc_SetArg( func, (Long_t)fBuffer.c_str() );
    return kTRUE;
 }
 
diff --git a/bindings/pyroot/src/RootWrapper.cxx b/bindings/pyroot/src/RootWrapper.cxx
index 2cec9a9efefad352fdabc5ab0392ebbec3584985..ec58a48a40902c7500b42cd25a6e100ace01da54 100644
--- a/bindings/pyroot/src/RootWrapper.cxx
+++ b/bindings/pyroot/src/RootWrapper.cxx
@@ -230,8 +230,15 @@ int PyROOT::BuildRootClassDict( const TScopeAdapter& klass, PyObject* pyclass )
 
    // special case trackers
       Bool_t setupSetItem = kFALSE;
-      Bool_t isConstructor =
-         TClassEdit::ShortType( mtName.c_str(), TClassEdit::kDropAlloc ) == clName;
+   // CLING WORKAROUND --
+      Bool_t isConstructor = kFALSE;
+      if ( clName == "string" ) {
+         isConstructor = mtName == "basic_string<char>";
+      } else {
+   // -- CLING WORKAROUND
+         isConstructor =
+            TClassEdit::ShortType( mtName.c_str(), TClassEdit::kDropAlloc ) == clName;
+      }
 
    // filter empty names (happens for namespaces, is bug?)
       if ( mtName == "" )
diff --git a/bindings/pyroot/src/TConstructorHolder.cxx b/bindings/pyroot/src/TConstructorHolder.cxx
index 2c72d8bdffadaf5c3eeb153be1bf007c22d33fcc..aa99743c8dbd25dc57529635dff067d347841256 100644
--- a/bindings/pyroot/src/TConstructorHolder.cxx
+++ b/bindings/pyroot/src/TConstructorHolder.cxx
@@ -86,8 +86,10 @@ PyObject* PyROOT::TConstructorHolder::operator()(
 // CLING WORKAROUND --
 // Due to #100389, the constructor may not be a valid method. This happens if
 // there is no (default) contructor, so just return a right-size bit of memory.
-   if ( ! address )
+   if ( ! address ) {
+      PyErr_Clear();
       address = (Long_t)klass->New();
+   }
 // -- END CLING WORKAROUND
 
 // done with filtered args