diff --git a/compiler/cpp/src/thrift/generate/t_delphi_generator.cc b/compiler/cpp/src/thrift/generate/t_delphi_generator.cc
index c91ff33..c599836 100644
--- a/compiler/cpp/src/thrift/generate/t_delphi_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_delphi_generator.cc
@@ -68,7 +68,6 @@
     has_const = false;
     std::map<std::string, std::string>::const_iterator iter;
 
-    ansistr_binary_ = false;
     register_types_ = false;
     constprefix_ = false;
     old_names_ = false;
@@ -78,10 +77,7 @@
     com_types_ = false;
     rtti_ = false;
     for( iter = parsed_options.begin(); iter != parsed_options.end(); ++iter) {
-      if( iter->first.compare("ansistr_binary") == 0) {
-        ansistr_binary_ = true;
-        pwarning(0, "The 'ansistr_binary' option is deprecated.");
-      } else if( iter->first.compare("register_types") == 0) {
+      if( iter->first.compare("register_types") == 0) {
         register_types_ = true;
       } else if( iter->first.compare("old_names") == 0) {
         old_names_ = true;
@@ -102,10 +98,6 @@
       }
     }
 
-    if(com_types_ && ansistr_binary_) {
-      throw "com_types and ansistr_binary are mutually exclusive";
-    }
-
     out_dir_base_ = "gen-delphi";
     escape_.clear();
     escape_['\''] = "''";
@@ -468,7 +460,6 @@
   void init_known_types_list();
   bool is_void(t_type* type);
   int indent_impl_;
-  bool ansistr_binary_;
   bool register_types_;
   bool constprefix_;
   bool old_names_;
@@ -760,7 +751,6 @@
 
   f_all << "const" << endl;
   indent_up();
-  indent(f_all) << "c" << tmp_unit << "_Option_AnsiStr_Binary = " << (ansistr_binary_ ? "True" : "False") << ";" << endl;
   indent(f_all) << "c" << tmp_unit << "_Option_Register_Types = " << (register_types_ ? "True" : "False") << ";" << endl;
   indent(f_all) << "c" << tmp_unit << "_Option_ConstPrefix    = " << (constprefix_ ? "True" : "False") << ";" << endl;
   indent(f_all) << "c" << tmp_unit << "_Option_Events         = " << (events_ ? "True" : "False") << ";" << endl;
@@ -2634,11 +2624,7 @@
         break;
       case t_base_type::TYPE_STRING:
         if (type->is_binary()) {
-          if (ansistr_binary_) {
-            out << "ReadAnsiString();";
-          } else {
-            out << (com_types_ ? "ReadBinaryCOM();" :  "ReadBinary();");
-          }
+          out << (com_types_ ? "ReadBinaryCOM();" :  "ReadBinary();");
         } else {
           out << "ReadString();";
         }
@@ -2837,11 +2823,7 @@
         break;
       case t_base_type::TYPE_STRING:
         if (type->is_binary()) {
-          if (ansistr_binary_) {
-            out << "WriteAnsiString(";
-          } else {
-            out << "WriteBinary(";
-          }
+          out << "WriteBinary(";
         } else {
           out << "WriteString(";
         }
@@ -3180,8 +3162,6 @@
     return "";
   case t_base_type::TYPE_STRING:
     if (tbase->is_binary()) {
-      if (ansistr_binary_)
-        return "System.AnsiString";
       if( com_types_)
         return "IThriftBytes";
       if( rtti_)
@@ -3400,11 +3380,7 @@
       return "0";
     case t_base_type::TYPE_STRING:
       if (type->is_binary()) {
-        if (ansistr_binary_) {
-          return "''";
-        } else {
-          return "nil";
-        }
+        return "nil";
       } else {
         return "''";
       }
@@ -4072,7 +4048,6 @@
 THRIFT_REGISTER_GENERATOR(
     delphi,
     "Delphi",
-    "    ansistr_binary:  Use AnsiString for binary datatype (default is TBytes).\n"
     "    register_types:  Enable TypeRegistry, allows for creation of struct, union\n"
     "                     and container instances by interface or TypeInfo()\n"
     "    constprefix:     Name TConstants classes after IDL to reduce ambiguities\n"
diff --git a/lib/delphi/src/Thrift.Protocol.pas b/lib/delphi/src/Thrift.Protocol.pas
index fd92da9..7cfc2ae 100644
--- a/lib/delphi/src/Thrift.Protocol.pas
+++ b/lib/delphi/src/Thrift.Protocol.pas
@@ -232,7 +232,7 @@
     procedure WriteI64( const i64: Int64);
     procedure WriteDouble( const d: Double);
     procedure WriteString( const s: string );
-    procedure WriteAnsiString( const s: AnsiString);
+    procedure WriteAnsiString( const s: AnsiString);  deprecated 'AnsiString routines are deprecated, see THRIFT-5750';
     procedure WriteBinary( const b: TBytes); overload;
     procedure WriteBinary( const b: IThriftBytes); overload;
     procedure WriteUuid( const uuid: TGuid);
@@ -259,7 +259,7 @@
     function ReadBinaryCOM : IThriftBytes;
     function ReadUuid: TGuid;
     function ReadString: string;
-    function ReadAnsiString: AnsiString;
+    function ReadAnsiString: AnsiString;  deprecated 'AnsiString routines are deprecated, see THRIFT-5750';
 
     function  NextRecursionLevel : IProtocolRecursionTracker;
     procedure IncrementRecursionDepth;
@@ -311,7 +311,6 @@
     procedure WriteI64( const i64: Int64); virtual; abstract;
     procedure WriteDouble( const d: Double); virtual; abstract;
     procedure WriteString( const s: string ); virtual;
-    procedure WriteAnsiString( const s: AnsiString); virtual;
     procedure WriteBinary( const b: TBytes); overload; virtual; abstract;
     procedure WriteUuid( const b: TGuid); virtual; abstract;
 
@@ -336,7 +335,6 @@
     function ReadBinary: TBytes; virtual; abstract;
     function ReadUuid: TGuid; virtual; abstract;
     function ReadString: string; virtual;
-    function ReadAnsiString: AnsiString; virtual;
 
     // provide generic implementation for all derived classes
     procedure WriteBinary( const bytes : IThriftBytes); overload; virtual;
@@ -344,6 +342,13 @@
 
     property  Transport: ITransport read GetTransport;
 
+  private
+    // THRIFT-5750 unit visible, but no longer protected - awaiting final removal
+    // - Note that you can implement whavetever you want in your derived class, but no longer inherit
+    // - The function can still be called via IProtocol until final removal
+    function ReadAnsiString: AnsiString; virtual;  //deprecated;
+    procedure WriteAnsiString( const s: AnsiString); virtual; //deprecated;
+
   public
     constructor Create( const aTransport : ITransport); virtual;
   end;
@@ -508,7 +513,6 @@
     procedure WriteI64( const i64: Int64); override;
     procedure WriteDouble( const d: Double); override;
     procedure WriteString( const s: string ); override;
-    procedure WriteAnsiString( const s: AnsiString); override;
     procedure WriteBinary( const b: TBytes); override;
     procedure WriteBinary( const bytes : IThriftBytes); overload; override;
     procedure WriteUuid( const uuid: TGuid); override;
@@ -534,7 +538,15 @@
     function ReadBinary: TBytes; override;
     function ReadUuid: TGuid; override;
     function ReadString: string; override;
-    function ReadAnsiString: AnsiString; override;
+
+  private
+    // THRIFT-5750 unit visible, but no longer protected - awaiting final removal
+    // - Note that you can implement whavetever you want in your derived class, but no longer inherit
+    // - The function can still be called via IProtocol until final removal
+    {$WARN SYMBOL_DEPRECATED OFF}
+    function ReadAnsiString: AnsiString; override;  deprecated;
+    procedure WriteAnsiString( const s: AnsiString); override;  deprecated;
+    {$WARN SYMBOL_DEPRECATED DEFAULT}
   end;
 
 
@@ -1520,7 +1532,9 @@
 
 procedure TProtocolDecorator.WriteAnsiString( const s: AnsiString);
 begin
+  {$WARN SYMBOL_DEPRECATED OFF}
   FWrappedProtocol.WriteAnsiString( s);
+  {$WARN SYMBOL_DEPRECATED DEFAULT}
 end;
 
 
@@ -1670,7 +1684,9 @@
 
 function TProtocolDecorator.ReadAnsiString: AnsiString;
 begin
+  {$WARN SYMBOL_DEPRECATED OFF}
   result := FWrappedProtocol.ReadAnsiString;
+  {$WARN SYMBOL_DEPRECATED DEFAULT}
 end;
 
 
