diff --git a/docs/library/machine.HeartBeat.rst b/docs/library/machine.HeartBeat.rst
deleted file mode 100644
index 033d7311fbaee69c3725ca8940a81f447a52d381..0000000000000000000000000000000000000000
--- a/docs/library/machine.HeartBeat.rst
+++ /dev/null
@@ -1,47 +0,0 @@
-.. _machine.HeartBeat:
-
-class HeartBeat -- heart beat LED
-=================================
-
-The HeartBeat class controls the heart beat led which by default
-flashes once every 5s. The user can disable the HeartBeat and then
-is free to control this LED manually through GP25 using the Pin
-class. The GP25 can also be remapped as a PWM output, an this
-can be used to control the light intesity of the heart beat LED.
-
-Example usage::
-
-    hb = machine.HeartBeat()
-    hb.disable()    # disable the heart beat
-    hb.enable()     # enable the heart beat
-
-Constructors
-------------
-
-.. class:: machine.HeartBeat()
-
-   Create a HeartBeat object.
-
-Methods
--------
-
-.. method:: heartbeat.enable()
-
-   Enable the heart beat. The LED will flash once every 5 seconds.
-
-.. method:: heartbeat.disable()
-
-   Disable the heart beat. The LED can then be controlled manually.
-
-   Example::
-   
-      from machine import HeartBeat
-      from machine import Pin
-   
-      # disable the heart beat
-      HeartBeat().disable()
-      # init GP25 as output
-      led = Pin('GP25', mode=Pin.OUT)
-      # toggle the led
-      led.toggle()
-      ...
diff --git a/docs/library/machine.Pin.rst b/docs/library/machine.Pin.rst
index f7b783c19120c8d4d7e0fe32cdd2854f91a4ca6f..452e2234e3c1aab46baa36931c124f00ccb6442a 100644
--- a/docs/library/machine.Pin.rst
+++ b/docs/library/machine.Pin.rst
@@ -13,15 +13,18 @@ Usage Model:
 
     Board pins are identified by their string id::
 
-        g = machine.Pin('GP9', mode=machine.Pin.OUT, pull=None, drive=machine.Pin.MED_POWER, alt=-1)
+        from machine import Pin
+        g = machine.Pin('GP9', mode=Pin.OUT, pull=None, drive=Pin.MED_POWER, alt=-1)
 
     You can also configure the Pin to generate interrupts. For instance::
 
+        from machine import Pin
+
         def pincb(pin):
             print(pin.id())
 
-        pin_int = machine.Pin('GP10', mode=Pin.IN, pull=machine.Pin.PULL_DOWN)
-        pin_int.irq(mode=machine.Pin.IRQ_RISING, handler=pincb)
+        pin_int = Pin('GP10', mode=Pin.IN, pull=Pin.PULL_DOWN)
+        pin_int.irq(mode=Pin.IRQ_RISING, handler=pincb)
         # the callback can be triggered manually
         pin_int.irq()()
         # to disable the callback
diff --git a/docs/library/machine.SD.rst b/docs/library/machine.SD.rst
index 19d8d655bdfc779eaa3588af15bab0fa512e94c4..da60121d07c1e5db31b1a910abdb7091ae19d834 100644
--- a/docs/library/machine.SD.rst
+++ b/docs/library/machine.SD.rst
@@ -26,16 +26,15 @@ Constructors
 
 .. class:: machine.SD(id,... )
 
-   Create a SD card object. See init for parameters if initialization. 
+   Create a SD card object. See ``init()`` for parameters if initialization. 
 
 Methods
 -------
 
-.. method:: sd.init(id, pins=('GP10', 'GP11', 'GP15'))
+.. method:: sd.init(id=0, pins=('GP10', 'GP11', 'GP15'))
 
-   Enable the SD card.
-   In order to initalize the card, give it a 3-tuple ``(clk_pin, cmd_pin, dat0_pin)``
-   ID defaults to zero.
+   Enable the SD card. In order to initalize the card, give it a 3-tuple:
+   ``(clk_pin, cmd_pin, dat0_pin)``.
 
 .. method:: sd.deinit()
 
