diff --git a/Installation.md b/Installation.md
index 62cf85dd401d59ac8b365401905b41879f305058..ce06e1bc06ff0b3c5a2535b3e3a98a337a17b6d2 100644
--- a/Installation.md
+++ b/Installation.md
@@ -15,7 +15,7 @@ rustup component add llvm-tools-preview
 ```
 
 ## Editor
-There is no requierment on what editor you should use, but if you are undecided VS code offers quite a few features, is free and highly customizable. It also feature quite a lot of extensions, for an example, the Rust core group maintain an extansion that is called ```Rust (rls)``` where you get all kinds of language specific help such as code completion, Intellisense, refactoring, reformatting, errors, snippets.
+There is no requirement on what editor you should use, but if you are undecided VS code offers quite a few features, is free and highly customizable. It also features quite a lot of extensions, for an example, the Rust core group maintain an extension that is called ```Rust (rls)``` where you get all kinds of language-specific help such as code completion, IntelliSense, refactoring, reformatting, errors, snippets.
 
 ### VS Code
 
@@ -44,12 +44,11 @@ Go to http://www.mingw.org/, download and install MinGW. In the MinGW Installati
 
 then in the Installation menu choose ```Apply Changes```, you should see at the bottom of the window that there is going to be several packages in ```new/upgraded packages will be installed``` if so then click ```Apply```.
 
-If everything went as expected then you should have the ```gdb.exe``` file is your MinGW install folder under /bin. However to effectivly use gdb you need to set the environment variable.
+If everything went as expected then you should have the ```gdb.exe``` file is your MinGW install folder under /bin. However to effectively use gdb you need to set the environment variable.
 Go to the Control panel -> System and Security -> System -> Advanced system settings, click the ```Environment Variables...``` button. In this window in the System variables view click ```Edit...``` then ```New``` and type in the path to the gdb.exe file (should be something like ```C:\MinGW\bin```). Then click OK in all the windows.
 
 To check that everything went as expected open a new terminal with ```CTRL+r``` and type cmd then ```ENTER```.
-If you now type ```gdb`` you should be promted with a text saying something like "GNU gdb (GDB) 7.6.1", gdb is now installed!
-
+If you now type ```gdb`` you should be prompted with a text saying something like "GNU gdb (GDB) 7.6.1", gdb is now installed!
 
 ### OpenOCD
 
@@ -95,10 +94,10 @@ Is the same as for native Windows as OpenOCD doesn't (currently) work under WSL.
 
 #### Shortcuts
 
-To be able to quickly get up and running I usually create a shortcut on the desktop with all flags I need for a certain project and with the configurations that i need. For example if I have a project that uses OpenOCD, the STLink programmer and the target MCU is a STM32f4xx, I create a shortcut with the target:
+To be able to quickly get up and running I usually create a shortcut on the desktop with all flags I need for a certain project and with the configurations that I need. For example, if I have a project that uses OpenOCD, the STLink programmer and the target MCU is an STM32f4xx, I create a shortcut with the target:
 
-```C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe .\openocd.exe -f ../share/openocd/scripts/interface/stlink.cfg -f ../share/openocd/scriptstarget/stm32f4x.cfg```
+```C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe .\openocd.exe -f ../share/openocd/scripts/interface/stlink.cfg -f ../share/openocd/scripts/target/stm32f4x.cfg```
 
-and make it start in the openocd/bin folder i.e ```C:\OpenOCD\bin```. And if you whant to be really fancy then under layout you can change where the window should spawn as well as how it should look like.
+and make it start in the openocd/bin folder i.e ```C:\OpenOCD\bin```. And if you want to be really fancy then under layout you can change where the window should spawn as well as how it should look like.
 
-You can even make it spawn a WSL terminal to your liking, for example if you have the target set as ```C:\Windows\System32\bash.exe -c "tmux new-session \; split-window -h \; attach"``` and to start in the folder where your rust projects are located. Then you will have a bash terminal in your project folder under WSL that starts up with tmux creating two panes spliting the terminal in two.
\ No newline at end of file
+You can even make it spawn a WSL terminal to your liking, for example, if you have the target set as ```C:\Windows\System32\bash.exe -c "tmux new-session \; split-window -h \; attach"``` and to start in the folder where your rust projects are located. Then you will have a bash terminal in your project folder under WSL that starts up with tmux creating two panes splitting the terminal in two.
\ No newline at end of file
diff --git a/README.md b/README.md
index 3de243f09790b2af16ea8766d793ee2ea5b6cf35..25007c16f61b8f442ca30ee49205aa5f25cb1917 100644
--- a/README.md
+++ b/README.md
@@ -29,6 +29,56 @@ For more information: https://en.wikipedia.org/wiki/ARM_architecture
 
 A typical way to access and interface with the hardware connected to your microcontroller is by accessing various registers, which is memory regions mapped to some hardware.
 
+## Features
+
+//// TODO ////
+
+Feels weird. Move out to excercises and explain there I guess... and mayby not all of them.
+
+### System
+
+#### Clock
+
+#### NVIC (Nested Vector Interrupt Controller)
+
+#### DMA (Direct Memory Access)
+
+### Interfaces
+
+#### Debugging
+
+##### SWD (Serial Wire Debug)
+
+##### JTAG (Joint Test Action Group)
+
+##### ISP / ICSP (In-Circuit Serial Programming)
+
+#### Communication
+
+##### USB (Universal Serial Bus)
+
+##### USART (Universal Synchronous and Asynchronous Receiver-Transmitter)
+
+##### I2C (Inter-Intergrated Circuit)
+
+##### SPI (Serial Peripheral Interface)
+
+#### IO (Input Output)
+
+##### GPIO (General Purpose Input Output)
+
+The most rudimentary type of interface but equally the most important. As an output this pin can be **ON** or **OFF**, **TRUE** or **FALSE**, **1** or **0**. And as input this pin goes into High-Z (High impedance) mode, this means that the MCU will check the voltage of the pin and if it is above a certain threshold then it will change the register bit corresponding to the state of the pin to 1 and vice versa.
+
+These are often sharing the same physical pin with special functions such as timers, communication busses and the like. So when booting up an MCU one should specify what function is needed on a particular pin. But beware that all functions can **NOT** be mapped to all pins.
+
+There is also a hardware limit to what can be driven by a GPIO pin. Usually, a pin can deliver about 20mA but that´s it.
+
+##### ADC (Analog to Digital Converter)
+
+## Development board
+
+### STM32 Nucleo-64
+
 
 # Software