diff --git a/Asuro.iso b/Asuro.iso
index c97a2d80..706369c8 100644
Binary files a/Asuro.iso and b/Asuro.iso differ
diff --git a/bin/kernel.bin b/bin/kernel.bin
index 554ab5d7..3bfedaeb 100755
Binary files a/bin/kernel.bin and b/bin/kernel.bin differ
diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin
index 554ab5d7..3bfedaeb 100755
Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ
diff --git a/lib/E1000.ppu b/lib/E1000.ppu
index a3b8543f..d60c0ede 100644
Binary files a/lib/E1000.ppu and b/lib/E1000.ppu differ
diff --git a/lib/arp.ppu b/lib/arp.ppu
index 98d5a332..a9a12900 100644
Binary files a/lib/arp.ppu and b/lib/arp.ppu differ
diff --git a/lib/asuro.ppu b/lib/asuro.ppu
index a8f9c140..47257e92 100644
Binary files a/lib/asuro.ppu and b/lib/asuro.ppu differ
diff --git a/lib/eth2.ppu b/lib/eth2.ppu
index ac124ed2..2b7feb2a 100644
Binary files a/lib/eth2.ppu and b/lib/eth2.ppu differ
diff --git a/lib/ipv4.ppu b/lib/ipv4.ppu
index 4dde0094..e0f99479 100644
Binary files a/lib/ipv4.ppu and b/lib/ipv4.ppu differ
diff --git a/lib/kernel.ppu b/lib/kernel.ppu
index 8309833e..48ddbba8 100644
Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ
diff --git a/lib/libpconsole.a b/lib/libpconsole.a
index 80664fd2..3997ed67 100644
Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ
diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a
index 634b4a26..a61f26ee 100644
Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ
diff --git a/lib/libpsystem.a b/lib/libpsystem.a
index 6f03178a..6d1c6ce5 100644
Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ
diff --git a/lib/net.ppu b/lib/net.ppu
index ff92ce60..eb89e363 100644
Binary files a/lib/net.ppu and b/lib/net.ppu differ
diff --git a/lib/nettypes.ppu b/lib/nettypes.ppu
index 9c713592..090f35bc 100644
Binary files a/lib/nettypes.ppu and b/lib/nettypes.ppu differ
diff --git a/lib/netutils.ppu b/lib/netutils.ppu
index ec8c21c2..dc24bc0f 100644
Binary files a/lib/netutils.ppu and b/lib/netutils.ppu differ
diff --git a/lib/shell.ppu b/lib/shell.ppu
index 402ee808..fcfa8428 100644
Binary files a/lib/shell.ppu and b/lib/shell.ppu differ
diff --git a/lib/terminal.ppu b/lib/terminal.ppu
index e2bda496..3a82c10c 100644
Binary files a/lib/terminal.ppu and b/lib/terminal.ppu differ
diff --git a/src/driver/net/include/nettypes.pas b/src/driver/net/include/nettypes.pas
index 73dfe4e1..d87bc52f 100644
--- a/src/driver/net/include/nettypes.pas
+++ b/src/driver/net/include/nettypes.pas
@@ -18,10 +18,19 @@ type
         Destination : TIPv4Address;
     end;
 
+    TProtocol = record
+        L1 : uint16;
+        L2 : uint16;
+        L3 : uint16;
+        L4 : uint16;
+    end;
+
     PPacketContext = ^TPacketContext;
     TPacketContext = record
         MAC : TMACPair;
         IP  : TIPv4Pair;
+        Protocol : TProtocol;
+        TTL : uint8;
     end;
 
     PIPv4Configuration = ^TIPv4Configuration;
diff --git a/src/driver/net/l3/ipv4.pas b/src/driver/net/l3/ipv4.pas
index 8dca5cac..97b323bd 100644
--- a/src/driver/net/l3/ipv4.pas
+++ b/src/driver/net/l3/ipv4.pas
@@ -23,12 +23,74 @@ var
     Registered : Boolean = false;
     Protocols  : Array[0..255] of TRecvCallback;
     Config     : TIPv4Configuration;
+    CurrentID  : uint16 = 0;
 
 function  getIPv4Config : PIPv4Configuration;
 begin
     getIPv4Config:= @Config;
 end;
 
