diff --git a/docs/begin.md b/docs/begin.md
new file mode 100644
index 00000000..3730402d
--- /dev/null
+++ b/docs/begin.md
@@ -0,0 +1,41 @@
+```cpp
+iterator begin();
+const_iterator begin() const;
+const_iterator cbegin() const;
+```
+
+## Description
+
+Returns an iterator to the first value in the JSON container. If the JSON container is empty, the returned iterator will be equal to [`end()`](https://github.com/nlohmann/json/wiki/nlohmann::basicjson::end).
+
+![illustration of iterators](http://upload.cppreference.com/mwiki/images/1/1b/range-begin-end.svg)
+
+## Parameters
+
+None.
+
+## Return value
+
+Iterator to the first value. Note the return value its deferencabilty depends on the different value types:
+
+| value type | deferenceable | description |
+| ---------- | ------------- | ----------- |
+| null       | no | `null` has no value, always equal to [`end()`](https://github.com/nlohmann/json/wiki/nlohmann::basicjson::end) |
+| boolean    | yes | iterator to the boolean value |
+| string     | yes | iterator to the string value |
+| number     | yes | iterator to the number value |
+| object     | only if object is not empty | iterator to the begin of the object |
+| array      | only if array is not empty | iterator to the begin of the array |
+
+## Complexity
+
+Constant, as long as `ArrayType` and `ObjectType` satisfy the [Container concept](http://en.cppreference.com/w/cpp/concept/Container).
+
+## Exceptions
+
+None. The function's noexcept-specification is `noexcept`.
+
+## See also
+
+- [**end**, **cend**](https://github.com/nlohmann/json/wiki/nlohmann::basicjson::end)<br>
+  returns an iterator to the end
diff --git a/mkdocs.yml b/mkdocs.yml
index 71972cb3..29eba859 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -1,3 +1,7 @@
 site_name: JSON for Modern C++
 
-#theme: readthedocs
+theme: readthedocs
+#theme: bootstrap
+#theme: yeti
+
+markdown_extensions: [fenced_code]
diff --git a/src/json.hpp b/src/json.hpp
index 2057f6e4..a9da694c 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -156,7 +156,7 @@ class basic_json
 
 
     /// returns the allocator associated with the container
-    inline allocator_type get_allocator() const
+    inline static allocator_type get_allocator()
     {
         return allocator_type();
     }
@@ -578,6 +578,14 @@ class basic_json
         return basic_json(l, false, value_t::object);
     }
 
+    /// construct an array with count copies of given value
+    inline basic_json(size_type count, const basic_json& other)
+        : m_type(value_t::array)
+    {
+        AllocatorType<array_t> alloc;
+        m_value.array = alloc.allocate(1);
+        alloc.construct(m_value.array, count, other);
+    }
 
     ///////////////////////////////////////
     // other constructors and destructor //
diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c
index 94848617..58d80d9d 100644
--- a/src/json.hpp.re2c
+++ b/src/json.hpp.re2c
@@ -156,7 +156,7 @@ class basic_json
 
 
     /// returns the allocator associated with the container
-    inline allocator_type get_allocator() const
+    inline static allocator_type get_allocator()
     {
         return allocator_type();
     }
@@ -578,6 +578,14 @@ class basic_json
         return basic_json(l, false, value_t::object);
     }
 
+    /// construct an array with count copies of given value
+    inline basic_json(size_type count, const basic_json& other)
+        : m_type(value_t::array)
+    {
+        AllocatorType<array_t> alloc;
+        m_value.array = alloc.allocate(1);
+        alloc.construct(m_value.array, count, other);
+    }
 
     ///////////////////////////////////////
     // other constructors and destructor //
diff --git a/test/unit.cpp b/test/unit.cpp
index 6c2aec6d..e251f776 100644
--- a/test/unit.cpp
+++ b/test/unit.cpp
@@ -902,6 +902,17 @@ TEST_CASE("constructors")
             }
         }
     }
+
+    SECTION("create an array of n copies of a given value")
+    {
+        json v = {1, "foo", 34.23, {1, 2, 3}, {{"A", 1}, {"B", 2}}};
+        json arr(3, v);
+        CHECK(arr.size() == 3);
+        for (auto& x : arr)
+        {
+            CHECK(x == v);
+        }
+    }
 }
 
 TEST_CASE("other constructors and destructor")
@@ -7762,6 +7773,56 @@ TEST_CASE("algorithms")
 
 TEST_CASE("concepts")
 {
+    SECTION("container requirements for json")
+    {
+        // X: container class: json
+        // T: type of objects: json
+        // a, b: values of type X: json
+
+        // TABLE 96 - Container Requirements
+
+        // X::value_type must return T
+        CHECK((std::is_same<json::value_type, json>::value));
+
+        // X::reference must return lvalue of T
+        CHECK((std::is_same<json::reference, json&>::value));
+
+        // X::const_reference must return const lvalue of T
+        CHECK((std::is_same<json::const_reference, const json&>::value));
+
+        // X::iterator must return iterator whose value_type is T
+        CHECK((std::is_same<json::iterator::value_type, json>::value));
+        // X::iterator must meet the forward iterator requirements
+        CHECK((std::is_base_of<std::forward_iterator_tag, typename std::iterator_traits<json::iterator>::iterator_category>::value));
+        // X::iterator must be convertible to X::const_iterator
+        CHECK((std::is_convertible<json::iterator, json::const_iterator>::value));
+
+        // X::const_iterator must return iterator whose value_type is T
+        CHECK((std::is_same<json::const_iterator::value_type, json>::value));
+        // X::const_iterator must meet the forward iterator requirements
+        CHECK((std::is_base_of<std::forward_iterator_tag, typename std::iterator_traits<json::const_iterator>::iterator_category>::value));
+
+        // X::difference_type must return a signed integer
+        CHECK((std::is_signed<json::difference_type>::value));
+        // X::difference_type must be identical to X::iterator::difference_type
+        CHECK((std::is_same<json::difference_type, json::iterator::difference_type>::value));
+        // X::difference_type must be identical to X::const_iterator::difference_type
+        CHECK((std::is_same<json::difference_type, json::const_iterator::difference_type>::value));
+
+        // X::size_type must return an unsigned integer
+        CHECK((std::is_unsigned<json::size_type>::value));
+        // X::size_type can represent any non-negative value of X::difference_type
+
+        // the expression "X u" has the post-condition "u.empty()"
+        {
+            json u;
+            CHECK(u.empty());
+        }
+
+        // the expression "X()" has the post-condition "X().empty()"
+        CHECK(json().empty());
+    }
+
     SECTION("class json")
     {
         SECTION("DefaultConstructible")