diff --git a/docs/library/machine.Timer.rst b/docs/library/machine.Timer.rst
index 4814da8603897372c027d100cf59f9d7b9168caa..5d357ca0790ed0e4da768ca040d7e83ff6c6cf2c 100644
--- a/docs/library/machine.Timer.rst
+++ b/docs/library/machine.Timer.rst
@@ -19,13 +19,15 @@ class Timer -- control internal timers
 
     Example usage to toggle an LED at a fixed frequency::
 
-        tim = machine.Timer(4)                                              # create a timer object using timer 4
-        tim.init(mode=Timer.PERIODIC)                                   # initialize it in periodic mode
-        tim_ch = tim.channel(Timer.A, freq=2)                           # configure channel A at a frequency of 2Hz
-        tim_ch.callback(handler=lambda t:led.toggle())                  # toggle a LED on every cycle of the timer
+        from machine import Timer
+        tim = Timer(4)                                   # create a timer object using timer 4
+        tim.init(mode=Timer.PERIODIC)                    # initialize it in periodic mode
+        tim_ch = tim.channel(Timer.A, freq=2)            # configure channel A at a frequency of 2Hz
+        tim_ch.callback(handler=lambda t:led.toggle())   # toggle a LED on every cycle of the timer
 
     Example using named function for the callback::
 
+        from machine import Timer
         tim = Timer(1, mode=Timer.PERIODIC)
         tim_a = tim.channel(Timer.A, freq=1000)
 
@@ -39,8 +41,9 @@ class Timer -- control internal timers
 
     Further examples::
 
-        tim1 = machine.Timer(2, mode=Timer.EVENT_COUNT)                     # initialize it capture mode
-        tim2 = machine.Timer(1, mode=Timer.PWM)                             # initialize it in PWM mode
+        from machine import Timer
+        tim1 = Timer(2, mode=Timer.EVENT_COUNT)                         # initialize it capture mode
+        tim2 = Timer(1, mode=Timer.PWM)                                 # initialize it in PWM mode
         tim_ch = tim1.channel(Timer.A, freq=1, polarity=Timer.POSITIVE) # start the event counter with a frequency of 1Hz and triggered by positive edges
         tim_ch = tim2.channel(Timer.B, freq=10000, duty_cycle=50)       # start the PWM on channel B with a 50% duty cycle
         tim_ch.time()                                                   # get the current time in usec (can also be set)
@@ -54,8 +57,8 @@ class Timer -- control internal timers
 
 .. note::
 
-    Memory can't be allocated during a callback (an interrupt) and so
-    exceptions raised within a callback don't give much information.  See
+    Memory can't be allocated inside irq handlers (an interrupt) and so
+    exceptions raised within a handler don't give much information.  See
     :func:`micropython.alloc_emergency_exception_buf` for how to get around this
     limitation.
 
diff --git a/docs/library/machine.UART.rst b/docs/library/machine.UART.rst
index 034492717c68575dbd3f9ca0adfc22c4f08a1e2b..732b30788ddede634ef88da676a489236576f127 100644
--- a/docs/library/machine.UART.rst
+++ b/docs/library/machine.UART.rst
@@ -155,7 +155,7 @@ Methods
           This means that when the handler function is called there will be between 1 to 8 
           characters waiting.
 
-       Returns a irq object.
+       Returns an irq object.
 
 Constants
 ---------
diff --git a/docs/library/machine.WDT.rst b/docs/library/machine.WDT.rst
index 9ce0a96ac37f4418251cd0db3f07ecb4f2312ee0..dca74f70f60849a073fbe5311726028ffc84c0c6 100644
--- a/docs/library/machine.WDT.rst
+++ b/docs/library/machine.WDT.rst
@@ -10,7 +10,8 @@ watchdog periodically to prevent it from expiring and resetting the system.
 
 Example usage::
 
-    wdt = machine.WDT(timeout=2000) # enable with a timeout of 2s
+    from machine import WDT
+    wdt = WDT(timeout=2000)  # enable it with a timeout of 2s
     wdt.feed()
 
 Constructors
