diff --git a/README.md b/README.md
index a183482..8647cf0 100644
--- a/README.md
+++ b/README.md
@@ -1,68 +1,34 @@
# Browser-recognizer
-- A from-microphone speech recognizer built on Vosk that can be run on the browser, inspired by [vosk-browser](https://github.com/ccoreilly/vosk-browser), but built from scratch and no code taken!
+- A speech recognizer built on Vosk that can be run on the browser, inspired by [vosk-browser](https://github.com/ccoreilly/vosk-browser), but built from scratch and no code taken!
- Browser-recognizer can run both in the browser main thread and web workers.
-## Interface
-- setLogLevel: set Kaldi's log level (default: -1)
- - -2: Error
- - -1: Warning
- - 0: Info
- - 1: Verbose
- - 2: More verbose
- - 3: Debug
-### Model and SpkModel
-```
-model = new Model()
-spkModel = new SpkModel()
-// Add events listeners
-model.init(url, storepath, id)
-spkModel.init(url, storepath, id)
-```
-#### Functions
-- ***constructor***: Construct the EventTarget part to enable addEventListener
-- ***init*** : Initialize the internal object with an URL, storage path, and an ID.
- - If **storepath** contains valid model files and **id** is the same, there will not be a fetch from **url**.
- - If **storepath** doesn't contain valid model files, or if it contains valid model files but **id** is different, there will be a fetch from **url**, and the model is stored with **id**.
-- ***delete***: Delete self and free resources
-#### Events
-- ***ready***: The model is ready to be put into a recognizer via the constructor, or setSpkModel() for SpkModel.
-- ***error***: An error occured, check the event's "details" property.
-### Recognizer
-```
-recognizer = new Recognizer()
-// Add event listeners
-recognizer.init(model)
-```
-#### Functions
-- ***constructor***: Construct the EventTarget part to enable addEventListener
-- ***init***: Construct the real internal object from a model
-- ***start***: Start recognizing
-- ***stop***: Stop recognizing
-- ***setWords***: Return words' information in a result event (default: false)
-- ***setPartialWords***: Return words' information in a partialResult event (default: false)
-- ***setNLSML***: Return result and partialResult in NLSML form (default: false)
-- ***setMaxAlternatives***: Set the max number of alternatives for result event (default: false)
-- ***setGrm***: Add grammar to the recognizer (default: none)
-- ***setSpkModel***: Set the speaker model of the recognizer (default: none)
-- ***delete***: Call stop, delete self and free all resource
-#### Events
-- ***partialResult***: There is a partial recognition result, check the event's "details" property
-- ***result***: There is a full recognition result, check the event's "details" property
-- ***error***: An error occured, check the event's "details" property.
-## Other key points
-### IMPORTANT
-- You MUST call delete() on objects at the end of its usage. Or put:
+## Global and all objects' common interface
+| Function signature (global) | Description |
+|---|---|
+| ```Promise makeModel(url, path, id)```
```Promise makeSpkModel(url, storepath, id)``` | - If **path** contains valid model files and **id** is the same, there will not be a fetch from **url**.
- If **path** doesn't contain valid model files, or if it contains valid model files but **id** is different, there will be a fetch from **url**, and the model is stored with **id**. |
+| ```setLogLevel(level)``` | Set Vosk's log level (default: -1)
- 2: Error
- 1: Warning
- 0: Info
- 1: Verbose
- 2: More verbose
- 3: Debug |
+| ```deleteAll()``` | Call ```delete()``` on all objects, it is recommended to put this at the end of the program to automatically clean up. See [here](https://emscripten.org/docs/getting_started/FAQ.html#what-does-exiting-the-runtime-mean-why-don-t-atexit-s-run).|
- ```
- __genericObj__.objects.forEach(obj => obj.delete())
- ```
- at the end of your program to automatically do that. We have to do this because Emscripten doesn't call destructors. See [here](https://emscripten.org/docs/getting_started/FAQ.html#what-does-exiting-the-runtime-mean-why-don-t-atexit-s-run).
-- To be safe, always handle the API through events by adding all event listener before calling init() on objects.
-- Always call init on the regular Model object before calling init on the recognizer. SpkModel can be init and set later.
-### Guarantees
-- If an error occurs (error event is fired), no changes was made, and no other dependent events will fire. For example, if an error occur while loading the model, the "ready" event won't fire in order to prevent executing code on a nonexistent model.
-### Limitations compared to vosk-browser:
-- Microphone only
-- Fixed memory size at 300MB, changing it require recompilation
+| Function signature (all objects) | Description
+|---|---|
+| ```delete()``` | Delete this Object
+## ```Recognizer``` object
+| Function signature | Description |
+|---|---|
+| ```setPartialWords(partialWords)``` | Return words' information in a partialResult event (default: false) |
+| ```setWords(words)``` | Return words' information in a result event (default: false) |
+| ```setNLSML(nlsml)``` | Return result and partialResult in NLSML form (default: false) |
+| ```setMaxAlternatives(alts)``` | Set the max number of alternatives for result event (default: false) |
+| ```setGrm(grm)``` | Add grammar to the recognizer (default: none) |
+| ```setSpkModel(spkmodel)``` | Set the speaker model of the recognizer (default: none) |
+
+| Event | Description |
+|---|---|
+| ```partialResult``` | There is a partial recognition result, check the event's "details" property |
+| ```result``` | There is a full recognition result, check the event's "details" property |
+| ```error``` | An recognition occurred, check the event's "details" property |
+## Other key points
+- If an error occurs, no changes was made.
+- Fixed memory size at 300MB, changing it require recompilation (because the use of pthread will lead)
### Additions to vosk-browser:
- Multiple models support
- Speaker model (SpkModel) support
@@ -79,6 +45,11 @@ recognizer.init(model)
```
diff --git a/index.html b/index.html
index 1ed1785..3322b01 100644
--- a/index.html
+++ b/index.html
@@ -1,11 +1,7 @@