diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..bd5decdcba2af398a1e4be902cf4110f792613e0
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,24 @@
+image: alpine
+
+variables:
+  GIT_SUBMODULE_STRATEGY: recursive
+
+pages:
+  script:
+  - apk update && apk add doxygen ttf-freefont graphviz
+  - doxygen 
+  - mv docs/html/ public/
+  artifacts:
+    paths:
+    - public
+  only:
+  - master
+
+run tests:
+  script:
+  - apk update && apk add g++ make cmake
+  - cd build
+  - cmake ..
+  - make test
+  only:
+  - master
\ No newline at end of file
diff --git a/Doxyfile b/Doxyfile
index 931666d082f932a5e72d8ac56ad68e94e832153e..6c36f6d035cfbad7c1f8cfa75310b93c87fe78d4 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -830,6 +830,7 @@ WARN_LOGFILE           =
 # Note: If this tag is empty the current directory is searched.
 
 INPUT                  = src
+INPUT                 += inc
 INPUT                 += README.md
 
 # This tag can be used to specify the character encoding of the source files
diff --git a/README.md b/README.md
index ac1e2e3a84dfadc5cd97b9c9cc6d3576755b18ae..c35a8becc44d3a197a130de456f98f2a724c77ec 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,12 @@ Instead Ip-Addresses are simply specified as `string` and ports as `uint16_t`
 (in host byte order). All the conversions and Ipv4/Ipv6 differences are handled 
 behind the scenes.
 
+## Documentation
+
+Doxygen documentation of the public API is available on [gitlab-pages](https://istddmue2.h-da.io/netlib). 
+
+Some examples using the library are available in the `example` subdirectory.
+
 ## Usage
 
 This library can be used in many different ways. The most simple of which would 
diff --git a/test/test.cpp b/test/test.cpp
index 4deee8c6190b813c5c509dd7856dae6d80728ae9..2fe4d8382db99da72c2ed408d1b07b7b2feb3153 100644
--- a/test/test.cpp
+++ b/test/test.cpp
@@ -57,7 +57,7 @@ TEST_CASE("Test IpAddr automatic version") {
     bool raw_ip_equal = true;
     for (auto i = 0; i < 16; i++)
     {
-        if (ipv6.raw_addr.v6.__in6_u.__u6_addr8[i] != addrV6bytes[i] )
+        if (((uint8_t*)&ipv6.raw_addr.v6)[i] != addrV6bytes[i] )
             raw_ip_equal = false;
     }
 
@@ -185,7 +185,7 @@ TEST_CASE("Test SockAddr from raw_sockaddr") {
 
     raw6.sin6_family = AF_INET6;
     raw6.sin6_port = htons(1337);
-    memcpy(&raw6.sin6_addr.__in6_u.__u6_addr8[0], ip6_bytes, 16);
+    memcpy(&raw6.sin6_addr, ip6_bytes, 16);
 
     SockAddr sa6((sockaddr*) &raw6, IpAddr::Type::V6);