diff --git a/cores/esp8266/Udp.h b/cores/esp8266/Udp.h
index 8223c098ab..ba2d5e3715 100644
--- a/cores/esp8266/Udp.h
+++ b/cores/esp8266/Udp.h
@@ -41,6 +41,7 @@
 class UDP: public Stream {
 
     public:
+        virtual ~UDP() {};
         virtual uint8_t begin(uint16_t) =0;	// initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use
         virtual void stop() =0;  // Finish with the UDP socket
 
diff --git a/libraries/ESP8266WiFi/src/WiFiUdp.h b/libraries/ESP8266WiFi/src/WiFiUdp.h
index b336a47480..fb205513c5 100644
--- a/libraries/ESP8266WiFi/src/WiFiUdp.h
+++ b/libraries/ESP8266WiFi/src/WiFiUdp.h
@@ -37,15 +37,15 @@ class WiFiUDP : public UDP, public SList<WiFiUDP> {
   WiFiUDP();  // Constructor
   WiFiUDP(const WiFiUDP& other);
   WiFiUDP& operator=(const WiFiUDP& rhs);
-  ~WiFiUDP();
+  virtual ~WiFiUDP();
 
   operator bool() const { return _ctx != 0; }
 
   // initialize, start listening on specified port. 
   // Returns 1 if successful, 0 if there are no sockets available to use
-  virtual uint8_t begin(uint16_t port);	
+  uint8_t begin(uint16_t port) override;
   // Finish with the UDP connetion
-  virtual void stop();
+  void stop() override;
   // join a multicast group and listen on the given port
   uint8_t beginMulticast(IPAddress interfaceAddr, IPAddress multicast, uint16_t port);
 
@@ -53,10 +53,10 @@ class WiFiUDP : public UDP, public SList<WiFiUDP> {
   
   // Start building up a packet to send to the remote host specific in ip and port
   // Returns 1 if successful, 0 if there was a problem with the supplied IP address or port
-  virtual int beginPacket(IPAddress ip, uint16_t port);
+  int beginPacket(IPAddress ip, uint16_t port) override;
   // Start building up a packet to send to the remote host specific in host and port
   // Returns 1 if successful, 0 if there was a problem resolving the hostname or port
-  virtual int beginPacket(const char *host, uint16_t port);
+  int beginPacket(const char *host, uint16_t port) override;
   // Start building up a packet to send to the multicast address
   // multicastAddress - muticast address to send to
   // interfaceAddress - the local IP address of the interface that should be used
@@ -69,35 +69,35 @@ class WiFiUDP : public UDP, public SList<WiFiUDP> {
                                    int ttl = 1);
   // Finish off this packet and send it
   // Returns 1 if the packet was sent successfully, 0 if there was an error
-  virtual int endPacket();
+  int endPacket() override;
   // Write a single byte into the packet
-  virtual size_t write(uint8_t);
+  size_t write(uint8_t) override;
   // Write size bytes from buffer into the packet
-  virtual size_t write(const uint8_t *buffer, size_t size);
+  size_t write(const uint8_t *buffer, size_t size) override;
   
   using Print::write;
 
   // Start processing the next available incoming packet
   // Returns the size of the packet in bytes, or 0 if no packets are available
-  virtual int parsePacket();
+  int parsePacket() override;
   // Number of bytes remaining in the current packet
-  virtual int available();
+  int available() override;
   // Read a single byte from the current packet
-  virtual int read();
+  int read() override;
   // Read up to len bytes from the current packet and place them into buffer
   // Returns the number of bytes read, or 0 if none are available
-  virtual int read(unsigned char* buffer, size_t len);
+  int read(unsigned char* buffer, size_t len) override;
   // Read up to len characters from the current packet and place them into buffer
   // Returns the number of characters read, or 0 if none are available
-  virtual int read(char* buffer, size_t len) { return read((unsigned char*)buffer, len); };
+  int read(char* buffer, size_t len) override { return read((unsigned char*)buffer, len); };
   // Return the next byte from the current packet without moving on to the next byte
-  virtual int peek();
-  virtual void flush();	// Finish reading the current packet
+  int peek() override;
+  void flush() override;	// Finish reading the current packet
 
   // Return the IP address of the host who sent the current incoming packet
-  virtual IPAddress remoteIP() const;
+  IPAddress remoteIP() const override;
   // Return the port of the host who sent the current incoming packet
-  virtual uint16_t remotePort() const;
+  uint16_t remotePort() const override;
   // Return the destination address for incoming packets,
   // useful to distinguish multicast and ordinary packets
   IPAddress destinationIP() const;