Index: uspace/lib/nic/src/nic_driver.c
===================================================================
--- uspace/lib/nic/src/nic_driver.c	(revision fbcdeb887f643e4a875e51120a2ddbf6fe35e4b3)
+++ uspace/lib/nic/src/nic_driver.c	(revision 89b6a3bee8770a7ec407637aafd09a52976a5fb2)
@@ -114,6 +114,6 @@
 		if (!iface->set_state)
 			iface->set_state = nic_set_state_impl;
-		if (!iface->send_message)
-			iface->send_message = nic_send_message_impl;
+		if (!iface->send_frame)
+			iface->send_frame = nic_send_frame_impl;
 		if (!iface->connect_to_nil)
 			iface->connect_to_nil = nic_connect_to_nil_impl;
@@ -168,9 +168,9 @@
  *
  * @param nic_data
- * @param wpfunc		Function handling the write_packet request
- */
-void nic_set_write_packet_handler(nic_t *nic_data, write_packet_handler wpfunc)
-{
-	nic_data->write_packet = wpfunc;
+ * @param sffunc	Function handling the send_frame request
+ */
+void nic_set_send_frame_handler(nic_t *nic_data, send_frame_handler sffunc)
+{
+	nic_data->send_frame = sffunc;
 }
 
@@ -765,5 +765,5 @@
 	nic_data->poll_mode = NIC_POLL_IMMEDIATE;
 	nic_data->default_poll_mode = NIC_POLL_IMMEDIATE;
-	nic_data->write_packet = NULL;
+	nic_data->send_frame = NULL;
 	nic_data->on_activating = NULL;
 	nic_data->on_going_down = NULL;
Index: uspace/lib/nic/src/nic_impl.c
===================================================================
--- uspace/lib/nic/src/nic_impl.c	(revision fbcdeb887f643e4a875e51120a2ddbf6fe35e4b3)
+++ uspace/lib/nic/src/nic_impl.c	(revision 89b6a3bee8770a7ec407637aafd09a52976a5fb2)
@@ -39,6 +39,4 @@
 #include <ipc/services.h>
 #include <ns.h>
-#include <packet_client.h>
-#include <packet_remote.h>
 #include "nic_driver.h"
 #include "nic_impl.h"
@@ -159,46 +157,25 @@
 
 /**
- * Default implementation of the send_message method.
+ * Default implementation of the send_frame method.
  * Send messages to the network.
  *
  * @param	fun
- * @param	packet_id	ID of the first packet in a queue of sent packets
+ * @param	data	Frame data
+ * @param 	size	Frame size in bytes
  *
  * @return EOK		If the message was sent
- * @return EBUSY	If the device is not in state when the packet can be set.
- * @return EINVAL	If the packet ID is invalid
- */
-int nic_send_message_impl(ddf_fun_t *fun, packet_id_t packet_id)
-{
-	nic_t *nic_data = (nic_t *) fun->driver_data;
-	packet_t *packet, *next;
+ * @return EBUSY	If the device is not in state when the frame can be sent.
+ */
+int nic_send_frame_impl(ddf_fun_t *fun, void *data, size_t size)
+{
+	nic_t *nic_data = (nic_t *) fun->driver_data;
 
 	fibril_rwlock_read_lock(&nic_data->main_lock);
 	if (nic_data->state != NIC_STATE_ACTIVE || nic_data->tx_busy) {
 		fibril_rwlock_read_unlock(&nic_data->main_lock);
-		pq_release_remote(nic_data->net_session, packet_id);
 		return EBUSY;
 	}
 
-	int rc = packet_translate_remote(nic_data->net_session, &packet, packet_id);
-
-	if (rc != EOK) {
-		fibril_rwlock_read_unlock(&nic_data->main_lock);
-		return EINVAL;
-	}
-
-	/*
-	 * Process the packet queue. Each sent packet must be detached from the
-	 * queue and destroyed. This is why the cycle differs from loopback's
-	 * cycle, where the packets are immediately used in upper layers and
-	 * therefore they must not be destroyed (released).
-	 */
-	assert(nic_data->write_packet != NULL);
-	do {
-		next = pq_detach(packet);
-		nic_data->write_packet(nic_data, packet);
-		packet = next;
-	} while (packet);
-	fibril_rwlock_read_unlock(&nic_data->main_lock);
+	nic_data->send_frame(nic_data, data, size);
 	return EOK;
 }