diff --git a/docs/library/machine.rst b/docs/library/machine.rst
index f94454359b5651cc1eeafba0b7eb7c99edb2e6ef..c78b7c1b67262aa1eb5630ebee3c50da53158611 100644
--- a/docs/library/machine.rst
+++ b/docs/library/machine.rst
@@ -121,7 +121,6 @@ Classes
    :maxdepth: 1
 
    machine.ADC.rst
-   machine.HeartBeat.rst
    machine.I2C.rst
    machine.Pin.rst
    machine.RTC.rst
diff --git a/docs/library/network.rst b/docs/library/network.rst
index 0b9acf6423483666d5b84e52235c59f80cd14867..8522ee294886bf0e4c14a786725bc4f87f176020 100644
--- a/docs/library/network.rst
+++ b/docs/library/network.rst
@@ -34,6 +34,10 @@ For example::
     class server
     ============
 
+    The server class controls the behaviour and the configuration of the FTP and telnet
+    services running on the WiPy. Any changes performed using this class' methods will
+    affect both.
+
     Constructors
     ------------
 
diff --git a/docs/library/ussl.rst b/docs/library/ussl.rst
index 9e97fac5021014b7680a8b9912c911f32f60aa8e..ce9fd01e2796522a2cce2da28a23c8ad03a5f2d8 100644
--- a/docs/library/ussl.rst
+++ b/docs/library/ussl.rst
@@ -31,6 +31,11 @@ Functions
    - The certificate to authenticate ourselves goes in: **'/flash/cert/cert.pem'**
    - The key for our own certificate goes in: **'/flash/cert/private.key'**
 
+   .. note::
+
+      When these files are stored, they are placed inside the internal **hidden** file system
+      (just like firmware updates), and therefore they are never visible.
+
    For instance to connect to the Blynk servers using certificates, take the file ``ca.pem`` located
    in the `blynk examples folder <https://github.com/wipy/wipy/tree/master/examples/blynk>`_ 
    and put it in '/flash/cert/'. Then do::
diff --git a/docs/wipy/general.rst b/docs/wipy/general.rst
index e52fcc9266d163ad2fe159e01cdc012b6078d5ff..caee24a09e39200ec7ba21a664f8bf5bf82975c5 100644
--- a/docs/wipy/general.rst
+++ b/docs/wipy/general.rst
@@ -18,11 +18,9 @@ Before applying power
 
    The GPIO pins of the WiPy are NOT 5V tolerant, connecting them to voltages higer
    than 3.6V will cause irreparable damage to the board. ADC pins, when configured 
-   in analog mode cannot withstand volatges above 1.8V. Keep these considerations in
+   in analog mode cannot withstand voltages above 1.8V. Keep these considerations in
    mind when wiring your electronics.
 
-
-
 WLAN default behaviour
 ----------------------
 
@@ -33,29 +31,43 @@ to gain access to the interactive prompt, open a telnet session to that IP addre
 the default port (23). You will be asked for credentials:
 ``login: micro`` and ``password: python``
 
-Local file system and SD card
------------------------------
+Telnet REPL
+-----------
+
+Linux stock telnet works like a charm (also on OSX), but other tools like putty
+work quite too. The default credentials are: **user:** ``micro``, **password:** ``python``.
+See :ref:`network.server <network.server>` for info on how to change the defaults.
+For instance, on a linux shell (when connected to the WiPy in AP mode)::
+
+   $ telnet 192.168.1.1
+
+Local file system and FTP access
+--------------------------------
 
 There is a small internal file system (a drive) on the WiPy, called ``/flash``,
 which is stored within the external serial flash memory.  If a micro SD card
-is hooked-up and enabled, it is available as ``/sd``.
+is hooked-up and mounted, it will be available as well.
 
-When the WiPy boots up, it always boots from the ``boot.py`` located in the
-``/flash`` file system.  If during the boot process the SD card is enabled and
-it's selected as the current drive then the WiPy will try to execute ``main.py``
-that should be located in the SD card.
+When the WiPy starts up, it always boots from the ``boot.py`` located in the
+``/flash`` file system.
 
 The file system is accessible via the native FTP server running in the WiPy. 
 Open your FTP client of choice and connect to:
 
