One soversion per library
diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
index 5632d3b..60b3f8b 100644
--- a/library/CMakeLists.txt
+++ b/library/CMakeLists.txt
@@ -144,11 +144,11 @@
 
 if(USE_SHARED_MBEDTLS_LIBRARY)
     add_library(mbedcrypto SHARED ${src_crypto})
-    set_target_properties(mbedcrypto PROPERTIES VERSION 1.4.0 SOVERSION 8)
+    set_target_properties(mbedcrypto PROPERTIES VERSION 1.4.0 SOVERSION 0)
     target_link_libraries(mbedcrypto ${libs})
 
     add_library(mbedx509 SHARED ${src_x509})
-    set_target_properties(mbedx509 PROPERTIES VERSION 1.4.0 SOVERSION 8)
+    set_target_properties(mbedx509 PROPERTIES VERSION 1.4.0 SOVERSION 0)
     target_link_libraries(mbedx509 ${libs} mbedcrypto)
 
     add_library(mbedtls SHARED ${src_tls})
diff --git a/library/Makefile b/library/Makefile
index 9fd7f81..4147bbe 100644
--- a/library/Makefile
+++ b/library/Makefile
@@ -31,7 +31,9 @@
 endif
 endif
 
-SOEXT=so.8
+SOEXT_TLS=so.8
+SOEXT_X509=so.0
+SOEXT_CRYPTO=so.0
 
 DLEXT=so
 # OSX shared library extension:
@@ -93,13 +95,13 @@
 	echo "  RL    $@"
 	$(AR) s $@
 
-libmbedtls.$(SOEXT): $(OBJS_TLS)
+libmbedtls.$(SOEXT_TLS): $(OBJS_TLS)
 	echo "  LD    $@"
 	$(CC) -shared -Wl,-soname,$@ $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS_TLS)
 
-libmbedtls.so: libmbedtls.$(SOEXT)
-	echo "  LN    $@ -> libmbedtls.$(SOEXT)"
-	ln -sf libmbedtls.$(SOEXT) $@
+libmbedtls.so: libmbedtls.$(SOEXT_TLS)
+	echo "  LN    $@ -> $<"
+	ln -sf $< $@
 
 libmbedtls.dylib: $(OBJS_TLS)
 	echo "  LD    $@"
@@ -116,13 +118,13 @@
 	echo "  RL    $@"
 	$(AR) s $@
 
-libmbedx509.$(SOEXT): $(OBJS_X509)
+libmbedx509.$(SOEXT_X509): $(OBJS_X509)
 	echo "  LD    $@"
 	$(CC) -shared -Wl,-soname,$@ $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS_X509)
 
-libmbedx509.so: libmbedx509.$(SOEXT)
-	echo "  LN    $@ -> libmbedx509.$(SOEXT)"
-	ln -sf libmbedx509.$(SOEXT) $@
+libmbedx509.so: libmbedx509.$(SOEXT_X509)
+	echo "  LN    $@ -> $<"
+	ln -sf $< $@
 
 libmbedx509.dylib: $(OBJS_X509)
 	echo "  LD    $@"
@@ -139,13 +141,13 @@
 	echo "  RL    $@"
 	$(AR) s $@
 
-libmbedcrypto.$(SOEXT): $(OBJS_CRYPTO)
+libmbedcrypto.$(SOEXT_CRYPTO): $(OBJS_CRYPTO)
 	echo "  LD    $@"
-	$(CC) -shared -Wl,-soname,$@ $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS_CRYPTO)
+	$(CC) -shared -Wl,-soname,$@ $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS_CRYPTO_CRYPTO)
 
-libmbedcrypto.so: libmbedcrypto.$(SOEXT)
-	echo "  LN    $@ -> libmbedcrypto.$(SOEXT)"
-	ln -sf libmbedcrypto.$(SOEXT) $@
+libmbedcrypto.so: libmbedcrypto.$(SOEXT_CRYPTO)
+	echo "  LN    $@ -> $<"
+	ln -sf $< $@
 
 libmbedcrypto.dylib: $(OBJS_CRYPTO)
 	echo "  LD    $@"
