diff --git a/lib/delphi/src/Thrift.Stream.pas b/lib/delphi/src/Thrift.Stream.pas
index d78afe6..7c448d8 100644
--- a/lib/delphi/src/Thrift.Stream.pas
+++ b/lib/delphi/src/Thrift.Stream.pas
@@ -19,9 +19,7 @@
 
 unit Thrift.Stream;
 
-{$IF CompilerVersion >= 23.0}
-  {$LEGACYIFEND ON}
-{$IFEND}
+{$I Thrift.Defines.inc}
 
 interface
 
@@ -30,11 +28,11 @@
   SysUtils,
   SysConst,
   RTLConsts,
-  {$IF CompilerVersion < 23.0}
-    ActiveX,
+  {$IFDEF OLD_UNIT_NAMES}
+  ActiveX,
   {$ELSE}
-    Winapi.ActiveX,
-  {$IFEND}
+  Winapi.ActiveX,
+  {$ENDIF}
   Thrift.Utils;
 
 type
@@ -112,10 +110,8 @@
 
 procedure TThriftStreamAdapterCOM.Flush;
 begin
-  if IsOpen then
-  begin
-    if FStream <> nil then
-    begin
+  if IsOpen then begin
+    if FStream <> nil then begin
       FStream.Commit( STGC_DEFAULT );
     end;
   end;
@@ -128,17 +124,15 @@
 
 procedure TThriftStreamAdapterCOM.Open;
 begin
-
+  // nothing to do
 end;
 
 function TThriftStreamAdapterCOM.Read( var buffer: TBytes; offset: Integer; count: Integer): Integer;
 begin
   inherited;
   Result := 0;
-  if FStream <> nil then
-  begin
-    if count > 0 then
-    begin
+  if FStream <> nil then begin
+    if count > 0 then begin
       FStream.Read( @buffer[offset], count, @Result);
     end;
   end;
@@ -153,34 +147,27 @@
 begin
   FillChar( statstg, SizeOf( statstg), 0);
   len := 0;
-  if IsOpen then
-  begin
-    if Succeeded( FStream.Stat( statstg, STATFLAG_NONAME )) then
-    begin
+  if IsOpen then begin
+    if Succeeded( FStream.Stat( statstg, STATFLAG_NONAME )) then begin
       len := statstg.cbSize;
     end;
   end;
 
   SetLength( Result, len );
 
-  if len > 0 then
-  begin
-    if Succeeded( FStream.Seek( 0, STREAM_SEEK_SET, NewPos) ) then
-    begin
+  if len > 0 then begin
+    if Succeeded( FStream.Seek( 0, STREAM_SEEK_SET, NewPos) ) then begin
       FStream.Read( @Result[0], len, @cbRead);
     end;
   end;
 end;
 
 procedure TThriftStreamAdapterCOM.Write( const buffer: TBytes; offset: Integer; count: Integer);
-var
-  nWritten : Integer;
+var nWritten : Integer;
 begin
   inherited;
-  if IsOpen then
-  begin
-    if count > 0 then
-    begin
+  if IsOpen then begin
+    if count > 0 then begin
       FStream.Write( @buffer[0], count, @nWritten);
     end;
   end;
@@ -193,22 +180,18 @@
 var
   len : Integer;
 begin
-  if count > 0 then
-  begin
+  if count > 0 then begin
     len := Length( buffer );
-    if (offset < 0) or ( offset >= len) then
-    begin
+    if (offset < 0) or ( offset >= len) then begin
       raise ERangeError.Create( SBitsIndexError );
     end;
-    if count > len then
-    begin
+    if count > len then begin
       raise ERangeError.Create( SBitsIndexError );
     end;
   end;
 end;
 
-function TThriftStreamImpl.Read(var buffer: TBytes; offset,
-  count: Integer): Integer;
+function TThriftStreamImpl.Read(var buffer: TBytes; offset, count: Integer): Integer;
 begin
   Result := 0;
   CheckSizeAndOffset( buffer, offset, count );
@@ -237,16 +220,15 @@
 
 destructor TThriftStreamAdapterDelphi.Destroy;
 begin
-  if FOwnsStream then
-  begin
-    FStream.Free;
-  end;
+  if FOwnsStream 
+  then Close;
+  
   inherited;
 end;
 
 procedure TThriftStreamAdapterDelphi.Flush;
 begin
-
+  // nothing to do
 end;
 
 function TThriftStreamAdapterDelphi.IsOpen: Boolean;
@@ -256,7 +238,7 @@
 
 procedure TThriftStreamAdapterDelphi.Open;
 begin
-
+  // nothing to do
 end;
 
 function TThriftStreamAdapterDelphi.Read(var buffer: TBytes; offset,
@@ -264,8 +246,7 @@
 begin
   inherited;
   Result := 0;
-  if count > 0 then
-  begin
+  if count > 0 then begin
     Result := FStream.Read( Pointer(@buffer[offset])^, count)
   end;
 end;
@@ -299,8 +280,7 @@
   count: Integer);
 begin
   inherited;
-  if count > 0 then
-  begin
+  if count > 0 then begin
     FStream.Write( Pointer(@buffer[offset])^, count)
   end;
 end;
