diff --git a/src/about.md b/src/about.md
index a7a78c3375184a8955addde149ea33f9f0840e48..a0fe7566c128ae772250ee34cfbca3dc00fc210c 100644
--- a/src/about.md
+++ b/src/about.md
@@ -22,14 +22,17 @@ Routerul nostru va funcționa cu o tabelă de rutare statică, primită într-un
 fișier de intrare, și care nu se va schimba pe parcursul rulării.
 
 Un router are mai multe interfețe și poate recepționa pachete pe oricare dintre
-acestea. Routerul trebuie să transmită pachetul mai departe, către un calculator
-sau către alt router direct conectat, în funcție de regulile din tabela de
-rutare.
+acestea. Routerul trebuie să transmită pachetul mai departe, către un
+calculator sau către alt router direct conectat, în funcție de regulile din
+tabela de rutare.
 
-**Tema poate fi implementată În C sau C++**.
+**Tema poate fi implementată În C sau C++.**.
 
 ## Lectură tema
 
+Tema presupune cunoștințele dobândite la curs. Vă recomandăm parcurgerea
+următoarei bibliografii Înainte de a vă apuca de temă.
+
 - [The Internet Protocol (9 min)](https://www.youtube.com/watch?v=rPoalUa4m8E&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=8)
 - [ARP: Mapping between IP and Ethernet (10 min)](https://www.youtube.com/watch?v=aamG4-tH_m8&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=9)
 - [Looking at ARP and ping packets (8 min)](https://www.youtube.com/watch?v=xNbdeyEI-nE&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW&index=12)
@@ -50,7 +53,7 @@ Edition)](https://eclass.teicrete.gr/modules/document/file.php/TP326/%CE%98%CE%B
 Deadline-ul temei este specificat pe moodle.
 
 Vă reamintim părțile relevante din [regulamentul cursului de
-PCom](https://curs.upb.ro/2023/pluginfile.php/270568/mod_resource/content/1/Regulament_PC_2023_2024.pdf):
+PCom](https://curs.upb.ro/2024/pluginfile.php/294288/mod_resource/content/3/Regulament_PC_2024_2025.pdf):
 
 -   După expirarea acestui termen limită se mai pot trimite teme un
     interval de maxim 3 zile, cu următoarele depunctări: 10p În prima
@@ -83,6 +86,8 @@ sudo apt install mininet openvswitch-testcontroller tshark python3-click python3
 sudo pip3 install mininet
 ```
 
+> Verificați să aveți instalat `tshark`. 
+
 După ce am instalat Mininet, vom folosi următoarea comandă pentru a crește
 dimensiunea fontului ĂŽn terminalele pe care le vom deschide.
 
diff --git a/src/api.md b/src/api.md
index bc814d6b6c566449ea42deaa04af244baefa676d..15a64a35acb6a75a1a408503fb5f2b6c66971929 100644
--- a/src/api.md
+++ b/src/api.md
@@ -18,12 +18,12 @@ precum și unele funcții ajutătoare a căror utilizare este opțională. În
 
        Returnează interfața pe care cadrul a fost primit. Funcția este blocantă.
      */
-    int recv_from_any_link(char *frame_data, size_t *length);
+    size_t recv_from_any_link(char *frame_data, size_t *length);
 
     /* Trimite frame_data ca payload al unui cadru Ethernet L2.
        Link-ul pe care îl va trimite este identificat de interfață.
      */
-    int send_to_link(int interface, char *frame_data, int length);
+    int send_to_link(size_t length, char *frame_data, size_t interface);
     ```
 
     > Pentru a primi punctajul pe temă, trebuie să folosiți acest API de send/recv
@@ -84,7 +84,7 @@ precum și unele funcții ajutătoare a căror utilizare este opțională. În
 -   **Determinarea MAC interfață proprie:** pentru a determina adresa
     MAC a unei interfețe a routerului, folosiți funcția:
     ```c
-    void get_interface_mac(int interface, uint8_t *mac);
+    void get_interface_mac(size_t interface, uint8_t *mac);
     ```
 
     Argumentul `mac` trebuie să indice către o zonă de memorie cu cel puțin șase
diff --git a/src/arp.md b/src/arp.md
index 4c8f61dc1bc02470296a5f2267f729f27b0ae4c0..3f8dd9031b1325b8f67b863273423bc15a09d273 100644
--- a/src/arp.md
+++ b/src/arp.md
@@ -3,8 +3,7 @@
 După ce un router a determinat următorul hop pentru un pachet folosind LPM,
 trebuie să-l trimită mai departe, Încapsulându-l Într-un cadru cu adresa MAC
 destinație setată ca cea a următorului hop. Cum știe routerul această adresă?
-
-ta opțiune este ca această să fie reținută static, într-un tabel.
+O opțiune ar fi ca această să fie reținută static, într-un tabel.
 
 În realitate, însă, din mai multe motive (e.g. flexibilitate), routerul
 *nu știe* aceste adrese, ci trebuie să le determine folosind protocolul
@@ -40,20 +39,21 @@ Antetul protocolului ARP este următorul:
 +--------+--------+--------+--------+
 ```
 
-Următoarea structura poate fi folosită pentru a reprezenta acest header În C:
+Vom folosi urmatoarea structura pentru a reprezenta acest header ĂŽn C:
 
 ```C
+// include/protocols.h
 /* Ethernet ARP packet from RFC 826 */
-struct arp_header {
-    uint16_t htype;   /* Format of hardware address. */
-    uint16_t ptype;   /* Format of protocol address. */
-    uint8_t hlen;    /* Dimensiunea adrese hardware 6 bytes pentru MAC */
-    uint8_t plen;    /* Dimensiunea adresei protocolului (IPV4). 4 bytes petnru IP */
-    uint16_t op;    /* ARP opcode */
-    uint8_t sha[6];  /* Adresa hardware (MAC) sender */
-    uint32_t spa;   /* Adresa IP sender */
-    uint8_t tha[6];  /* Adresa hardware target */
-    uint32_t tpa;   /* Adresa IP target */
+struct arp_hdr {
+	uint16_t hw_type;   /* Format of hardware address */
+	uint16_t proto_type;   /* Format of protocol address */
+	uint8_t hw_len;    /* Length of hardware address */
+	uint8_t proto_len;    /* Length of protocol address */
+	uint16_t opcode;    /* ARP opcode (command) */
+	uint8_t shwa[6];  /* Sender hardware address */
+	uint32_t sprotoa;   /* Sender IP address */
+	uint8_t thwa[6];  /* Target hardware address */
+	uint32_t tprotoa;   /* Target IP address */
 } __attribute__((packed));
 ```
 
diff --git a/src/ethernet.md b/src/ethernet.md
index 055d58e1853862c063e6ecf1935d94d39418f16c..476d9df1ca0473f3e9f9f7f05369ec1f01ab8151 100644
--- a/src/ethernet.md
+++ b/src/ethernet.md
@@ -17,15 +17,15 @@ Ethernet L2 Frame Header
 Adresa MAC Destinație reprezintă identificatorul dispozitivului de nivel 2 către
 care a fost trimis acest cadru.
 
-În cadrul laboratorului puteți folosi următoarea structura pentru un
+În cadrul temei vom folosi următoarea structura pentru un
 cadru Ethernet.
 
 ```C
-struct  ether_header {
-    uint8_t  ether_dhost[6];    // MAC destinație
-    uint8_t  ether_shost[6];    // MAC sursă
-    uint16_t ether_type;        // folosit pentru a specifica protocolul de nivel
-                                // superior care este encapsulat ĂŽn Ethernet
+// include/protocols.h
+struct  ether_hdr {
+    uint8_t  ethr_dhost[6]; //adresa mac destinatie
+    uint8_t  ethr_shost[6]; //adresa mac sursa
+    uint16_t ethr_type;     // identificator protocol encapsulat
 };
 ```
 
diff --git a/src/faq.md b/src/faq.md
index 299c3b39c5e1c2336e20d10e9922f0bafc08ce66..dff7599f4bf047d4832b83538d24164a7e3abbec 100644
--- a/src/faq.md
+++ b/src/faq.md
@@ -1,5 +1,9 @@
 # FAQ & probleme
 
+-   **Q:** Pachetele sunt aruncate de host-ul destinatie.
+
+    **A:** Trebuie sa verificati cu Wireshark trei lucruri: MAC Destinatie, IP Destinatie si checksums.
+
 -   **Q:** Pe local am mai multe puncte decât pe checkerul online
 
     **A:**
@@ -12,6 +16,18 @@
     * Aveți undefined behaviour care este vizibil doar pe checker. În acest caz ar trebui să folosiți valgrind și address sanitization pentru a îl detecta
     * Ați uitat să includeți tabela ARP statică în arhivă în cazul în care o folosiți
 
+-  **Q:** Primesc eroare `No such file or directory: 'hosts_output/router_arp_reply/router0.pcap'`
+
+    **A:** Nu aveti instalat `tshark`.
+
+-  **Q:** Nu ruleaza checker-ul pe moodle.
+
+   **A:** Arhiva trebuie sa aiba formatul .zip, iar in root-ul arhivei sa fie solutia temei.
+
+-  **Q:** Unele teste au la host uri PASS când mă uit în Output dar îmi dă failed când rulez checkerul.Iar la alte teste 3 hosturi au PASS și unul are FAILED.
+
+   **A:** Fișierele *-host-err din folderele de test arată ce a funcționat greșit la un test. Spre exemplu, pentru forward20 (care testează trimiterea unor pachete de la host2 la host0), host1 și host3 nu ar trebui să primească nimic. Dacă nu primesc nimic, atunci este PASS din partea lor. În schimb, dacă host1 primește pachetele trimise de host2 în locul lui host0, o să ai PASS pentru host3 (nu trebuia să primească nimic, nu a primit nimic), PASS pentru host2 (trebuia să trimită și a trimis), FAIL pentru host0 (trebuia să primească dar nu a primit) și FAIL pentru host1 (nu trebuia să primească nimic dar a primit).
+
 -   **Q:** Cum pornesc mai mult de un terminal?
 
     **A:** rulați în background.
@@ -154,6 +170,10 @@
     o interfață și-i întoarce adresa MAC. Interfața pe care a venit
     pachetul trebuie extrasă din structura `msg`.
 
+-   **Q:** Ce nume trebuie sa aiba arhiva?
+    
+    **A:** La prima tema numele arhivei nu conteaza.
+
 -   **Q:** La testul "timeout is unreachable" primesc următoarea eroare:
 
         File "./checker.py", line 38, ĂŽn passive
@@ -180,3 +200,8 @@
 
         raise Exception( 'Could not find a default OpenFlow controller' )
 
+-   **Q:** Pe moodle vad eroarea urmatoare: Error setting resource limits. Mininet's performance may be affected.
+
+    **A:** Este ok, nu este o eroare, mai mult un warning de la faptul ca checker-ul ruleaza intr-un container.
+    
+
diff --git a/src/icmp.md b/src/icmp.md
index aeb233bfeae48058e328c5d348d956f1401ad4ff..59796f00b690fadc667c6719dc322d4dcb93253a 100644
--- a/src/icmp.md
+++ b/src/icmp.md
@@ -69,29 +69,28 @@ header-ul IP al pachetului aruncat și 64 de biți din datele cărate de IP,
 > Pentru a înțelege mai bine funcționalitatea, vă recomandăm să urmăriți cu Wireshark răspunsurile routerului din casă.
 De exemplu, daca rulăm `ping -c 1  -t 1 8.8.8.8` de pe calculatorul nostru, vom putea observa raspunsul de tip `Time Exceeded Message` trimis de către router.
 
-Putem folosi următoarea structura pentru a reprezenta header-ul ICMP:
+**Vom folosi următoarea structura pentru a reprezenta header-ul ICMP**:
 
-```c
-
-struct icmphdr
+```C
+struct icmp_hdr
 {
-  uint8_t type;                /* message type */
-  uint8_t code;                /* type sub-code */
-  uint16_t checksum;           /* checksum header */
+  uint8_t mtype;                /* message type */
+  uint8_t mcode;                /* type sub-code */
+  uint16_t check;               /* checksum */
   union
   {
     struct
     {
       uint16_t        id;
-      uint16_t        sequence;     
-    } echo;                        /* echo datagram. Vom folosi doar acest câmp din union */
-    uint32_t        gateway;        /* Nu este relevant pentru tema */
+      uint16_t        seq;
+    } echo_t;                        /* echo datagram.  Vom folosi doar acest câmp din union*/
+    uint32_t        gateway_addr;        /* Gateway address. Nu este relevant pentru tema */
     struct
     {
       uint16_t        __unused;
       uint16_t        mtu;
-    } frag;                        /* Nu este relevant pentru tema */
-  } un;
+    } frag_t;                        /* Nu este relevant pentru tema */
+  } un_t;
 };
 ```
 
diff --git a/src/ip.md b/src/ip.md
index c54ecd82bedbe35731779ddddafb262518857912..b48406cac3bab6d32e0ab44b2c6075facc9aecf1 100644
--- a/src/ip.md
+++ b/src/ip.md
@@ -28,34 +28,32 @@ Header-ul unui pachet (packet) IP este următorul:
 Următoarea strucură poate fi folosită pentru a reprezenta un pachet IPV4.
 
 ```C
-struct iphdr {
-    // version este pe 4 biți, ihl este pe 4 biți
-    uint8_t    version:4,
-               ihl:4;     // Nu vom implementa protocolul IP cu opțiuni,
-                          // așa că 5 × 32 bits = 160 bits = 20 bytes
-                          // (internet header length)
+// include/protocols.h
+struct ip_hdr {
+    // this means that version uses 4 bits, and ihl 4 bits
+    uint8_t    ihl:4, ver:4;   // we use version = 4
     uint8_t    tos;         // Nu este relevant pentru temă (set pe 0)
-    uint16_t   tot_len;     // dimensiunea totală a header + date
-    uint16_t   id;          // Nu este relevant pentru temă, (set pe 1)
-    uint16_t   frag_off;    // Nu este relevant pentru temă, (set pe 0)
-    uint8_t    ttl;         // Time to live
-    uint8_t    protocol;    // Identificator al protocolului encapsulat (e.g. ICMP)
-    uint16_t   check;       // checksum of the iphdr, we checksum = 0 when computing
-    uint32_t   saddr;       // Adresa IP sursă
-    uint32_t   daddr;       // Adresa IP destinație
+    uint16_t   tot_len;     // total length = ipheader + data
+    uint16_t   id;          // Nu este relevant pentru temă, (set pe 4)
+    uint16_t   frag;        // Nu este relevant pentru temă, (set pe 0)
+    uint8_t    ttl;         // Time to Live -> to avoid loops, we will decrement
+    uint8_t    proto;       // Identificator al protocolului encapsulat (e.g. ICMP)
+    uint16_t   checksum;    // checksum     -> Since we modify TTL,
+    uint32_t   source_addr; // Adresa IP sursă  
+    uint32_t   dest_addr;   // Adresa IP destinație
 };
 ```
 
 **Nu suntem interesați de anumite funcționalități din IP precum fragmentarea**.
 Astfel, în cazul în care construiți un pachet IP de la 0,
-vom seta următoarele:
+vom seta **obligatoriu** următoarele:
 
 ```
 tos = 0
 frag_off = 0
 version = 4
 ihl = 5
-id = 1
+id = 4
 ```
 
 În [RFC 990 pagina 24](https://www.rfc-editor.org/rfc/rfc990) gășiți o listă de identificatori pentru diversele