diff --git a/laz_synapse.lpk b/laz_synapse.lpk
new file mode 100644
index 0000000..e686e41
--- /dev/null
+++ b/laz_synapse.lpk
@@ -0,0 +1,170 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <Package Version="3">
+    <Name Value="laz_synapse"/>
+    <CompilerOptions>
+      <Version Value="8"/>
+      <SearchPaths>
+        <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)/"/>
+      </SearchPaths>
+      <Parsing>
+        <SyntaxOptions>
+          <UseAnsiStrings Value="True"/>
+        </SyntaxOptions>
+      </Parsing>
+      <Other>
+        <CompilerPath Value="$(CompPath)"/>
+      </Other>
+    </CompilerOptions>
+    <Files Count="33">
+      <Item1>
+        <Filename Value="asn1util.pas"/>
+        <UnitName Value="asn1util"/>
+      </Item1>
+      <Item2>
+        <Filename Value="blcksock.pas"/>
+        <UnitName Value="blcksock"/>
+      </Item2>
+      <Item3>
+        <Filename Value="clamsend.pas"/>
+        <UnitName Value="clamsend"/>
+      </Item3>
+      <Item4>
+        <Filename Value="dnssend.pas"/>
+        <UnitName Value="dnssend"/>
+      </Item4>
+      <Item5>
+        <Filename Value="ftpsend.pas"/>
+        <UnitName Value="ftpsend"/>
+      </Item5>
+      <Item6>
+        <Filename Value="ftptsend.pas"/>
+        <UnitName Value="ftptsend"/>
+      </Item6>
+      <Item7>
+        <Filename Value="httpsend.pas"/>
+        <UnitName Value="httpsend"/>
+      </Item7>
+      <Item8>
+        <Filename Value="imapsend.pas"/>
+        <UnitName Value="imapsend"/>
+      </Item8>
+      <Item9>
+        <Filename Value="ldapsend.pas"/>
+        <UnitName Value="ldapsend"/>
+      </Item9>
+      <Item10>
+        <Filename Value="mimeinln.pas"/>
+        <UnitName Value="mimeinln"/>
+      </Item10>
+      <Item11>
+        <Filename Value="mimemess.pas"/>
+        <UnitName Value="mimemess"/>
+      </Item11>
+      <Item12>
+        <Filename Value="mimepart.pas"/>
+        <UnitName Value="mimepart"/>
+      </Item12>
+      <Item13>
+        <Filename Value="nntpsend.pas"/>
+        <UnitName Value="nntpsend"/>
+      </Item13>
+      <Item14>
+        <Filename Value="pingsend.pas"/>
+        <UnitName Value="pingsend"/>
+      </Item14>
+      <Item15>
+        <Filename Value="pop3send.pas"/>
+        <UnitName Value="pop3send"/>
+      </Item15>
+      <Item16>
+        <Filename Value="slogsend.pas"/>
+        <UnitName Value="slogsend"/>
+      </Item16>
+      <Item17>
+        <Filename Value="smtpsend.pas"/>
+        <UnitName Value="smtpsend"/>
+      </Item17>
+      <Item18>
+        <Filename Value="snmpsend.pas"/>
+        <UnitName Value="snmpsend"/>
+      </Item18>
+      <Item19>
+        <Filename Value="sntpsend.pas"/>
+        <UnitName Value="sntpsend"/>
+      </Item19>
+      <Item20>
+        <Filename Value="ssfpc.pas"/>
+        <AddToUsesPkgSection Value="False"/>
+        <UnitName Value="ssfpc"/>
+      </Item20>
+      <Item21>
+        <Filename Value="sswin32.pas"/>
+        <AddToUsesPkgSection Value="False"/>
+        <UnitName Value="sswin32"/>
+      </Item21>
+      <Item22>
+        <Filename Value="synachar.pas"/>
+        <UnitName Value="synachar"/>
+      </Item22>
+      <Item23>
+        <Filename Value="synacode.pas"/>
+        <UnitName Value="synacode"/>
+      </Item23>
+      <Item24>
+        <Filename Value="synacrypt.pas"/>
+        <UnitName Value="synacrypt"/>
+      </Item24>
+      <Item25>
+        <Filename Value="synadbg.pas"/>
+        <UnitName Value="synadbg"/>
+      </Item25>
+      <Item26>
+        <Filename Value="synafpc.pas"/>
+        <UnitName Value="synafpc"/>
+      </Item26>
+      <Item27>
+        <Filename Value="synaicnv.pas"/>
+        <UnitName Value="synaicnv"/>
+      </Item27>
+      <Item28>
+        <Filename Value="synaip.pas"/>
+        <UnitName Value="synaip"/>
+      </Item28>
+      <Item29>
+        <Filename Value="synamisc.pas"/>
+        <UnitName Value="synamisc"/>
+      </Item29>
+      <Item30>
+        <Filename Value="synaser.pas"/>
+        <UnitName Value="synaser"/>
+      </Item30>
+      <Item31>
+        <Filename Value="synautil.pas"/>
+        <UnitName Value="synautil"/>
+      </Item31>
+      <Item32>
+        <Filename Value="synsock.pas"/>
+        <UnitName Value="synsock"/>
+      </Item32>
+      <Item33>
+        <Filename Value="tlntsend.pas"/>
+        <UnitName Value="tlntsend"/>
+      </Item33>
+    </Files>
+    <Type Value="RunAndDesignTime"/>
+    <RequiredPkgs Count="1">
+      <Item1>
+        <PackageName Value="FCL"/>
+        <MinVersion Major="1" Valid="True"/>
+      </Item1>
+    </RequiredPkgs>
+    <UsageOptions>
+      <UnitPath Value="$(PkgOutDir)"/>
+    </UsageOptions>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IgnoreBinaries Value="False"/>
+    </PublishOptions>
+  </Package>
+</CONFIG>
diff --git a/laz_synapse.pas b/laz_synapse.pas
new file mode 100644
index 0000000..2eaa540
--- /dev/null
+++ b/laz_synapse.pas
@@ -0,0 +1,24 @@
+{ This file was automatically created by Lazarus. Do not edit!
+  This source is only used to compile and install the package.
+ }
+
+unit laz_synapse; 
+
+interface
+
+uses
+    asn1util, blcksock, clamsend, dnssend, ftpsend, ftptsend, httpsend, 
+  imapsend, ldapsend, mimeinln, mimemess, mimepart, nntpsend, pingsend, 
+  pop3send, slogsend, smtpsend, snmpsend, sntpsend, synachar, synacode, 
+  synacrypt, synadbg, synafpc, synaicnv, synaip, synamisc, synaser, synautil, 
+  synsock, tlntsend, LazarusPackageIntf;
+
+implementation
+
+procedure Register; 
+begin
+end; 
+
+initialization
+  RegisterPackage('laz_synapse', @Register); 
+end.
diff --git a/ssfpc.pas b/ssfpc.pas
index 7e3f640..9b73f73 100644
--- a/ssfpc.pas
+++ b/ssfpc.pas
@@ -1,5 +1,5 @@
 {==============================================================================|
-| Project : Ararat Synapse                                       | 001.001.002 |
+| Project : Ararat Synapse                                       | 001.001.003 |
 |==============================================================================|
 | Content: Socket Independent Platform Layer - FreePascal definition include   |
 |==============================================================================|
@@ -250,7 +250,13 @@ const
 
   MSG_OOB       = sockets.MSG_OOB;      // Process out-of-band data.
   MSG_PEEK      = sockets.MSG_PEEK;     // Peek at incoming messages.
-  MSG_NOSIGNAL  = sockets.MSG_NOSIGNAL; // Do not generate SIGPIPE.
+  {$ifdef DARWIN}
+  MSG_NOSIGNAL  = $20000;  // Do not generate SIGPIPE.
+                           // Works under MAC OS X, but is undocumented,
+                           // So FPC doesn't include it
+  {$else}
+   MSG_NOSIGNAL  = sockets.MSG_NOSIGNAL; // Do not generate SIGPIPE.
+  {$endif}
 
 const
   WSAEINTR = ESysEINTR;
diff --git a/ssl_openssl_lib.pas b/ssl_openssl_lib.pas
index b9fe056..f073c58 100644
--- a/ssl_openssl_lib.pas
+++ b/ssl_openssl_lib.pas
@@ -1,5 +1,5 @@
 {==============================================================================|
-| Project : Ararat Synapse                                       | 003.006.001 |
+| Project : Ararat Synapse                                       | 003.006.002 |
 |==============================================================================|
 | Content: SSL support by OpenSSL                                              |
 |==============================================================================|
@@ -85,7 +85,11 @@ uses
   Classes,
   synafpc,
 {$IFNDEF MSWINDOWS}
-  Libc, SysUtils;
+  {$IFDEF FPC}
+  BaseUnix, SysUtils;
+  {$ELSE}
+   Libc, SysUtils;
+  {$ENDIF}
 {$ELSE}
   Windows;
 {$ENDIF}
@@ -1727,7 +1731,7 @@ begin
 {$ELSE}
       SSLLibHandle := LoadLib(DLLSSLName);
       SSLUtilHandle := LoadLib(DLLUtilName);
-  {$IFNDEF LINUX}
+  {$IFDEF MSWINDOWS}
       if (SSLLibHandle = 0) then
         SSLLibHandle := LoadLib(DLLSSLName2);
   {$ENDIF}
diff --git a/synamisc.pas b/synamisc.pas
index 4a67552..81d42b6 100644
--- a/synamisc.pas
+++ b/synamisc.pas
@@ -1,5 +1,5 @@
 {==============================================================================|
-| Project : Ararat Synapse                                       | 001.003.000 |
+| Project : Ararat Synapse                                       | 001.003.001 |
 |==============================================================================|
 | Content: misc. procedures and functions                                      |
 |==============================================================================|
@@ -50,6 +50,13 @@
 {$Q-}
 {$H+}
 
+//Kylix does not known UNIX define
+{$IFDEF LINUX}
+  {$IFNDEF UNIX}
+    {$DEFINE UNIX}
+  {$ENDIF}
+{$ENDIF}
+
 {$IFDEF UNICODE}
   {$WARN IMPLICIT_STRING_CAST OFF}
   {$WARN IMPLICIT_STRING_CAST_LOSS OFF}
@@ -69,7 +76,7 @@ interface
 
 uses
   synautil, blcksock, SysUtils, Classes
-{$IFDEF LINUX}
+{$IFDEF UNIX}
   {$IFNDEF FPC}
   , Libc
   {$ENDIF}
@@ -148,7 +155,7 @@ end;
 
 {==============================================================================}
 
-{$IFNDEF LINUX}
+{$IFNDEF UNIX}
 function GetDNSbyIpHlp: string;
 type
   PTIP_ADDRESS_STRING = ^TIP_ADDRESS_STRING;
@@ -240,7 +247,7 @@ end ;
 {$ENDIF}
 
 function GetDNS: string;
-{$IFDEF LINUX}
+{$IFDEF UNIX}
 var
   l: TStringList;
   n: integer;
@@ -287,7 +294,7 @@ end;
 {==============================================================================}
 
 function GetIEProxy(protocol: string): TProxySetting;
-{$IFDEF LINUX}
+{$IFDEF UNIX}
 begin
   Result.Host := '';
   Result.Port := '';
diff --git a/synaser.pas b/synaser.pas
index 5ea07c1..ad7b50b 100644
--- a/synaser.pas
+++ b/synaser.pas
@@ -1,5 +1,5 @@
 {==============================================================================|
-| Project : Ararat Synapse                                       | 007.004.000 |
+| Project : Ararat Synapse                                       | 007.005.000 |
 |==============================================================================|
 | Content: Serial port support                                                 |
 |==============================================================================|
@@ -44,9 +44,9 @@
 |==============================================================================}
 
 {: @abstract(Serial port communication library)
-This unit contains a class that implements serial port communication for Windows
- or Linux. This class provides numerous methods with same name and functionality
-  as methods of the Ararat Synapse TCP/IP library.
+This unit contains a class that implements serial port communication 
+ for Windows, Linux, Unix or MacOSx. This class provides numerous methods with 
+ same name and functionality as methods of the Ararat Synapse TCP/IP library.
 
 The following is a small example how establish a connection by modem (in this
 case with my USB modem):
@@ -76,6 +76,13 @@ case with my USB modem):
   {$ENDIF}
 {$ENDIF}
 
+//Kylix does not known UNIX define
+{$IFDEF LINUX}
+  {$IFNDEF UNIX}
+    {$DEFINE UNIX}
+  {$ENDIF}
+{$ENDIF}
+
 {$IFDEF FPC}
   {$MODE DELPHI}
   {$IFDEF MSWINDOWS}
@@ -189,10 +196,14 @@ type
   PDCB = ^TDCB;
 
 const
-{$IFDEF LINUX}
-  MaxRates = 30;
+{$IFDEF UNIX}
+  {$IFDEF DARWIN}
+  MaxRates = 18;  //MAC
+  {$ELSE}
+   MaxRates = 30; //UNIX
+  {$ENDIF}
 {$ELSE}
-  MaxRates = 19;  //FPC on some platforms not know high speeds?
+  MaxRates = 19;  //WIN
 {$ENDIF}
   Rates: array[0..MaxRates, 0..1] of cardinal =
   (
@@ -214,9 +225,10 @@ const
     (38400, B38400),
     (57600, B57600),
     (115200, B115200),
-    (230400, B230400),
-    (460800, B460800)
-{$IFDEF LINUX}
+    (230400, B230400)
+{$IFNDEF DARWIN}
+    ,(460800, B460800)
+  {$IFDEF UNIX}
     ,(500000, B500000),
     (576000, B576000),
     (921600, B921600),
@@ -228,10 +240,16 @@ const
     (3000000, B3000000),
     (3500000, B3500000),
     (4000000, B4000000)
+  {$ENDIF}
 {$ENDIF}
     );
 {$ENDIF}
 
+{$IFDEF DARWIN}
+const // From fcntl.h
+  O_SYNC = $0080;  { synchronous writes }
+{$ENDIF}
+
 const
   sOK = 0;
   sErr = integer(-1);
@@ -310,11 +328,9 @@ type
     procedure GetComNr(Value: string); virtual;
     function PreTestFailing: boolean; virtual;{HGJ}
     function TestCtrlLine: Boolean; virtual;
-{$IFNDEF MSWINDOWS}
+{$IFDEF UNIX}    
     procedure DcbToTermios(const dcb: TDCB; var term: termios); virtual;
     procedure TermiosToDcb(const term: termios; var dcb: TDCB); virtual;
-{$ENDIF}
-{$IFDEF LINUX}
     function ReadLockfile: integer; virtual;
     function LockfileName: String; virtual;
     procedure CreateLockfile(PidNr: integer); virtual;
@@ -325,7 +341,7 @@ type
     {: data Control Block with communication parameters. Usable only when you
      need to call API directly.}
     DCB: Tdcb;
-{$IFNDEF MSWINDOWS}
+{$IFDEF UNIX}
     TermiosStruc: termios;
 {$ENDIF}
     {:Object constructor.}
@@ -603,7 +619,7 @@ type
 
     {:Raise Synaser error with ErrNumber code. Usually used by internal routines.}
     procedure RaiseSynaError(ErrNumber: integer); virtual;
-{$IFDEF LINUX}
+{$IFDEF UNIX}
     function  cpomComportAccessible: boolean; virtual;{HGJ}
     procedure cpomReleaseComport; virtual; {HGJ}
 {$ENDIF}
@@ -764,7 +780,7 @@ end;
 
 class function TBlockSerial.GetVersion: string;
 begin
-	Result := 'SynaSer 7.4.0';
+	Result := 'SynaSer 7.5.0';
 end;
 
 procedure TBlockSerial.CloseSocket;
@@ -778,7 +794,7 @@ begin
   end;
   if InstanceActive then
   begin
-    {$IFDEF LINUX}
+    {$IFDEF UNIX}
     if FLinuxLock then
       cpomReleaseComport;
     {$ENDIF}
@@ -933,7 +949,7 @@ begin
     SerialCheck(-1)
   else
     SerialCheck(0);
-  {$IFDEF LINUX}
+  {$IFDEF UNIX}
   if FLastError <> sOK then
     if FLinuxLock then
       cpomReleaseComport;
@@ -968,7 +984,7 @@ begin
   begin
     SetSynaError(ErrNoDeviceAnswer);
     FileClose(FHandle);         {HGJ}
-    {$IFDEF LINUX}
+    {$IFDEF UNIX}
     if FLinuxLock then
       cpomReleaseComport;                {HGJ}
     {$ENDIF}                             {HGJ}
@@ -1807,7 +1823,8 @@ function TBlockSerial.CanRead(Timeout: integer): boolean;
 begin
   Result := WaitingData > 0;
   if not Result then
-    Result := CanEvent(EV_RXCHAR, Timeout);
+    Result := CanEvent(EV_RXCHAR, Timeout) or (WaitingData > 0);
+    //check WaitingData again due some broken virtual ports
   if Result then
     DoStatus(HR_CanRead, '');
 end;
@@ -1918,7 +1935,11 @@ begin
   {$IFNDEF FPC}
   SerialCheck(ioctl(FHandle, TCFLSH, TCIOFLUSH));
   {$ELSE}
-  SerialCheck(fpioctl(FHandle, TCFLSH, TCIOFLUSH));
+    {$IFDEF DARWIN}
+    SerialCheck(fpioctl(FHandle, TCIOflush, TCIOFLUSH));
+    {$ELSE}
+    SerialCheck(fpioctl(FHandle, TCFLSH, TCIOFLUSH));
+    {$ENDIF}
   {$ENDIF}
   FBuffer := '';
   ExceptCheck;
@@ -2154,7 +2175,7 @@ end;
   Ownership Manager.
 }
 
-{$IFDEF LINUX}
+{$IFDEF UNIX}
 
 function TBlockSerial.LockfileName: String;
 var