Index: uspace/lib/cpp/include/__bits/hash_table.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/hash_table.hpp	(revision b3b8405f1260b5ae4a1e00d8a47f2dbc7c4adb32)
+++ uspace/lib/cpp/include/__bits/hash_table.hpp	(revision 8a8a9273c13177ca6277765605879db5859330b5)
@@ -31,5 +31,5 @@
 
 #include <cstdlib>
-#include <__bits/list.hpp>
+#include <__bits/list_node.hpp>
 #include <__bits/key_extractors.hpp>
 #include <__bits/hash_table_iterators.hpp>
Index: uspace/lib/cpp/include/__bits/hash_table_bucket.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/hash_table_bucket.hpp	(revision b3b8405f1260b5ae4a1e00d8a47f2dbc7c4adb32)
+++ uspace/lib/cpp/include/__bits/hash_table_bucket.hpp	(revision 8a8a9273c13177ca6277765605879db5859330b5)
@@ -30,5 +30,5 @@
 #define LIBCPP_BITS_HASH_TABLE_BUCKET
 
-#include <__bits/list.hpp>
+#include <__bits/list_node.hpp>
 
 namespace std::aux
Index: uspace/lib/cpp/include/__bits/hash_table_iterators.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/hash_table_iterators.hpp	(revision b3b8405f1260b5ae4a1e00d8a47f2dbc7c4adb32)
+++ uspace/lib/cpp/include/__bits/hash_table_iterators.hpp	(revision 8a8a9273c13177ca6277765605879db5859330b5)
@@ -31,5 +31,5 @@
 
 #include <__bits/iterator.hpp>
-#include <__bits/list.hpp>
+#include <__bits/list_node.hpp>
 #include <__bits/hash_table_bucket.hpp>
 #include <iterator>
