diff --git a/backends/README.txt b/backends/README.txt
new file mode 100644
index 0000000..9dd9dfc
--- /dev/null
+++ b/backends/README.txt
@@ -0,0 +1,154 @@
+-----------------------------------------------------------------------
+ dear imgui, v1.80 WIP
+ Backends
+-----------------------------------------------------------------------
+ (See docs/ and examples/ for more documentation)
+-----------------------------------------------------------------------
+
+This folder contains backends for popular platforms/graphics API, which you can use in
+your application or engine to easily integrate Dear ImGui.
+
+- The 'Platform' backends are in charge of: mouse/keyboard/gamepad inputs, cursor shape, timing, windowing.
+  e.g. Windows (imgui_impl_win32.cpp), GLFW (imgui_impl_glfw.cpp), SDL2 (imgui_impl_sdl.cpp), etc.
+
+- The 'Renderer' backends are in charge of: creating atlas texture, rendering imgui draw data.
+  e.g. DirectX11 (imgui_impl_dx11.cpp), OpenGL/WebGL (imgui_impl_opengl3.cpp), Vulkan (imgui_impl_vulkan.cpp), etc.
+
+- For some high-level frameworks, a single backend usually handle both 'Platform' and 'Renderer' parts.
+  e.g. Allegro 5 (imgui_impl_allegro5.cpp), Marmalade (imgui_impl_marmalade5.cpp).
+
+An application usually combines 1 Platform backend + 1 Renderer backend + main ImGui sources.
+For example, the example_win32_directx11/ application combines imgui_impl_win32.cpp + imgui_impl_dx11.cpp.
+See examples/README.txt for details.
+
+
+---------------------------------------
+ WHAT ARE BACKENDS?
+---------------------------------------
+
+Dear ImGui is highly portable and only requires a few things to run and render, typically:
+
+ - Required: providing mouse/keyboard inputs.
+ - Required: uploading the font atlas texture into graphics memory.
+ - Required: rendering indexed textured triangles with a clipping rectangle.
+
+ Extra features are opt-in, our backends try to support as many as possible:
+
+ - Optional: custom texture binding support.
+ - Optional: clipboard support.
+ - Optional: gamepad support.
+ - Optional: mouse cursor shape support.
+ - Optional: IME support.
+ - Optional: multi-viewports support.
+ etc.
+
+This is essentially what the backends in this folder are providing + obligatory portability cruft.
+
+It is important to understand the difference between the core Dear ImGui library (files in the root folder)
+and backends which we are describing here (backends/ folder).
+
+- Some issues may only be backend or platform specific.
+- You should be able to write backends for pretty much any platform and any 3D graphics API. 
+  e.g. get creative and have your backend perform rendering remotely, on a different machine
+  than the one running Dear ImGui, etc.
+
+
+-----------------------------------------------------------------------
+ USING A CUSTOM ENGINE?
+-----------------------------------------------------------------------
+
+You will likely be tempted to start by rewrite your own backend using your own custom/high-level facilities... 
+Think twice!
+
+If you are new to Dear ImGui, first try using the existing backends as-is.
+You will save lots of time integrating the library.
+You can LATER decide to rewrite yourself a custom backend if you really need to.
+In most situations, custom backends have less features and more bugs than the standard backends we provide.
+If you want portability, you can use multiple backends and choose between them either at compile time 
+or at runtime. 
+
+Example A: your engine is built over Windows + DirectX11 but you have your own high-level rendering
+system layered over DirectX11.
+ - Suggestion: try using imgui_impl_win32.cpp + imgui_impl_dx11.cpp first.
+   Once it works, if you really need it you can replace the imgui_impl_dx11.cpp code with a 
+   custom renderer using your own rendering functions, and keep using the standard Win32 code etc.
+
+Example B: your engine runs on Windows, Mac, Linux and uses DirectX11, Metal, Vulkan respectively.
+ - Suggestion: use multiple generic backends!
+   Once it works, if you really need it you can replace parts of backends with your own abstractions.
+
+Example C: your engine runs on platforms we can't provide public backends for (e.g. PS4/PS5, Switch), 
+and you have high-level systems everywhere.
+ - Suggestion: try using a non-portable backend first (e.g. win32 + underlying graphics API) to get
+   your desktop builds working first. This will get you running faster and get your acquainted with
+   how Dear ImGui works and is setup. You can then rewrite a custom backend using your own engine API.
+
+Also:
+The multi-viewports feature of the 'docking' branch allows Dear ImGui windows to be seamlessly detached 
+from the main application window. This is achieved using an extra layer to the Platform and Renderer 
+backends, which allows Dear ImGui to communicate platform-specific requests.
+Supporting the multi-viewports feature correctly using 100% of your own abstractions is more difficult 
+than supporting single-viewport.
+If you decide to use unmodified imgui_impl_xxxx.cpp files, you can automatically benefit from
+improvements and fixes related to viewports and platform windows without extra work on your side.
+
+
+---------------------------------------
+ LIST OF BACKENDS
+---------------------------------------
+
+List of Platforms Backends in this repository:
+
+    imgui_impl_glfw.cpp       ; GLFW (Windows, macOS, Linux, etc.) http://www.glfw.org/
+    imgui_impl_osx.mm         ; macOS native API (not as feature complete as glfw/sdl backends)
+    imgui_impl_sdl.cpp        ; SDL2 (Windows, macOS, Linux, iOS, Android) https://www.libsdl.org
+    imgui_impl_win32.cpp      ; Win32 native API (Windows)
+    imgui_impl_glut.cpp       ; GLUT/FreeGLUT (absolutely not recommended in 2020!)
+
+List of Renderer Backends in this repository:
+
+    imgui_impl_dx9.cpp        ; DirectX9
+    imgui_impl_dx10.cpp       ; DirectX10
+    imgui_impl_dx11.cpp       ; DirectX11
+    imgui_impl_dx12.cpp       ; DirectX12
+    imgui_impl_metal.mm       ; Metal (with ObjC)
+    imgui_impl_opengl2.cpp    ; OpenGL 2 (legacy, fixed pipeline <- don't use with modern OpenGL context)
+    imgui_impl_opengl3.cpp    ; OpenGL 3/4, OpenGL ES 2, OpenGL ES 3 (modern programmable pipeline)
+    imgui_impl_vulkan.cpp     ; Vulkan
+
+Emscripten is also supported.
+The example_emscripten/ app uses imgui_impl_sdl.cpp + imgui_impl_opengl3.cpp, but other combos are possible.
+
+List of high-level Frameworks Backends in this repository: (combine Platform + Renderer)
+
+    imgui_impl_allegro5.cpp
+    imgui_impl_marmalade.cpp
+
+Backends for third-party frameworks, graphics API or other programming languages:
+
+    https://github.com/ocornut/imgui/wiki/Bindings
+
+    (AGS/Adventure Game Studio, Amethyst, bsf, Cinder, Cocos2d-x, Diligent Engine, Flexium,
+    GML/Game Maker Studio2, GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, NanoRT, Nim Game Lib,
+    Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, px_render, Qt/QtDirect3D, SFML, Sokol,
+    Unreal Engine 4, vtk, Win32 GDI, etc.)
+
+
+---------------------------------------
+ RECOMMENDED BACKENDS
+---------------------------------------
+
+Recommended platform/frameworks for portable applications:
+
+    Library:  GLFW    
+    Webpage:  https://github.com/glfw/glfw        
+    Backend:  imgui_impl_glfw.cpp
+
+    Library:  SDL2    
+    Webpage:  https://www.libsdl.org              
+    Backend:  imgui_impl_sdl.cpp
+
+    Library:  Sokol (lower-level than GLFW/SDL)
+    Webpage:  https://github.com/floooh/sokol     
+    Backend:  Use util/sokol_imgui.h in Sokol repository.
+
diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt
index 9af626e..a01917d 100644
--- a/docs/CHANGELOG.txt
+++ b/docs/CHANGELOG.txt
@@ -53,6 +53,7 @@
 
 Other Changes:
 
+- Docs: Split Backends and Examples README and improved them.
 - Docs: Consistently renamed all occurences of "binding" and "back-end" to "backend" in comments and docs.
 
 
diff --git a/examples/README.txt b/examples/README.txt
index 71700d8..45f0ae6 100644
--- a/examples/README.txt
+++ b/examples/README.txt
@@ -1,33 +1,14 @@
 -----------------------------------------------------------------------
  dear imgui, v1.80 WIP
+ Examples applications
 -----------------------------------------------------------------------
- examples/README.txt
- (This is the README file for the examples/ folder. See docs/ for more documentation)
+ (See docs/ and backends/ for more documentation)
 -----------------------------------------------------------------------
 
-Dear ImGui is highly portable and only requires a few things to run and render:
+This folder contains example applications (standalone, ready-to-build) for variety of 
+platforms and graphics APIs. They all use standard backends from the backends/ folder.
 
- - Providing mouse/keyboard inputs
- - Uploading the font atlas texture into graphics memory
- - Providing a render function to render indexed textured triangles
- - Optional: clipboard support, mouse cursor supports, Windows IME support, etc.
-
-This is essentially what the example backends in this folder are providing + obligatory portability cruft.
-
-It is important to understand the difference between the core Dear ImGui library (files in the root folder)
-and examples backends which we are describing here (examples/ folder).
-You should be able to write backends for pretty much any platform and any 3D graphics API. With some extra
-effort you can even perform the rendering remotely, on a different machine than the one running the logic.
-
-This folder contains two things:
-
- - Example backends for popular platforms/graphics API, which you can use as is or adapt for your own use.
-   They are the imgui_impl_XXXX files found in the examples/ folder.
-
- - Example applications (standalone, ready-to-build) using the aforementioned backends.
-   They are the in the XXXX_example/ sub-folders.
-
-You can find binaries of some of those example applications at:
+You can find Windows binaries for some of those example applications at:
   http://www.dearimgui.org/binaries
 
 
@@ -35,144 +16,72 @@
  GETTING STARTED
 ---------------------------------------
 
- - Please read 'PROGRAMMER GUIDE' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
-   Please read the comments and instruction at the top of each file.
-   Please read FAQ at http://www.dearimgui.org/faq
+Integration in a typical existing application, should take <20 lines when using standard backends.
 
- - If you are using of the backend provided here, you can add the imgui_impl_xxx.cpp/h files
-   to your project and use them unmodified. Each imgui_impl_xxxx.cpp comes with its own individual
-   Changelog at the top of the .cpp files, so if you want to update them later it will be easier to
-   catch up with what changed.
+    At initialization:               
+      call ImGui::CreateContext()
+      call ImGui_ImplXXXX_Init() for each backend.
 
- - Dear ImGui has no particular extra lag for most behaviors, e.g. the value of 'io.MousePos' provided in
-   NewFrame() will result at the time of EndFrame()/Render() in a moved windows rendered following that mouse
-   movement. At 60 FPS your experience should be pleasant.
-   However, consider that OS mouse cursors are typically drawn through a very specific hardware accelerated
-   path and will feel smoother than the majority of contents rendererd via regular graphics API (including,
-   but not limited to Dear ImGui windows). Because UI rendering and interaction happens on the same plane as
-   the mouse, that disconnect may be jarring to particularly sensitive users.
-   You may experiment with enabling the io.MouseDrawCursor flag to request Dear ImGui to draw a mouse cursor
-   using the regular graphics API, to help you visualize the difference between a "hardware" cursor and a
-   regularly rendered software cursor.
-   However, rendering a mouse cursor at 60 FPS will feel sluggish so you likely won't want to enable that at
-   all times. It might be beneficial for the user experience to switch to a software rendered cursor _only_
-   when an interactive drag is in progress.
-   Note that some setup or GPU drivers are likely to be causing extra display lag depending on their settings.
-   If you feel that dragging windows feels laggy and you are not sure what the cause is: try to build a simple
-   drawing a flat 2D shape directly under the mouse cursor.
+    At the beginning of your frame:
+      call ImGui_ImplXXXX_NewFrame() for each backend.
+      call ImGui::NewFrame()
 
+    At the end of your frame:
+      call ImGui::Render()
+      call ImGui_ImplXXXX_RenderDrawData() for your Renderer backend.
 
----------------------------------------
- EXAMPLE BACKENDS
----------------------------------------
+    At shutdown:
+      call ImGui_ImplXXXX_Shutdown() for each backend.
+      call ImGui::DestroyContext()
 
-Most the example backends are split in 2 parts:
+Example (using backends/imgui_impl_win32.cpp + backends/imgui_impl_dx11.cpp):
 
- - The "Platform" backends, in charge of: mouse/keyboard/gamepad inputs, cursor shape, timing, windowing.
-   Examples: Windows (imgui_impl_win32.cpp), GLFW (imgui_impl_glfw.cpp), SDL2 (imgui_impl_sdl.cpp), etc.
+    // Create a Dear ImGui context, setup some options
+    ImGui::CreateContext();
+    ImGuiIO& io = ImGui::GetIO();
+    io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable some options
+  
+    // Initialize Platform + Renderer backends (here: using imgui_impl_win32.cpp + imgui_impl_dx11.cpp)
+    ImGui_ImplWin32_Init(my_hwnd);
+    ImGui_ImplDX11_Init(my_d3d_device, my_d3d_device_context);
+  
+    // Application main loop
+    while (true)
+    {
+        // Beginning of frame: update Renderer + Platform backend, start Dear ImGui frame
+        ImGui_ImplDX11_NewFrame();
+        ImGui_ImplWin32_NewFrame();
+        ImGui::NewFrame();
+    
+        // Any application code here
+        ImGui::Text("Hello, world!");
+    
+        // End of frame: render Dear ImGui
+        ImGui::Render();
+        ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
 
- - The "Renderer" backends, in charge of: creating the main font texture, rendering imgui draw data.
-   Examples: DirectX11 (imgui_impl_dx11.cpp), GL3 (imgui_impl_opengl3.cpp), Vulkan (imgui_impl_vulkan.cpp), etc.
+        // Swap
+        g_pSwapChain->Present(1, 0);
+    }
 
- - The example _applications_ usually combine 1 platform + 1 renderer backend to create a working program.
-   Examples: the example_win32_directx11/ application combines imgui_impl_win32.cpp + imgui_impl_dx11.cpp.
+    // Shutdown
+    ImGui_ImplDX11_Shutdown();
+    ImGui_ImplWin32_Shutdown();
+    ImGui::DestroyContext();
 
- - Some backends for higher level frameworks carry both "Platform" and "Renderer" parts in one file.
-   This is the case for Allegro 5 (imgui_impl_allegro5.cpp), Marmalade (imgui_impl_marmalade5.cpp).
+Please read 'PROGRAMMER GUIDE' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
+Please read the comments and instruction at the top of each file.
+Please read FAQ at http://www.dearimgui.org/faq
 
- - If you use your own engine, you may decide to use some of existing backends and/or rewrite some using
-   your own API. As a recommendation, if you are new to Dear ImGui, try using the existing backend as-is
-   first, before moving on to rewrite some of the code. Although it is tempting to rewrite both of the
-   imgui_impl_xxxx files to fit under your coding style, consider that it is not necessary!
-   In fact, if you are new to Dear ImGui, rewriting them will almost always be harder.
-
-   Example: your engine is built over Windows + DirectX11 but you have your own high-level rendering
-   system layered over DirectX11.
-     Suggestion: step 1: try using imgui_impl_win32.cpp + imgui_impl_dx11.cpp first.
-     Once this work, _if_ you want you can replace the imgui_impl_dx11.cpp code with a custom renderer
-     using your own functions, etc.
-     Please consider using the backends to the lower-level platform/graphics API as-is.
-
-   Example: your engine is multi-platform (consoles, phones, etc.), you have high-level systems everywhere.
-     Suggestion: step 1: try using a non-portable backend first (e.g. win32 + underlying graphics API)!
-     This is counter-intuitive, but this will get you running faster! Once you better understand how imgui
-     works and is bound, you can rewrite the code using your own systems.
-
- - Road-map: Dear ImGui 1.80 (WIP currently in the "docking" branch) will allows imgui windows to be
-   seamlessly detached from the main application window. This is achieved using an extra layer to the
-   platform and renderer backends, which allows Dear ImGui to communicate platform-specific requests.
-   If you decide to use unmodified imgui_impl_xxxx.cpp files, you will automatically benefit from
-   improvements and fixes related to viewports and platform windows without extra work on your side.
-
-
-List of Platforms Backends in this repository:
-
-    imgui_impl_glfw.cpp       ; GLFW (Windows, macOS, Linux, etc.) http://www.glfw.org/
-    imgui_impl_osx.mm         ; macOS native API (not as feature complete as glfw/sdl backends)
-    imgui_impl_sdl.cpp        ; SDL2 (Windows, macOS, Linux, iOS, Android) https://www.libsdl.org
-    imgui_impl_win32.cpp      ; Win32 native API (Windows)
-    imgui_impl_glut.cpp       ; GLUT/FreeGLUT (absolutely not recommended in 2020!)
-
-List of Renderer Backends in this repository:
-
-    imgui_impl_dx9.cpp        ; DirectX9
-    imgui_impl_dx10.cpp       ; DirectX10
-    imgui_impl_dx11.cpp       ; DirectX11
-    imgui_impl_dx12.cpp       ; DirectX12
-    imgui_impl_metal.mm       ; Metal (with ObjC)
-    imgui_impl_opengl2.cpp    ; OpenGL 2 (legacy, fixed pipeline <- don't use with modern OpenGL context)
-    imgui_impl_opengl3.cpp    ; OpenGL 3/4, OpenGL ES 2, OpenGL ES 3 (modern programmable pipeline)
-    imgui_impl_vulkan.cpp     ; Vulkan
-
-List of high-level Frameworks Backends in this repository: (combine Platform + Renderer)
-
-    imgui_impl_allegro5.cpp
-    imgui_impl_marmalade.cpp
-
-Note that Dear ImGui works with Emscripten. The examples_emscripten/ app uses imgui_impl_sdl.cpp and
-imgui_impl_opengl3.cpp, but other combinations are possible.
-
-Third-party framework, graphics API and languages backends are listed at:
-
-    https://github.com/ocornut/imgui/wiki/Bindings
-
-Including backends for:
-
-    AGS/Adventure Game Studio, Amethyst, bsf, Cinder, Cocos2d-x, Diligent Engine, Flexium,
-    GML/Game Maker Studio2, GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, NanoRT, Nim Game Lib,
-    Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, px_render, Qt/QtDirect3D, SFML, Sokol,
-    Unreal Engine 4, vtk, Win32 GDI, etc.
-
-Not sure which to use?
-Recommended platform/frameworks:
-
-    GLFW    https://github.com/glfw/glfw        Use imgui_impl_glfw.cpp
-    SDL2    https://www.libsdl.org              Use imgui_impl_sdl.cpp
-    Sokol   https://github.com/floooh/sokol     Use util/sokol_imgui.h in Sokol repository.
-
-Those will allow you to create portable applications and will solve and abstract away many issues.
+If you are using of the backend provided here, you can add the backends/imgui_impl_xxxx(.cpp,.h) 
+files to your project and use as-in. Each imgui_impl_xxxx.cpp file comes with its own individual
+Changelog, so if you want to update them later it will be easier to catch up with what changed.
 
 
 ---------------------------------------
  EXAMPLE APPLICATIONS
 ---------------------------------------
 
-Building:
-  Unfortunately in 2020 it is still tedious to create and maintain portable build files using external
-  libraries (the kind we're using here to create a window and render 3D triangles) without relying on
-  third party software. For most examples here we choose to provide:
-   - Makefiles for Linux/OSX
-   - Batch files for Visual Studio 2008+
-   - A .sln project file for Visual Studio 2012+
-   - Xcode project files for the Apple examples
-  Please let us know if they don't work with your setup!
-  You can probably just import the imgui_impl_xxx.cpp/.h files into your own codebase or compile those
-  directly with a command-line compiler.
-
-  If you are interested in using Cmake to build and links examples, see:
-    https://github.com/ocornut/imgui/pull/1713 and https://github.com/ocornut/imgui/pull/3027
-
-
 example_allegro5/
     Allegro 5 example.
     = main.cpp + imgui_impl_allegro5.cpp
@@ -290,3 +199,45 @@
     DirectX12 example, Windows only.
     = main.cpp + imgui_impl_win32.cpp + imgui_impl_dx12.cpp
     This is quite long and tedious, because: DirectX12.
+
+
+---------------------------------------
+ MISCELLANEOUS
+---------------------------------------
+
+Building:
+  Unfortunately in 2020 it is still tedious to create and maintain portable build files using external
+  libraries (the kind we're using here to create a window and render 3D triangles) without relying on
+  third party software. For most examples here we choose to provide:
+   - Makefiles for Linux/OSX
+   - Batch files for Visual Studio 2008+
+   - A .sln project file for Visual Studio 2012+
+   - Xcode project files for the Apple examples
+  Please let us know if they don't work with your setup!
+  You can probably just import the imgui_impl_xxx.cpp/.h files into your own codebase or compile those
+  directly with a command-line compiler.
+
+  If you are interested in using Cmake to build and links examples, see:
+    https://github.com/ocornut/imgui/pull/1713 and https://github.com/ocornut/imgui/pull/3027
+
+Things feeling laggy?
+
+  Dear ImGui has no particular extra lag for most behaviors,
+  e.g. the value of 'io.MousePos' provided at the time of NewFrame() will result in windows being moved
+  to the right spot at the time of EndFrame()/Render(). At 60 FPS your experience should be pleasant.
+
+  However, consider that OS mouse cursors are typically drawn through a very specific hardware accelerated
+  path and will feel smoother than the majority of contents rendered via regular graphics API (including,
+  but not limited to Dear ImGui windows). Because UI rendering and interaction happens on the same plane 
+  as the mouse, that disconnect may be jarring to particularly sensitive users.
+  You may experiment with enabling the io.MouseDrawCursor flag to request Dear ImGui to draw a mouse cursor
+  using the regular graphics API, to help you visualize the difference between a "hardware" cursor and a
+  regularly rendered software cursor.
+  However, rendering a mouse cursor at 60 FPS will feel sluggish so you likely won't want to enable that at
+  all times. It might be beneficial for the user experience to switch to a software rendered cursor _only_
+  when an interactive drag is in progress.
+
+  Note that some setup or GPU drivers are likely to be causing extra display lag depending on their settings.
+  If you feel that dragging windows feels laggy and you are not sure what the cause is: try to build a simple
+  drawing a flat 2D shape directly under the mouse cursor!
+