+function calculateChecksum(p_data : puint16; p_len : uint16) : uint16;
+var
+    sum   : uint32;
+    dat   : puint16;
+    carry : uint16;
+    i     : uint32;
+    l     : uint32;
+
+begin
+    dat:= p_data;
+    sum:= 0;
+    l:= p_len div 2;
+    for i:=1 to l do begin
+        sum:= sum + p_data^;
+        inc(p_data);
+    end;
+    while (sum > $FFFF) do begin
+        carry:= (sum AND $FFFF0000) SHR 16;
+        sum:= sum + carry;
+    end;
+    calculateChecksum:= not sum;
+end;
+
+procedure send(p_data : void; p_len : uint16; p_context : PPacketContext);
+var
+    Header : TIPV4Header;
+    Len    : uint16;
+    CHK    : uint16;
+    buffer : void;
+
+begin
+    writeToLogLn('        L3: ipv4.send');  
+    inc(CurrentID);
+    Header.version:= 4;
+    Header.header_len:= 5;
+    Header.ToS:= 0;
+    Len:= 20 + p_len;
+    Header.total_len_Hi:= Len SHR 8;
+    Header.total_len_Lo:= Len AND $FF;
+    Header.identifier_Hi:= CurrentID SHR 8;
+    Header.identifier_Lo:= CurrentID AND $FF;
+    Header.Flags:= 0;
+    Header.Fragment_Off:= 0;
+    Header.TTL:= p_context^.TTL;
+    Header.Protocol:= p_context^.Protocol.L4 AND $FF;
+    Header.HDR_CHK_Hi:= 0;
+    Header.HDR_CHK_Lo:= 0;
+    CopyIPv4(@getIPv4Config^.Address[0], @Header.Src[0]);
+    CopyIPv4(@p_context^.IP.Destination[0], @Header.Dst[0]);
+    Header.Options:= 0;
+    Header.Padding:= 0;
+    CHK:= calculateChecksum(puint16(@Header), sizeof(TIPV4Header));
+    Header.HDR_CHK_Hi:= CHK SHR 8;
+    Header.HDR_CHK_Lo:= CHK AND $FF;
+    Buffer:= kalloc(Len);
+    memcpy(uint32(@Header), uint32(Buffer), Header.header_len * 4);
+    memcpy(uint32(p_data), uint32(Buffer) + (Header.header_len * 4), p_len);
+    eth2.send(Buffer, (Header.header_len * 4) + p_len, $0800, p_context);
+    kfree(Buffer);
+end;
+
 procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
 var
     Header  : PIPV4Header;
diff --git a/src/driver/netdev/E1000.pas b/src/driver/netdev/E1000.pas
index 9a0758a1..5a7e5d69 100644
--- a/src/driver/netdev/E1000.pas
+++ b/src/driver/netdev/E1000.pas
@@ -556,7 +556,6 @@ begin
         net.registerNetworkCard(@sendPacket, getMACAddress());
 
         isrmanager.registerISR(32 + PCI_Info^.interrupt_line, @fire);
-        //IDT.set_gate(32 + PCI_Info^.interrupt_line, uint32(@fire), $08, ISR_RING_0);
         enableInturrupt();
 
         rxinit();
diff --git a/src/include/asuro.pas b/src/include/asuro.pas
index f599707c..7ee679a3 100644
--- a/src/include/asuro.pas
+++ b/src/include/asuro.pas
@@ -3,20 +3,20 @@ unit asuro;
 interface
  
 const
-     VERSION       = '1.0.1-677ia';
+     VERSION       = '1.0.1-726ia';
      VERSION_MAJOR = '1';
      VERSION_MINOR = '0';
      VERSION_SUB   = '1';
-     REVISION      = '677';
+     REVISION      = '726';
      RELEASE       = 'ia';
-     LINE_COUNT    = 28115;
+     LINE_COUNT    = 28185;
      FILE_COUNT    = 90;
      DRIVER_COUNT  = 32;
      FPC_VERSION   = '2.6.4';
      NASM_VERSION  = '2.10.09';
      MAKE_VERSION  = '3.81';
      COMPILE_DATE  = '12/05/18';
-     COMPILE_TIME  = '11:08:14';
+     COMPILE_TIME  = '16:05:29';
  
 implementation