Index: uspace/lib/cpp/include/__bits/list.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/list.hpp	(revision b3b8405f1260b5ae4a1e00d8a47f2dbc7c4adb32)
+++ 	(revision )
@@ -1,90 +1,0 @@
-/*
- * Copyright (c) 2018 Jaroslav Jindrak
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef LIBCPP_BITS_LIST
-#define LIBCPP_BITS_LIST
-
-namespace std::aux
-{
-    template<class T>
-    struct list_node
-    {
-        T value;
-        list_node* next;
-        list_node* prev;
-
-        template<class... Args>
-        list_node(Args&&... args)
-            : value{forward<Args>(args)...},
-              next{}, prev{}
-        {
-            next = this;
-            prev = this;
-        }
-
-        list_node(const T& val)
-            : value{val}, next{}, prev{}
-        {
-            next = this;
-            prev = this;
-        }
-
-        list_node(T&& val)
-            : value{forward<T>(val)}, next{}, prev{}
-        {
-            next = this;
-            prev = this;
-        }
-
-        void append(list_node* node)
-        {
-            node->next = next;
-            node->prev = this;
-            next->prev = node;
-            next = node;
-        }
-
-        void prepend(list_node* node)
-        {
-            node->next = this;
-            node->prev = prev;
-            prev->next = node;
-            prev = node;
-        }
-
-        void unlink()
-        {
-            prev->next = next;
-            next->prev = prev;
-            next = this;
-            prev = this;
-        }
-    };
-}
-
-#endif
Index: uspace/lib/cpp/include/__bits/list_node.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/list_node.hpp	(revision 8a8a9273c13177ca6277765605879db5859330b5)
+++ uspace/lib/cpp/include/__bits/list_node.hpp	(revision 8a8a9273c13177ca6277765605879db5859330b5)
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2018 Jaroslav Jindrak
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LIBCPP_BITS_LIST_NODE
+#define LIBCPP_BITS_LIST_NODE
+
+namespace std::aux
+{
+    template<class T>
+    struct list_node
+    {
+        T value;
+        list_node* next;
+        list_node* prev;
+
+        template<class... Args>
+        list_node(Args&&... args)
+            : value{forward<Args>(args)...},
+              next{}, prev{}
+        {
+            next = this;
+            prev = this;
+        }
+
+        list_node(const T& val)
+            : value{val}, next{}, prev{}
+        {
+            next = this;
+            prev = this;
+        }
+
+        list_node(T&& val)
+            : value{forward<T>(val)}, next{}, prev{}
+        {
+            next = this;
+            prev = this;
+        }
+
+        void append(list_node* node)
+        {
+            node->next = next;
+            node->prev = this;
+            next->prev = node;
+            next = node;
+        }
+
+        void prepend(list_node* node)
+        {
+            node->next = this;
+            node->prev = prev;
+            prev->next = node;
+            prev = node;
+        }
+
+        void unlink()
+        {
+            prev->next = next;
+            next->prev = prev;
+            next = this;
+            prev = this;
+        }
+    };
+}
+
+#endif
Index: uspace/lib/cpp/include/__bits/string.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/string.hpp	(revision b3b8405f1260b5ae4a1e00d8a47f2dbc7c4adb32)
+++ 	(revision )
@@ -1,192 +1,0 @@
-/*
- * Copyright (c) 2017 Jaroslav Jindrak
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef LIBCPP_BITS_STRING
-#define LIBCPP_BITS_STRING
-
-#include <ios>
-#include <string>
-
-namespace std
-{
-    /**
-     * 21.4.8.9, inserters and extractors:
-     */
-
-    template<class Char, class Traits, class Allocator>
-    basic_istream<Char, Traits>& operator>>(basic_istream<Char, Traits>& is,
-                                            basic_string<Char, Traits, Allocator>& str)
-    {
-        using sentry = typename basic_istream<Char, Traits>::sentry;
-        sentry sen{is, false};
-
-        if (sen)
-        {
-            str.erase();
-
-            auto max_size = is.width();
-            if (max_size <= 0)
-                max_size = static_cast<streamsize>(str.max_size());
-
-            streamsize i{};
-            for(; i < max_size; ++i)
-            {
-                auto ic = is.rdbuf()->sgetc();
-                if (Traits::eq_int_type(ic, Traits::eof()))
-                {
-                    is.setstate(ios_base::eofbit);
-                    break;
-                }
-
-                auto c = Traits::to_char_type(ic);
-                if(isspace(c, is.getloc()))
-                    break;
-
-                str.push_back(c);
-                is.rdbuf()->sbumpc();
-            }
-
-            if (i == 0)
-                is.setstate(ios_base::failbit);
-        }
-        else
-            is.setstate(ios_base::failbit);
-
-        return is;
-    }
-
-    template<class Char, class Traits, class Allocator>
-    basic_ostream<Char, Traits>& operator<<(basic_ostream<Char, Traits>& os,
-                                            const basic_string<Char, Traits, Allocator>& str)
-    {
-        // TODO: determine padding as described in 27.7.3.6.1
-        using sentry = typename basic_ostream<Char, Traits>::sentry;
-        sentry sen{os};
-
-        if (sen)
-        {
-            auto width = os.width();
-            auto size = str.size();
-
-            size_t to_pad{};
-            if (width > 0)
-                to_pad = (static_cast<size_t>(width) - size);
-
-            if (to_pad > 0)
-            {
-                if ((os.flags() & ios_base::adjustfield) != ios_base::left)
-                {
-                    for (std::size_t i = 0; i < to_pad; ++i)
-                        os.put(os.fill());
-                }
-
-                os.rdbuf()->sputn(str.data(), size);
-
-                if ((os.flags() & ios_base::adjustfield) == ios_base::left)
-                {
-                    for (std::size_t i = 0; i < to_pad; ++i)
-                        os.put(os.fill());
-                }
-            }
-            else
-                os.rdbuf()->sputn(str.data(), size);
-
-            os.width(0);
-        }
-
-        return os;
-    }
-
-    template<class Char, class Traits, class Allocator>
-    basic_istream<Char, Traits>& getline(basic_istream<Char, Traits>& is,
-                                         basic_string<Char, Traits, Allocator>& str,
-                                         Char delim)
-    {
-        typename basic_istream<Char, Traits>::sentry sen{is, true};
-
-        if (sen)
-        {
-            str.clear();
-            streamsize count{};
-
-            while (true)
-            {
-                auto ic = is.rdbuf()->sbumpc();
-                if (Traits::eq_int_type(ic, Traits::eof()))
-                {
-                    is.setstate(ios_base::eofbit);
-                    break;
-                }
-
-                auto c = Traits::to_char_type(ic);
-                if (Traits::eq(c, delim))
-                    break;
-
-                str.push_back(c);
-                ++count;
-
-                if (count >= static_cast<streamsize>(str.max_size()))
-                {
-                    is.setstate(ios_base::failbit);
-                    break;
-                }
-            }
-
-            if (count == 0)
-                is.setstate(ios_base::failbit);
-        }
-        else
-            is.setstate(ios_base::failbit);
-
-        return is;
-    }
-
-    template<class Char, class Traits, class Allocator>
-    basic_istream<Char, Traits>& getline(basic_istream<Char, Traits>&& is,
-                                         basic_string<Char, Traits, Allocator>& str,
-                                         Char delim)
-    {
-        return getline(is, str, delim);
-    }
-
-    template<class Char, class Traits, class Allocator>
-    basic_istream<Char, Traits>& getline(basic_istream<Char, Traits>& is,
-                                         basic_string<Char, Traits, Allocator>& str)
-    {
-        return getline(is, str, is.widen('\n'));
-    }
-
-    template<class Char, class Traits, class Allocator>
-    basic_istream<Char, Traits>& getline(basic_istream<Char, Traits>&& is,
-                                         basic_string<Char, Traits, Allocator>& str)
-    {
-        return getline(is, str, is.widen('\n'));
-    }
-}
-
-#endif
Index: uspace/lib/cpp/include/__bits/string_io.hpp
===================================================================
--- uspace/lib/cpp/include/__bits/string_io.hpp	(revision 8a8a9273c13177ca6277765605879db5859330b5)
+++ uspace/lib/cpp/include/__bits/string_io.hpp	(revision 8a8a9273c13177ca6277765605879db5859330b5)
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2017 Jaroslav Jindrak
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LIBCPP_BITS_STRING_IO
+#define LIBCPP_BITS_STRING_IO
+
+#include <ios>
+#include <string>
+
+namespace std
+{
+    /**
+     * 21.4.8.9, inserters and extractors:
+     */
+
+    template<class Char, class Traits, class Allocator>
+    basic_istream<Char, Traits>& operator>>(basic_istream<Char, Traits>& is,
+                                            basic_string<Char, Traits, Allocator>& str)
+    {
+        using sentry = typename basic_istream<Char, Traits>::sentry;
+        sentry sen{is, false};
+
+        if (sen)
+        {
+            str.erase();
+
+            auto max_size = is.width();
+            if (max_size <= 0)
+                max_size = static_cast<streamsize>(str.max_size());
+
+            streamsize i{};
+            for(; i < max_size; ++i)
+            {
+                auto ic = is.rdbuf()->sgetc();
+                if (Traits::eq_int_type(ic, Traits::eof()))
+                {
+                    is.setstate(ios_base::eofbit);
+                    break;
+                }
+
+                auto c = Traits::to_char_type(ic);
+                if(isspace(c, is.getloc()))
+                    break;
+
+                str.push_back(c);
+                is.rdbuf()->sbumpc();
+            }
+
+            if (i == 0)
+                is.setstate(ios_base::failbit);
+        }
+        else
+            is.setstate(ios_base::failbit);
+
+        return is;
+    }
+
+    template<class Char, class Traits, class Allocator>
+    basic_ostream<Char, Traits>& operator<<(basic_ostream<Char, Traits>& os,
+                                            const basic_string<Char, Traits, Allocator>& str)
+    {
+        // TODO: determine padding as described in 27.7.3.6.1
+        using sentry = typename basic_ostream<Char, Traits>::sentry;
+        sentry sen{os};
+
+        if (sen)
+        {
+            auto width = os.width();
+            auto size = str.size();
+
+            size_t to_pad{};
+            if (width > 0)
+                to_pad = (static_cast<size_t>(width) - size);
+
+            if (to_pad > 0)
+            {
+                if ((os.flags() & ios_base::adjustfield) != ios_base::left)
+                {
+                    for (std::size_t i = 0; i < to_pad; ++i)
+                        os.put(os.fill());
+                }
+
+                os.rdbuf()->sputn(str.data(), size);
+
+                if ((os.flags() & ios_base::adjustfield) == ios_base::left)
+                {
+                    for (std::size_t i = 0; i < to_pad; ++i)
+                        os.put(os.fill());
+                }
+            }
+            else
+                os.rdbuf()->sputn(str.data(), size);
+
+            os.width(0);
+        }
+
+        return os;
+    }
+
+    template<class Char, class Traits, class Allocator>
+    basic_istream<Char, Traits>& getline(basic_istream<Char, Traits>& is,
+                                         basic_string<Char, Traits, Allocator>& str,
+                                         Char delim)
+    {
+        typename basic_istream<Char, Traits>::sentry sen{is, true};
+
+        if (sen)
+        {
+            str.clear();
+            streamsize count{};
+
+            while (true)
+            {
+                auto ic = is.rdbuf()->sbumpc();
+                if (Traits::eq_int_type(ic, Traits::eof()))
+                {
+                    is.setstate(ios_base::eofbit);
+                    break;
+                }
+
+                auto c = Traits::to_char_type(ic);
+                if (Traits::eq(c, delim))
+                    break;
+
+                str.push_back(c);
+                ++count;
+
+                if (count >= static_cast<streamsize>(str.max_size()))
+                {
+                    is.setstate(ios_base::failbit);
+                    break;
+                }
+            }
+
+            if (count == 0)
+                is.setstate(ios_base::failbit);
+        }
+        else
+            is.setstate(ios_base::failbit);
+
+        return is;
+    }
+
+    template<class Char, class Traits, class Allocator>
+    basic_istream<Char, Traits>& getline(basic_istream<Char, Traits>&& is,
+                                         basic_string<Char, Traits, Allocator>& str,
+                                         Char delim)
+    {
+        return getline(is, str, delim);
+    }
+
+    template<class Char, class Traits, class Allocator>
+    basic_istream<Char, Traits>& getline(basic_istream<Char, Traits>& is,
+                                         basic_string<Char, Traits, Allocator>& str)
+    {
+        return getline(is, str, is.widen('\n'));
+    }
+
+    template<class Char, class Traits, class Allocator>
+    basic_istream<Char, Traits>& getline(basic_istream<Char, Traits>&& is,
+                                         basic_string<Char, Traits, Allocator>& str)
+    {
+        return getline(is, str, is.widen('\n'));
+    }
+}
+
+#endif
Index: uspace/lib/cpp/include/impl/list.hpp
===================================================================
--- uspace/lib/cpp/include/impl/list.hpp	(revision b3b8405f1260b5ae4a1e00d8a47f2dbc7c4adb32)
+++ uspace/lib/cpp/include/impl/list.hpp	(revision 8a8a9273c13177ca6277765605879db5859330b5)
@@ -31,5 +31,5 @@
 
 #include <__bits/insert_iterator.hpp>
-#include <__bits/list.hpp>
+#include <__bits/list_node.hpp>
 #include <cstdlib>
 #include <iterator>
Index: uspace/lib/cpp/include/string
===================================================================
--- uspace/lib/cpp/include/string	(revision b3b8405f1260b5ae4a1e00d8a47f2dbc7c4adb32)
+++ uspace/lib/cpp/include/string	(revision 8a8a9273c13177ca6277765605879db5859330b5)
@@ -28,3 +28,3 @@
 
 #include <impl/string.hpp>
-#include <__bits/string.hpp>
+#include <__bits/string_io.hpp>
