diff --git a/cores/arduino/USB/CDC.cpp b/cores/arduino/USB/CDC.cpp
index 5a111dce9ba042b29acc429a469406a5040d80ec..4aa8071a4447ce1d82843595dd4a9c82d7534820 100644
--- a/cores/arduino/USB/CDC.cpp
+++ b/cores/arduino/USB/CDC.cpp
@@ -202,6 +202,13 @@ int Serial_::available(void)
 	return (uint32_t)(CDC_SERIAL_BUFFER_SIZE + buffer->head - buffer->tail) % CDC_SERIAL_BUFFER_SIZE;
 }
 
+int Serial_::availableForWrite(void)
+{
+	// return the number of bytes left in the current bank,
+	// always EP size - 1, because bank is flushed on every write
+	return (EPX_SIZE - 1);
+}
+
 int Serial_::peek(void)
 {
 	ring_buffer *buffer = &cdc_rx_buffer;
diff --git a/cores/arduino/USB/USBAPI.h b/cores/arduino/USB/USBAPI.h
index 1de82660882fabfc5edaab5f869b69be10c629c2..716edbfd529900c8d390f7e07bf9b31068a86f04 100644
--- a/cores/arduino/USB/USBAPI.h
+++ b/cores/arduino/USB/USBAPI.h
@@ -118,6 +118,7 @@ public:
 	void end(void);
 
 	virtual int available(void);
+	virtual int availableForWrite(void);
 	virtual void accept(void);
 	virtual int peek(void);
 	virtual int read(void);