diff --git a/README.md b/README.md
index 18a9be7f2..cb04d5f45 100644
--- a/README.md
+++ b/README.md
@@ -5,21 +5,35 @@ An [array] is a collection of values, stored contiguously.
📰 [Docs](https://nodef.github.io/extra-array/),
📘 [Wiki](https://github.com/nodef/extra-array/wiki/).
-This package includes common array functions related to querying **about**
-arrays, **generating** them, **comparing** one with another, finding their
-**length**, **getting** and **setting** elements, obtaining its **properties**,
-getting a **part** of it, **rearranging** elements in it, **finding** an element
-of a subset of elements in it, performing **functional** operations,
-**manipulating** it in various ways, **combining** together arrays or its
-elements, of performing **set operations** upon it.
+![](https://i.imgur.com/46wYtxW.png)
-All functions except `from*()` take array as 1st parameter. Methods like
-`swap()` are pure and do not modify the array itself, while methods like
-`swap$()` *do modify (update)* the array itself. Some methods accept a map
-function for *faster comparision* (like [unique]). I find the map-approach
-beautiful, which I learned from Haskell's `sortOn()`. You can notice that I have
-followed Javascript naming scheme as far as possible. Some names are borrowed
-from Haskell, Python, Java, Processing.
+
+
+
+This package includes comprehensive set of array functions for **generating** an
+array, **cloning** them, querying **about** them, getting non-negative
+**indices**, managing its **length**, **getting/setting** elements, fully or
+partially **sorting** them, obtaining **minimum(s)/maximum(s)**, **comparing**
+one with another, getting a **part** of it, **searching a value**, obtaining all
+possible **arrangements** or **random arrangements**, **finding** an element,
+**taking/dropping** elements or **scanning** from the begining or end the of an
+array, **searching** the index of a part of the array, performing **functional**
+operations, **flattening** multi-level arrays, obtaining **prefix sum**,
+**manipulating** it in various ways, **counting/partitioning** elements,
+**splitting** it, **concatenating/joining** multiple arrays, **rearranging**
+elements withing it, or performing **set operations** upon it. You can use our
+package in a variety of ways to streamline your development process and simplify
+the implementation of complex algorithms.
+
+We use a consistent naming scheme that helps you quickly identify the functions
+you need. All functions except `from*()` take array as 1st parameter. Some
+functions operate on a specified range in the array, and are called `ranged*()`.
+Functions like `swap()` are pure and do not modify the array itself, while
+functions like `swap$()` *do modify (update)* the array itself. Some functions
+accept a map function for *faster comparision*, such as `unique()`. Furher,
+functions which return an iterable instead of an array are prefixed with `i`,
+such as `isubsequences()`. We borrow some names from other programming languages
+such as *Haskell*, *Python*, *Java*, and *Processing*.
This package is available in *Node.js* and *Web* formats. To use it on the web,
simply use the `extra_array` global variable after loading with a `