diff --git a/src/IhtaAddLibrary.cmake b/src/IhtaAddLibrary.cmake
index 51a48aaa5e44e129689ce2039c28ba60b946bde2..46197f70cacd0dbd0631c0b92e2a44ebec0c441a 100644
--- a/src/IhtaAddLibrary.cmake
+++ b/src/IhtaAddLibrary.cmake
@@ -23,25 +23,44 @@ include_guard ()
 
 #]=======================================================================]
 macro (ihta_add_library)
-	set (options)
-	set (oneValueArgs NAMESPACE NAME LIBRARY_TYPE INCLUDE_DIR INSTALL_INCLUDE_DIR IDE_FOLDER)
-	set (multiValueArgs SOURCES)
+	set (options TEST_INPLACE TEST_INTERNALS)
+	set (
+		oneValueArgs
+		NAMESPACE
+		NAME
+		LIBRARY_TYPE
+		INCLUDE_DIR
+		INSTALL_INCLUDE_DIR
+		IDE_FOLDER
+		OBJECT_LIB_POSTFIX
+		OUT_VAR
+	)
+	set (multiValueArgs SOURCES TEST_SOURCES)
 	cmake_parse_arguments (IHTA_ADD_LIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 
 	if (DEFINED IHTA_ADD_LIB_LIBRARY_TYPE)
-		set (IHTA_ADD_LIB_TYPES "STATIC" "SHARED" "INTERFACE" "OBJECT")
+		set (IHTA_ADD_LIB_TYPES "STATIC" "SHARED")
 		if (NOT (${IHTA_ADD_LIB_LIBRARY_TYPE} IN_LIST IHTA_ADD_LIB_TYPES))
 			message (
 				FATAL_ERROR
 					"ihta_add_library only supports the following LIBRARY_TYPE's: STATIC, SHARED, INTERFACE or OBJECT"
 			)
 		endif ()
+	else ()
+		set (IHTA_ADD_LIB_TYPES STATIC)
+		if (BUILD_SHARED_LIBS)
+			set (IHTA_ADD_LIB_TYPES SHARED)
+		endif ()
 	endif ()
 
 	if (NOT DEFINED IHTA_ADD_LIB_INCLUDE_DIR)
 		set (IHTA_ADD_LIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
 	endif ()
 
+	if (NOT DEFINED IHTA_ADD_LIB_OBJECT_LIB_POSTFIX)
+		set (IHTA_ADD_LIB_OBJECT_LIB_POSTFIX _object)
+	endif ()
+
 	if (DEFINED IHTA_ADD_LIB_NAMESPACE AND NOT DEFINED IHTA_ADD_LIB_IDE_FOLDER)
 		set (IHTA_ADD_LIB_IDE_FOLDER ${IHTA_ADD_LIB_NAMESPACE})
 	elseif (NOT DEFINED IHTA_ADD_LIB_NAMESPACE AND DEFINED IHTA_ADD_LIB_IDE_FOLDER)
@@ -50,25 +69,36 @@ macro (ihta_add_library)
 		message (FATAL_ERROR "ihta_add_library requires to set either a NAMESPACE or an IDE_FOLDER")
 	endif ()
 
-	add_library (${IHTA_ADD_LIB_NAME} ${IHTA_ADD_LIB_LIBRARY_TYPE} "")
-	add_library (${IHTA_ADD_LIB_NAMESPACE}::${IHTA_ADD_LIB_NAME} ALIAS ${IHTA_ADD_LIB_NAME})
+	if (IHTA_ADD_LIB_TEST_INPLACE OR IHTA_ADD_LIB_TEST_INTERNALS)
+		# todo
+	else ()
+		set (IHTA_ADD_LIB_TARGET ${IHTA_ADD_LIB_NAME})
 
-	target_sources (${IHTA_ADD_LIB_NAME} PRIVATE ${IHTA_ADD_LIB_SOURCES})
+		add_library (${IHTA_ADD_LIB_NAME} ${IHTA_ADD_LIB_LIBRARY_TYPE} "")
+		add_library (${IHTA_ADD_LIB_NAMESPACE}::${IHTA_ADD_LIB_NAME} ALIAS ${IHTA_ADD_LIB_NAME})
+
+		target_sources (${IHTA_ADD_LIB_NAME} PRIVATE ${IHTA_ADD_LIB_SOURCES})
+	endif ()
 
 	# Include Directory
 	target_include_directories (
-		${IHTA_ADD_LIB_NAME} PUBLIC $<BUILD_INTERFACE:${IHTA_ADD_LIB_INCLUDE_DIR}>
-									$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${IHTA_ADD_LIB_INSTALL_INCLUDE_DIR}>
+		${IHTA_ADD_LIB_TARGET}
+		PUBLIC $<BUILD_INTERFACE:${IHTA_ADD_LIB_INCLUDE_DIR}>
+			   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${IHTA_ADD_LIB_INSTALL_INCLUDE_DIR}>
 	)
 
 	# Required compiler features
-	target_compile_features (${IHTA_ADD_LIB_NAME} PUBLIC cxx_std_17)
+	target_compile_features (${IHTA_ADD_LIB_TARGET} PUBLIC cxx_std_17)
 
 	# If build out of parent project, add parent folder library to parent project folder
 	if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
-		set_property (TARGET ${IHTA_ADD_LIB_NAME} PROPERTY FOLDER ${IHTA_ADD_LIB_IDE_FOLDER})
+		set_property (TARGET ${IHTA_ADD_LIB_TARGET} PROPERTY FOLDER ${IHTA_ADD_LIB_IDE_FOLDER})
 	endif ()
 
 	# Organize sources in folders
-	GroupSourcesByFolder (${IHTA_ADD_LIB_NAME})
+	GroupSourcesByFolder (${IHTA_ADD_LIB_TARGET})
+
+	if (IHTA_ADD_LIB_OUT_VAR)
+		set (${IHTA_ADD_LIB_OUT_VAR} ${IHTA_ADD_LIB_TARGET})
+	endif ()
 endmacro ()