-``ftp://192.168.1.1``, ``user: micro``, ``password: python``
+**url:** ``ftp://192.168.1.1``, **user:** ``micro``, **password:** ``python``
+
+See :ref:`network.server <network.server>` for info on how to change the defaults.
+The recommended clients are: Linux stock FTP (also in OSX), Filezilla and FireFTP.
+For example, on a linux shell::
+
+   $ ftp 192.168.1.1
 
-The FTP server on the WiPy doesn't support active mode, only passive, so for instance
-if using the native unix ftp client, just after logging in::
+The FTP server on the WiPy doesn't support active mode, only passive, therefore,
+if using the native unix ftp client, just after logging in do::
 
     ftp> passive
 
-Besides that, the FTP server only supports onw data connection at a time. Check out
+Besides that, the FTP server only supports one data connection at a time. Check out
 the Filezilla settings section below for more info.
 
 FileZilla settings
@@ -74,16 +86,17 @@ Upgrading the firmware Over The Air
 
 OTA software updates can be performed through the FTP server. Upload the ``mcuimg.bin`` file
 to: ``/flash/sys/mcuimg.bin`` it will take around 6s. You won't see the file being stored
-inside ``/flash/sys/`` because it's actually saved bypassing the user file system, but rest
-assured that it was successfully transferred, and it has been signed with a MD5 checksum to
-verify its integrity. Now, reset the MCU by pressing the switch on the board, or by typing::
+inside ``/flash/sys/`` because it's actually saved bypassing the user file system, so it
+ends up inside the internal **hidden** file system, but rest assured that it was successfully
+transferred, and it has been signed with a MD5 checksum to verify its integrity. Now, reset
+the WiPy by pressing the switch on the board, or by typing::
 
     import machine
     machine.reset()
 
 Software updates can be found in: https://github.com/wipy/wipy/releases
 It's always recommended to update to the latest software, but make sure to
-read the ``release notes`` before.
+read the **release notes** before.
 
 Boot modes
 ----------
diff --git a/docs/wipy/quickref.rst b/docs/wipy/quickref.rst
index 4ecffffe382517fddc6ce98ed82b00aa8816bfe5..e473017e834440ba05013f0c52ad69f2a3b12c90 100644
--- a/docs/wipy/quickref.rst
+++ b/docs/wipy/quickref.rst
@@ -88,9 +88,9 @@ See :ref:`machine.ADC <machine.ADC>`. ::
 UART (serial bus)
 -----------------
 
-See :ref:`machine.Pin <machine.Pin>` and :ref:`machine.UART <machine.UART>`. ::
+See :ref:`machine.UART <machine.UART>`. ::
 
-    from machine import Pin, UART
+    from machine import UART
     uart = UART(0, baudrate=9600)
     uart.write('hello')
     uart.read(5) # read up to 5 bytes
@@ -100,7 +100,7 @@ SPI bus
 
 See :ref:`machine.SPI <machine.SPI>`. ::
 
-    from machine SPI
+    from machine import SPI
 
     # configure the SPI master @ 2MHz
     spi = SPI(0, SPI.MASTER, baudrate=200000, polarity=0, phase=0)
@@ -112,9 +112,9 @@ See :ref:`machine.SPI <machine.SPI>`. ::
 I2C bus
 -------
 
-See :ref:`machine.Pin <machine.Pin>` and :ref:`machine.I2C <machine.I2C>`. ::
+See :ref:`machine.I2C <machine.I2C>`. ::
 
-    from machine import Pin, I2C
+    from machine import I2C
     # configure the I2C bus
     i2c = I2C(0, I2C.MASTER, baudrate=100000)
     i2c.scan() # returns list of slave addresses
@@ -203,7 +203,7 @@ Telnet and FTP server
 
 See :ref:`network.server <network.server>` ::
 
-    from network import network
+    from network import server
 
     # init with new user, pass word and seconds timeout
     server = server.init(login=('user', 'password'), timeout=60)
@@ -211,8 +211,8 @@ See :ref:`network.server <network.server>` ::
     server.timeout() # get the timeout
     server.isrunning() # check wether the server is running or not
 
-HeartBeat LED
--------------
+Heart beat LED
+--------------
 
 See :mod:`wipy`. ::