diff --git a/scripts/bump_version.sh b/scripts/bump_version.sh
index 2b7c19c..8e77105 100755
--- a/scripts/bump_version.sh
+++ b/scripts/bump_version.sh
@@ -13,9 +13,17 @@
       shift
       VERSION=$1
       ;;
-    --soversion)
+    --so-crypto)
       shift
-      SOVERSION=$1
+      SO_CRYPTO=$1
+      ;;
+    --so-x509)
+      shift
+      SO_X509=$1
+      ;;
+    --so-tls)
+      shift
+      SO_TLS=$1
       ;;
     -v|--verbose)
       # Be verbose
@@ -24,9 +32,11 @@
     -h|--help)
       # print help
       echo "Usage: $0"
-      echo -e "  -h|--help\t\t\tPrint this help."
+      echo -e "  -h|--help\t\tPrint this help."
       echo -e "  --version <version>\tVersion to bump to."
-      echo -e "  --soversion <version>\tSO version to bump to."
+      echo -e "  --so-crypto <version>\tSO version to bump libmbedcrypto to."
+      echo -e "  --so-x509 <version>\tSO version to bump libmbedx509 to."
+      echo -e "  --so-tls <version>\tSO version to bump libmbedtls to."
       echo -e "  -v|--verbose\t\tVerbose."
       exit 1
       ;;
@@ -49,14 +59,36 @@
 sed -e "s/ VERSION [0-9.]\{1,\}/ VERSION $VERSION/g" < library/CMakeLists.txt > tmp
 mv tmp library/CMakeLists.txt
 
-if [ "X" != "X$SOVERSION" ];
+if [ "X" != "X$SO_CRYPTO" ];
 then
-  [ $VERBOSE ] && echo "Bumping SOVERSION in library/CMakeLists.txt"
-  sed -e "s/ SOVERSION [0-9]\{1,\}/ SOVERSION $SOVERSION/g" < library/CMakeLists.txt > tmp
+  [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedcrypto in library/CMakeLists.txt"
+  sed -e "/mbedcrypto/ s/ SOVERSION [0-9]\{1,\}/ SOVERSION $SO_CRYPTO/g" < library/CMakeLists.txt > tmp
   mv tmp library/CMakeLists.txt
 
-  [ $VERBOSE ] && echo "Bumping SOVERSION in library/Makefile"
-  sed -e "s/SOEXT=so.[0-9]\{1,\}/SOEXT=so.$SOVERSION/g" < library/Makefile > tmp
+  [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedcrypto in library/Makefile"
+  sed -e "s/SOEXT_CRYPTO=so.[0-9]\{1,\}/SOEXT_CRYPTO=so.$SO_CRYPTO/g" < library/Makefile > tmp
+  mv tmp library/Makefile
+fi
+
+if [ "X" != "X$SO_X509" ];
+then
+  [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedx509 in library/CMakeLists.txt"
+  sed -e "/mbedx509/ s/ SOVERSION [0-9]\{1,\}/ SOVERSION $SO_X509/g" < library/CMakeLists.txt > tmp
+  mv tmp library/CMakeLists.txt
+
+  [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedx509 in library/Makefile"
+  sed -e "s/SOEXT_X509=so.[0-9]\{1,\}/SOEXT_X509=so.$SO_X509/g" < library/Makefile > tmp
+  mv tmp library/Makefile
+fi
+
+if [ "X" != "X$SO_TLS" ];
+then
+  [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedtls in library/CMakeLists.txt"
+  sed -e "/mbedtls/ s/ SOVERSION [0-9]\{1,\}/ SOVERSION $SO_TLS/g" < library/CMakeLists.txt > tmp
+  mv tmp library/CMakeLists.txt
+
+  [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedtls in library/Makefile"
+  sed -e "s/SOEXT_TLS=so.[0-9]\{1,\}/SOEXT_TLS=so.$SO_TLS/g" < library/Makefile > tmp
   mv tmp library/Makefile
 fi