commit 9d05e41440ae9802bdd1d81c402209c3729f084c
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Thu Apr 9 23:38:40 2015 +0200

    brainfuck

diff --git a/.gitignore b/.gitignore
index 1e75006..63045ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 *.pro.user
 *build
+build-*
diff --git a/build-Example-Desktop-Debug/Makefile b/build-Example-Desktop-Debug/Makefile
deleted file mode 100644
index 0edac80..0000000
--- a/build-Example-Desktop-Debug/Makefile
+++ /dev/null
@@ -1,624 +0,0 @@
-#############################################################################
-# Makefile for building: EntityManager
-# Generated by qmake (3.0) (Qt 5.4.1)
-# Project:  ../example/Example.pro
-# Template: app
-# Command: /usr/lib/qt/bin/qmake -spec linux-g++ CONFIG+=debug -o Makefile ../example/Example.pro
-#############################################################################
-
-MAKEFILE      = Makefile
-
-####### Compiler, tools and options
-
-CC            = gcc
-CXX           = g++
-DEFINES       = -DQT_SQL_LIB -DQT_CORE_LIB
-CFLAGS        = -pipe -g -Wall -W -D_REENTRANT -fPIE $(DEFINES)
-CXXFLAGS      = -pipe -g -Wall -W -D_REENTRANT -fPIE $(DEFINES)
-INCPATH       = -I../example -I. -isystem /usr/include/qt -isystem /usr/include/qt/QtSql -isystem /usr/include/qt/QtCore -I. -I/usr/lib/qt/mkspecs/linux-g++
-QMAKE         = /usr/lib/qt/bin/qmake
-DEL_FILE      = rm -f
-CHK_DIR_EXISTS= test -d
-MKDIR         = mkdir -p
-COPY          = cp -f
-COPY_FILE     = cp -f
-COPY_DIR      = cp -f -R
-INSTALL_FILE  = install -m 644 -p
-INSTALL_PROGRAM = install -m 755 -p
-INSTALL_DIR   = $(COPY_DIR)
-DEL_FILE      = rm -f
-SYMLINK       = ln -f -s
-DEL_DIR       = rmdir
-MOVE          = mv -f
-TAR           = tar -cf
-COMPRESS      = gzip -9f
-DISTNAME      = EntityManager1.0.0
-DISTDIR = /home/cehringfeld/gitrepos/entitymanager/example/.tmp/EntityManager1.0.0
-LINK          = g++
-LFLAGS        = 
-LIBS          = $(SUBLIBS) -lQt5Sql -lQt5Core -lpthread 
-AR            = ar cqs
-RANLIB        = 
-SED           = sed
-STRIP         = strip
-
-####### Output directory
-
-OBJECTS_DIR   = ./
-
-####### Files
-
-SOURCES       = ../example/models/artikel.cpp 
-OBJECTS       = artikel.o
-DIST          = /usr/lib/qt/mkspecs/features/spec_pre.prf \
-		/usr/lib/qt/mkspecs/common/shell-unix.conf \
-		/usr/lib/qt/mkspecs/common/unix.conf \
-		/usr/lib/qt/mkspecs/common/linux.conf \
-		/usr/lib/qt/mkspecs/common/gcc-base.conf \
-		/usr/lib/qt/mkspecs/common/gcc-base-unix.conf \
-		/usr/lib/qt/mkspecs/common/g++-base.conf \
-		/usr/lib/qt/mkspecs/common/g++-unix.conf \
-		/usr/lib/qt/mkspecs/qconfig.pri \
-		/usr/lib/qt/mkspecs/modules/qt_Attica.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KActivities.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KArchive.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KAuth.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KCrash.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KDESu.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KHtml.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KI18n.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KJS.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KJsEmbed.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KParts.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KPty.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KRunner.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KScreen.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KService.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KWallet.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_core.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_declarative.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_declarative_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_help.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_location.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_network.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_platformsupport_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_script.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \
-		/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_Solid.pri \
-		/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \
-		/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \
-		/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri \
-		/usr/lib/qt/mkspecs/features/qt_functions.prf \
-		/usr/lib/qt/mkspecs/features/qt_config.prf \
-		/usr/lib/qt/mkspecs/linux-g++/qmake.conf \
-		/usr/lib/qt/mkspecs/features/spec_post.prf \
-		/usr/lib/qt/mkspecs/features/exclusive_builds.prf \
-		/usr/lib/qt/mkspecs/features/default_pre.prf \
-		/usr/lib/qt/mkspecs/features/resolve_config.prf \
-		/usr/lib/qt/mkspecs/features/default_post.prf \
-		/usr/lib/qt/mkspecs/features/warn_on.prf \
-		/usr/lib/qt/mkspecs/features/qt.prf \
-		/usr/lib/qt/mkspecs/features/resources.prf \
-		/usr/lib/qt/mkspecs/features/moc.prf \
-		/usr/lib/qt/mkspecs/features/unix/thread.prf \
-		/usr/lib/qt/mkspecs/features/testcase_targets.prf \
-		/usr/lib/qt/mkspecs/features/exceptions.prf \
-		/usr/lib/qt/mkspecs/features/yacc.prf \
-		/usr/lib/qt/mkspecs/features/lex.prf \
-		../example/Example.pro ../example/models/artikel.h ../example/models/artikel.cpp
-QMAKE_TARGET  = EntityManager
-DESTDIR       = #avoid trailing-slash linebreak
-TARGET        = EntityManager
-
-
-first: all
-####### Implicit rules
-
-.SUFFIXES: .o .c .cpp .cc .cxx .C
-
-.cpp.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.cc.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.cxx.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.C.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
-
-.c.o:
-	$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
-
-####### Build rules
-
-$(TARGET):  $(OBJECTS)  
-	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
-
-Makefile: ../example/Example.pro /usr/lib/qt/mkspecs/linux-g++/qmake.conf /usr/lib/qt/mkspecs/features/spec_pre.prf \
-		/usr/lib/qt/mkspecs/common/shell-unix.conf \
-		/usr/lib/qt/mkspecs/common/unix.conf \
-		/usr/lib/qt/mkspecs/common/linux.conf \
-		/usr/lib/qt/mkspecs/common/gcc-base.conf \
-		/usr/lib/qt/mkspecs/common/gcc-base-unix.conf \
-		/usr/lib/qt/mkspecs/common/g++-base.conf \
-		/usr/lib/qt/mkspecs/common/g++-unix.conf \
-		/usr/lib/qt/mkspecs/qconfig.pri \
-		/usr/lib/qt/mkspecs/modules/qt_Attica.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KActivities.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KArchive.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KAuth.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KCrash.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KDESu.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KHtml.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KI18n.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KJS.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KJsEmbed.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KParts.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KPty.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KRunner.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KScreen.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KService.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KWallet.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \
-		/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_core.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_declarative.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_declarative_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_help.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_location.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_network.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_platformsupport_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_script.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \
-		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
-		/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \
-		/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri \
-		/usr/lib/qt/mkspecs/modules/qt_Solid.pri \
-		/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \
-		/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \
-		/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri \
-		/usr/lib/qt/mkspecs/features/qt_functions.prf \
-		/usr/lib/qt/mkspecs/features/qt_config.prf \
-		/usr/lib/qt/mkspecs/linux-g++/qmake.conf \
-		/usr/lib/qt/mkspecs/features/spec_post.prf \
-		/usr/lib/qt/mkspecs/features/exclusive_builds.prf \
-		/usr/lib/qt/mkspecs/features/default_pre.prf \
-		/usr/lib/qt/mkspecs/features/resolve_config.prf \
-		/usr/lib/qt/mkspecs/features/default_post.prf \
-		/usr/lib/qt/mkspecs/features/warn_on.prf \
-		/usr/lib/qt/mkspecs/features/qt.prf \
-		/usr/lib/qt/mkspecs/features/resources.prf \
-		/usr/lib/qt/mkspecs/features/moc.prf \
-		/usr/lib/qt/mkspecs/features/unix/thread.prf \
-		/usr/lib/qt/mkspecs/features/testcase_targets.prf \
-		/usr/lib/qt/mkspecs/features/exceptions.prf \
-		/usr/lib/qt/mkspecs/features/yacc.prf \
-		/usr/lib/qt/mkspecs/features/lex.prf \
-		../example/Example.pro \
-		/usr/lib/libQt5Sql.prl \
-		/usr/lib/libQt5Core.prl
-	$(QMAKE) -spec linux-g++ CONFIG+=debug -o Makefile ../example/Example.pro
-/usr/lib/qt/mkspecs/features/spec_pre.prf:
-/usr/lib/qt/mkspecs/common/shell-unix.conf:
-/usr/lib/qt/mkspecs/common/unix.conf:
-/usr/lib/qt/mkspecs/common/linux.conf:
-/usr/lib/qt/mkspecs/common/gcc-base.conf:
-/usr/lib/qt/mkspecs/common/gcc-base-unix.conf:
-/usr/lib/qt/mkspecs/common/g++-base.conf:
-/usr/lib/qt/mkspecs/common/g++-unix.conf:
-/usr/lib/qt/mkspecs/qconfig.pri:
-/usr/lib/qt/mkspecs/modules/qt_Attica.pri:
-/usr/lib/qt/mkspecs/modules/qt_KActivities.pri:
-/usr/lib/qt/mkspecs/modules/qt_KArchive.pri:
-/usr/lib/qt/mkspecs/modules/qt_KAuth.pri:
-/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri:
-/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri:
-/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri:
-/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri:
-/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri:
-/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri:
-/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri:
-/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri:
-/usr/lib/qt/mkspecs/modules/qt_KCrash.pri:
-/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri:
-/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri:
-/usr/lib/qt/mkspecs/modules/qt_KDESu.pri:
-/usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri:
-/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri:
-/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri:
-/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri:
-/usr/lib/qt/mkspecs/modules/qt_KHtml.pri:
-/usr/lib/qt/mkspecs/modules/qt_KI18n.pri:
-/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri:
-/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri:
-/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri:
-/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri:
-/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri:
-/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri:
-/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri:
-/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri:
-/usr/lib/qt/mkspecs/modules/qt_KJS.pri:
-/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri:
-/usr/lib/qt/mkspecs/modules/qt_KJsEmbed.pri:
-/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri:
-/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri:
-/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri:
-/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri:
-/usr/lib/qt/mkspecs/modules/qt_KParts.pri:
-/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri:
-/usr/lib/qt/mkspecs/modules/qt_KPty.pri:
-/usr/lib/qt/mkspecs/modules/qt_KRunner.pri:
-/usr/lib/qt/mkspecs/modules/qt_KScreen.pri:
-/usr/lib/qt/mkspecs/modules/qt_KService.pri:
-/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri:
-/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri:
-/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri:
-/usr/lib/qt/mkspecs/modules/qt_KWallet.pri:
-/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri:
-/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri:
-/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_core.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_declarative.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_declarative_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_help.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_location.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_network.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_platformsupport_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_script.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri:
-/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri:
-/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri:
-/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri:
-/usr/lib/qt/mkspecs/modules/qt_Solid.pri:
-/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri:
-/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri:
-/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri:
-/usr/lib/qt/mkspecs/features/qt_functions.prf:
-/usr/lib/qt/mkspecs/features/qt_config.prf:
-/usr/lib/qt/mkspecs/linux-g++/qmake.conf:
-/usr/lib/qt/mkspecs/features/spec_post.prf:
-/usr/lib/qt/mkspecs/features/exclusive_builds.prf:
-/usr/lib/qt/mkspecs/features/default_pre.prf:
-/usr/lib/qt/mkspecs/features/resolve_config.prf:
-/usr/lib/qt/mkspecs/features/default_post.prf:
-/usr/lib/qt/mkspecs/features/warn_on.prf:
-/usr/lib/qt/mkspecs/features/qt.prf:
-/usr/lib/qt/mkspecs/features/resources.prf:
-/usr/lib/qt/mkspecs/features/moc.prf:
-/usr/lib/qt/mkspecs/features/unix/thread.prf:
-/usr/lib/qt/mkspecs/features/testcase_targets.prf:
-/usr/lib/qt/mkspecs/features/exceptions.prf:
-/usr/lib/qt/mkspecs/features/yacc.prf:
-/usr/lib/qt/mkspecs/features/lex.prf:
-../example/Example.pro:
-/usr/lib/libQt5Sql.prl:
-/usr/lib/libQt5Core.prl:
-qmake: FORCE
-	@$(QMAKE) -spec linux-g++ CONFIG+=debug -o Makefile ../example/Example.pro
-
-qmake_all: FORCE
-
-
-all: Makefile $(TARGET)
-
-dist: distdir FORCE
-	(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
-
-distdir: FORCE
-	@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
-	$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
-	$(COPY_FILE) --parents ../example/models/artikel.h $(DISTDIR)/
-	$(COPY_FILE) --parents ../example/models/artikel.cpp $(DISTDIR)/
-
-
-clean:compiler_clean 
-	-$(DEL_FILE) $(OBJECTS)
-	-$(DEL_FILE) *~ core *.core
-
-
-distclean: clean 
-	-$(DEL_FILE) $(TARGET) 
-	-$(DEL_FILE) Makefile
-
-
-####### Sub-libraries
-
-mocclean: compiler_moc_header_clean compiler_moc_source_clean
-
-mocables: compiler_moc_header_make_all compiler_moc_source_make_all
-
-check: first
-
-compiler_rcc_make_all:
-compiler_rcc_clean:
-compiler_moc_header_make_all:
-compiler_moc_header_clean:
-compiler_moc_source_make_all:
-compiler_moc_source_clean:
-compiler_yacc_decl_make_all:
-compiler_yacc_decl_clean:
-compiler_yacc_impl_make_all:
-compiler_yacc_impl_clean:
-compiler_lex_make_all:
-compiler_lex_clean:
-compiler_clean: 
-
-####### Compile
-
-artikel.o: ../example/models/artikel.cpp ../example/models/artikel.h
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o artikel.o ../example/models/artikel.cpp
-
-####### Install
-
-install:   FORCE
-
-uninstall:   FORCE
-
-FORCE:
-
diff --git a/example/Example.pro b/example/Example.pro
index e4a1b84..cfc27eb 100644
--- a/example/Example.pro
+++ b/example/Example.pro
@@ -15,9 +15,18 @@ CONFIG   -= app_bundle
 
 TEMPLATE = app
 
-
 HEADERS += \
-    models/artikel.h
+    models/artikel.h \
+    models/person.h \
+    models/group.h
 
 SOURCES += \
-    models/artikel.cpp
+    main.cpp \
+    models/artikel.cpp \
+    models/person.cpp \
+    models/group.cpp
+
+unix:!macx: LIBS += -L$$PWD/../../build-EntityManager-Desktop-Debug -lCuteEntityManager
+INCLUDEPATH += $$PWD/../src
+DEPENDPATH += $$PWD/../src
+CONFIG += c++11
diff --git a/example/main.cpp b/example/main.cpp
index 394518e..f8546d9 100644
--- a/example/main.cpp
+++ b/example/main.cpp
@@ -1,30 +1,62 @@
 #include <QCoreApplication>
-#include "src/entitymanager.h"
 #include <typeinfo>
 #include <QDir>
 #include <QDebug>
+#include "models/artikel.h"
+#include "models/person.h"
+#include <typeinfo>
+#include <QMetaMethod>
+#include <QMetaProperty>
+#include "models/group.h"
+#include "entity.h"
+#include <QGenericReturnArgument>
 /**
   * create,remove und merge funktionieren
  */
 
-int main(int argc, char *argv[])
-{
-    OpenTeacherTool::EntityManager *e = new OpenTeacherTool::EntityManager("QSQLITE",QDir::currentPath() + "/db.sqlite");
+int main(int argc, char *argv[]) {
+//    OpenTeacherTool::EntityManager *e = new OpenTeacherTool::EntityManager("QSQLITE",QDir::currentPath() + "/db.sqlite");
 
-    OpenTeacherTool::Artikel *b= new OpenTeacherTool::Artikel(30,"Peter123");
-    OpenTeacherTool::Entity *entity = b->getEntity();
-    qDebug() << "findByAttributes:" << e->findByAttributes(entity,true);
-    qDebug() << "create:" << e->create(entity);
-    qDebug() << "findAll:" << e->findAll(entity->getTablename());
-    entity->setAttributes(e->findByAttributes(entity,true).at(0));
-    qDebug() << "AttributeValues, Artikel:" << *b->getAttributeValues();
-    b->setName("Peter");
-    b->setPreis(20);
-    e->remove(entity);
-    qDebug() << "TypID:" << typeid(entity).name();
-    qDebug() << entity->getId();
-    qDebug() << "merge:" << e->merge(entity);
-    delete entity;
+//    OpenTeacherTool::Artikel *b= new OpenTeacherTool::Artikel(30,"Peter123");
+//    OpenTeacherTool::Entity *entity = b->getEntity();
+//    qDebug() << "findByAttributes:" << e->findByAttributes(entity,true);
+//    qDebug() << "create:" << e->create(entity);
+//    qDebug() << "findAll:" << e->findAll(entity->getTablename());
+//    entity->setAttributes(e->findByAttributes(entity,true).at(0));
+//    qDebug() << "AttributeValues, Artikel:" << *b->getAttributeValues();
+//    b->setName("Peter");
+//    b->setPreis(20);
+//    e->remove(entity);
+//    qDebug() << "TypID:" << typeid(entity).name();
+//    qDebug() << entity->getId();
+//    qDebug() << "merge:" << e->merge(entity);
+//    delete entity;
+//    Artikel *a = new Artikel(10.0,"pew");
+//    a->setId(100);
+//    qDebug() << a->getTablename();
+//    for (int var = 0; var < a->metaObject()->methodCount(); ++var) {
+//    qDebug() << a->metaObject()->method(var).name();
+//    }
 
+//    Person *b = new Person();
+//    b->setId(110);
+//    qDebug() << b->getTablename();
+//    for (int var = 0; var < b->metaObject()->propertyCount(); ++var) {
+//        qDebug() << b->metaObject()->property(var).name();
+//        qDebug() << b->metaObject()->property(var).read(b);
+//    }
+    Group *g = new Group();
+    for (int var = 0; var < g->metaObject()->propertyCount(); ++var) {
+        qDebug() << "Name:" << g->metaObject()->property(var).name();
+        auto p = g->metaObject()->property(var).read(g);
+        if (QString(p.typeName()).contains("QList")) {
+            auto n = static_cast<QList<CuteEntityManager::Entity *>*>(p.data());
+            qDebug() << "Size:" << n->size();
+            for (int var = 0; var < n->size(); ++var) {
+                CuteEntityManager::Entity *entity = n->at(var);
+                qDebug() << entity->toString();
+            }
+        }
+    }
     return 0;
 }
diff --git a/example/models/artikel.cpp b/example/models/artikel.cpp
index 28f270c..eaef570 100644
--- a/example/models/artikel.cpp
+++ b/example/models/artikel.cpp
@@ -17,62 +17,62 @@
     You should have received a copy of the GNU General Public License
     along with OpenTeacherTool.  If not, see <http://www.gnu.org/licenses/>.
 */
-
 #include "artikel.h"
-namespace OpenTeacherTool {
 
-Artikel::Artikel()
-{
-}
+//QHash<QString, QString> Artikel::getProperties(DatabaseType type) {
+//    QHash<QString, QString> h = QHash<QString, QString>();
+//    h.insert("id",this->idColumnSQL());
+//    h.insert("preis","DOUBLE");
+//    h.insert("name","TEXT");
+//    return h;
+//}
 
-Artikel::Artikel(double preis, QString name) {
-    this->preis = preis;
-    this->name = name;
-}
+//PersistenceType Artikel::getPersistenceType() {
+//    return OpenTeacherTool::LOCAL;
+//}
 
-QHash<QString, QString> Artikel::getProperties(DatabaseType type) {
-    QHash<QString, QString> h = QHash<QString, QString>();
-    h.insert("id",this->idColumnSQL());
-    h.insert("preis","DOUBLE");
-    h.insert("name","TEXT");
-    return h;
-}
+//QHash<QString, Entity*> *Artikel::getRelations() {
+//    return this->relations;
+//}
 
-PersistenceType Artikel::getPersistenceType() {
-    return OpenTeacherTool::LOCAL;
-}
+//QHash<QString, QVariant> *Artikel::getAttributeValues() {
+//    this->attributeValues->insert("id",this->id);
+//    this->attributeValues->insert("name",this->name);
+//    this->attributeValues->insert("preis",this->preis);
+//    return this->attributeValues;
+//}
+
+//void Artikel::setAttributes(QHash<QString, QVariant> h) {
+//    this->id = h.value("id").toInt();
+//    this->name = h.value("name").toString();
+//    this->preis = h.value("preis").toDouble();
+//}
 
-QHash<QString, Entity*> *Artikel::getRelations() {
-    return this->relations;
-}
 
-QHash<QString, QVariant> *Artikel::getAttributeValues() {
-    this->attributeValues->insert("id",this->id);
-    this->attributeValues->insert("name",this->name);
-    this->attributeValues->insert("preis",this->preis);
-    return this->attributeValues;
-}
 
-void Artikel::setAttributes(QHash<QString, QVariant> h) {
-    this->id = h.value("id").toInt();
-    this->name = h.value("name").toString();
-    this->preis = h.value("preis").toDouble();
+double Artikel::getPreis() const {
+    return preis;
 }
 
-QString Artikel::getTablename() {
-    return "artikel";
+void Artikel::setPreis(double value) {
+    preis = value;
 }
 
-void Artikel::setPreis(double preis) {
-    this->preis = preis;
+QString Artikel::getName() const {
+    return name;
 }
 
-void Artikel::setName(QString name) {
-    this->name = name;
+void Artikel::setName(const QString &value) {
+    name = value;
 }
 
 Artikel::~Artikel() {
 
 }
 
+Artikel::Artikel(double preis, QString name) : Entity(){
+    this->preis = preis;
+    this->name = name;
 }
+
+
diff --git a/example/models/artikel.h b/example/models/artikel.h
index 1a9502c..b7a1aa5 100644
--- a/example/models/artikel.h
+++ b/example/models/artikel.h
@@ -20,29 +20,28 @@
 
 #ifndef ARTIKEL_H
 #define ARTIKEL_H
-#include "src/base/entity.h"
+#include "entity.h"
 #include <QHash>
 #include <QVariant>
 
-namespace OpenTeacherTool {
-class Artikel : public Entity
-{
+class Artikel : public CuteEntityManager::Entity {
+    Q_OBJECT
 private:
     double preis;
     QString name;
 
 public:
     ~Artikel();
-    QHash<QString, QString> getProperties(DatabaseType type);
-    PersistenceType getPersistenceType();
-    QHash<QString,Entity*>* getRelations();
-    QHash<QString, QVariant>* getAttributeValues();
-    void setAttributes(QHash<QString, QVariant> h);
-    QString getTablename();
-    void setPreis(double preis);
-    void setName(QString name);
-    Artikel();
+//    QHash<QString, QString> getProperties(DatabaseType type);
+//    PersistenceType getPersistenceType();
+//    QHash<QString,Entity*>* getRelations();
+//    QHash<QString, QVariant>* getAttributeValues();
+//    void setAttributes(QHash<QString, QVariant> h);
+    explicit Artikel(QObject *parent = 0);
     Artikel(double preis, QString name);
+    Q_INVOKABLE double getPreis() const;
+    Q_INVOKABLE void setPreis(double value);
+    Q_INVOKABLE QString getName() const;
+    Q_INVOKABLE void setName(const QString &value);
 };
-}
 #endif // ARTIKEL_H
diff --git a/example/models/group.cpp b/example/models/group.cpp
new file mode 100644
index 0000000..48e5726
--- /dev/null
+++ b/example/models/group.cpp
@@ -0,0 +1,66 @@
+#include "group.h"
+
+#include "models/person.h"
+#include "models/group.h"
+//#include <QQmlListProperty>
+#include <QDebug>
+
+Group::Group() : Entity() {
+    connect(this, SIGNAL(personsChanged()), this, SLOT(personChangedSlot()));
+    qDebug() << "Konstruktor!";
+    persons = QList<Person *>();
+    persons.append(new Person("Vera", "Geseke", Person::FEMALE, "Vera Geseke.jpg", "", "", QDate::currentDate()));
+    persons.append(new Person("Harry", "Hirsch", Person::MALE));
+    persons.append(new Person("Sibylle", "Mentzel", Person::FEMALE, "Sibylle Mentzel.jpg", "", "", QDate::currentDate()));
+}
+
+QList<Person *> Group::getPersons() const {
+    return persons;
+}
+
+void Group::setPersons(const QList<Person *> &value) {
+    qDebug() << "set!!!";
+    persons = value;
+}
+
+
+void Group::personChangedSlot() {
+    qDebug() << "changed!";
+}
+
+//void Group::appendPerson(QQmlListProperty<Person> *list, Person *p) {
+//    Group *group = qobject_cast<Group*>(list->object);
+//    if(group && p) {
+//        group->addPerson(p);
+//        emit group->personsChanged();
+//    }
+//}
+
+//int Group::personsCount(QQmlListProperty<Person>*list)
+//{
+//    Group *group = qobject_cast<Group*>(list->object);
+//    if (group)
+//        return group->m_persons.count();
+//    return 0;
+//}
+
+//Person* Group::personAt(QQmlListProperty<Person> *list, int i)
+//{
+//    Group *group = qobject_cast<Group*>(list->object);
+//    if (group)
+//        return group->m_persons.at(i);
+//    return 0;
+
+//}
+
+//void Group::personsClear(QQmlListProperty<Person> *list)
+//{
+//    Group *group = qobject_cast<Group*>(list->object);
+//    if (group) {
+//        group->m_persons.clear();
+//        emit group->personsChanged();
+//    }
+//}
+
+
+
diff --git a/example/models/group.h b/example/models/group.h
new file mode 100644
index 0000000..7293811
--- /dev/null
+++ b/example/models/group.h
@@ -0,0 +1,92 @@
+#ifndef GROUP_H
+#define GROUP_H
+
+#define BR_PROPERTY(TYPE,NAME,DEFAULT)                  \
+TYPE NAME;                                              \
+TYPE get_##NAME() const { return NAME; }                \
+void set_##NAME(TYPE the_##NAME) { NAME = the_##NAME; } \
+void reset_##NAME() { NAME = DEFAULT; }
+
+
+#include "models/person.h"
+//#include <QQmlListProperty>
+#include <QDebug>
+#include <QList>
+#include <QVariantList>
+//#include <QQuickView>
+
+
+
+class SeatingPlan;
+class Teacher;
+class Person;
+
+
+class Group: public CuteEntityManager::Entity {
+    Q_OBJECT
+    //Q_ENUMS(Gender)
+    //Q_PROPERTY(QList<Person*> persons READ getPersons)
+
+//    Q_PROPERTY(QList<Person*> persons READ get_persons WRITE set_persons RESET reset_persons)
+//    BR_PROPERTY(QList<Person*>, persons, QList<Person*>())
+Q_PROPERTY(QList<Person*> persons READ getPersons WRITE setPersons NOTIFY personsChanged)
+
+  signals:
+    void personsChanged();
+
+  public slots:
+    void personChangedSlot();
+
+  public:
+    // constructor
+    Group();
+
+    // getters
+//    QQmlListProperty <Person> persons();
+
+
+//    static void appendPerson(QQmlListProperty<Person> *list, Person *p);
+//    static int personsCount(QQmlListProperty<Person>*list);
+//    static Person* personAt(QQmlListProperty<Person> *list, int i);
+//    static void personsClear(QQmlListProperty<Person> *list);
+
+    QList <Person *> classPrefects() {
+        return m_classPrefects;
+    }
+    QList <Person *> parentSpeakers() {
+        return m_parentSpeakers;
+    }
+
+    // setters
+    void removePerson(Person *p) {
+        persons.removeOne(p);
+    }
+    void addClassPrefect(Person *p) {
+        m_classPrefects.append(p);
+    }
+    void removeClassPrefect(Person *p) {
+        m_classPrefects.removeOne(p);
+    }
+    void addParentSpeaker(Person *p) {
+        m_parentSpeakers.append(p);
+    }
+    void removeParentSpeaker(Person *p) {
+        m_parentSpeakers.removeOne(p);
+    }
+
+    void addPerson(Person *p) {
+        persons.append(p);
+    }
+
+    QList<Person *> getPersons() const;
+    void setPersons(const QList<Person *> &value);
+
+protected:
+    // members
+    QList<Person*> persons;
+    QList <Person *> m_classPrefects;
+    QList <Person *> m_parentSpeakers;
+
+//    PersonListModel* m_personListModel;
+};
+#endif // GROUP_H
diff --git a/example/models/person.cpp b/example/models/person.cpp
new file mode 100644
index 0000000..66a96ec
--- /dev/null
+++ b/example/models/person.cpp
@@ -0,0 +1,28 @@
+#include "person.h"
+
+QString Person::toString()
+{
+    return Entity::toString() + " " + this->firstName();
+}
+
+Person::Person(QObject *parent) : Entity(parent)
+{
+
+}
+
+Person::Person(QString firstName,
+               QString familyName,
+               Gender gender,
+               QString customPictureFileName,
+               QString namePrefix,
+               QString nickName,
+               QDate birthday,
+               QObject *parent): CuteEntityManager::Entity(parent) {
+    setFirstName(firstName);
+    setFamilyName(familyName);
+    setNamePrefix(namePrefix);
+    setNickName(nickName);
+    setBirthday(birthday);
+    setGender(gender);
+    setCustomPictureFileName(customPictureFileName);
+}
diff --git a/example/models/person.h b/example/models/person.h
new file mode 100644
index 0000000..dac4d82
--- /dev/null
+++ b/example/models/person.h
@@ -0,0 +1,130 @@
+#ifndef PERSON_H
+#define PERSON_H
+
+#include <QDateTime>
+#include <QString>
+#include <QList>
+#include <QObject>
+#include "entity.h"
+#include <QAbstractListModel>
+#include <QDebug>
+
+class Person: public CuteEntityManager::Entity {
+
+    Q_OBJECT
+    Q_ENUMS(Gender)
+
+    //[1] We don't want the id to be set from QML
+    //[2] Notification via inherited signals is not allowed
+    Q_PROPERTY(QString firstName READ firstName WRITE setFirstName NOTIFY firstNameChanged)
+    Q_PROPERTY(QString familyName READ familyName WRITE setFamilyName NOTIFY familyNameChanged)
+    Q_PROPERTY(QString namePrefix READ namePrefix WRITE setNamePrefix NOTIFY namePrefixChanged)
+    Q_PROPERTY(QString nickName READ nickName WRITE setNickName NOTIFY nickNameChanged)
+    Q_PROPERTY(QString customPictureFileName READ customPictureFileName WRITE setCustomPictureFileName NOTIFY
+               customPictureFileNameChanged)
+    Q_PROPERTY(QDate birthday READ birthday WRITE setBirthday NOTIFY birthdayChanged)
+    Q_PROPERTY(Gender gender READ gender WRITE setGender NOTIFY genderChanged)
+
+
+
+  signals:
+    void firstNameChanged();
+    void familyNameChanged();
+    void namePrefixChanged();
+    void nickNameChanged();
+    void birthdayChanged();
+    void genderChanged();
+    void customPictureFileNameChanged();
+
+  public slots:
+    void testSlot() {
+        qDebug() << "testslot clicked";
+    }
+
+  public:
+    QString toString();
+    enum Gender {MALE, FEMALE, UNKNOWNGENDER};
+    Person(QObject *parent=0);
+    Person(QString firstName,
+           QString familyName,
+           Gender gender = Person::UNKNOWNGENDER,
+           QString customPictureFileName = QString(),
+           QString namePrefix = QString(),
+           QString nickName = QString(),
+           QDate birthday = QDate(),
+           QObject *parent = 0);
+
+
+
+    bool isPresent(QDateTime date = QDateTime::currentDateTime());
+    QString fullName();
+
+    // getters
+    QString firstName() const {
+        return m_firstName;
+    }
+    QString familyName() const {
+        return m_familyName;
+    }
+    QString namePrefix() const {
+        return m_namePrefix;
+    }
+    QString nickName() const {
+        return m_nickName;
+    }
+    QDate birthday() const {
+        return m_birthday;
+    }
+    Gender gender() const {
+        return m_gender;
+    }
+    QString customPictureFileName() const {
+        return m_customPictureFileName;
+    }
+
+
+    // setters
+    void setFirstName(QString firstName) {
+        m_firstName = firstName;
+        emit firstNameChanged();
+    }
+    void setFamilyName(QString familyName) {
+        m_familyName = familyName;
+        emit familyNameChanged();
+    }
+    void setNamePrefix(QString namePrefix) {
+        m_namePrefix = namePrefix;
+        emit namePrefixChanged();
+    }
+    void setNickName(QString nickName) {
+        m_nickName = nickName;
+        emit nickNameChanged();
+    }
+    void setBirthday(QDate birthday) {
+        m_birthday = birthday;
+        emit birthdayChanged();
+    }
+    void setGender(Gender gender) {
+        m_gender = gender;
+        emit genderChanged();
+    }
+    void setCustomPictureFileName(QString fileName) {
+        m_customPictureFileName = fileName;
+        emit customPictureFileNameChanged();
+    }
+
+
+  protected:
+    // members
+    QString m_firstName;
+    QString m_familyName;
+    QString m_namePrefix;
+    QString m_nickName;
+    QDate m_birthday;
+    Gender m_gender;
+    QString m_customPictureFileName;
+
+};
+Q_DECLARE_METATYPE(Person*)
+Q_DECLARE_METATYPE(QList<Person*>)
+#endif // PERSON_H
diff --git a/src/database.h b/src/database.h
index 2b777d5..1121fcb 100644
--- a/src/database.h
+++ b/src/database.h
@@ -36,14 +36,6 @@ class Database {
     bool supportTransactions;
     void init();
 
-  protected:
-//    inline QString pgsqlSeqTable();
-//    inline QString mysqlSeqTable();
-//    inline QString sqliteSeqTable();
-//    inline QString sqliteTableList();
-//    inline QString mysqlTableList();
-//    inline QString pgsqlTableList();
-
   public:
     Database(QSqlDatabase database);
     ~Database();
@@ -65,12 +57,7 @@ class Database {
     bool exec(QList<QSqlQuery> queries);
     bool select(QSqlQuery &query);
     QSqlQuery select(const QString &query);
-//    bool isSeqTable();
-//    qint64 getLastId();
-//    void getTableListFromDatabase();
-//    void setTableList(QSqlQuery &q);
-//    void refreshTableList();
-//    QChar escapeChar();
+
 };
 }
 #endif // DATABASE_H
diff --git a/src/entity.cpp b/src/entity.cpp
index 7f77bc9..c884798 100644
--- a/src/entity.cpp
+++ b/src/entity.cpp
@@ -18,7 +18,7 @@
 
 using namespace CuteEntityManager;
 
-Entity::Entity() : QObject() {
+Entity::Entity(QObject *parent) : QObject(parent) {
     this->id = -1;
 }
 
@@ -30,6 +30,10 @@ void Entity::setId(qint64 id) {
     this->id = id;
 }
 
+QString Entity::toString() {
+    return this->getTablename()+ ":" + QString::number(this->id);
+}
+
 Entity::~Entity() {
 }
 
diff --git a/src/entity.h b/src/entity.h
index e594359..30dd35f 100644
--- a/src/entity.h
+++ b/src/entity.h
@@ -25,14 +25,20 @@ namespace CuteEntityManager {
 
 class Entity : public QObject {
     Q_OBJECT
+    Q_PROPERTY(qint64 firstName READ getId WRITE setId NOTIFY idChanged)
+
+signals:
+  void idChanged();
+
   public:
+    Entity (QObject *parent = 0);
     virtual qint64 getId();
     virtual void setId(qint64 id);
+    virtual QString toString();
     virtual ~Entity();
     virtual QString getTablename();
     //  virtual QMap<QString, QString> getManyToManyRelations() = 0;   //Key = Table, Value = joined Table Column
   protected:
-    Entity();
     qint64 id;
 };
 }
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index d946d6d..f9be696 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -23,17 +23,24 @@ using namespace CuteEntityManager;
 
 QStringList EntityManager::connectionNames = QStringList();
 
-EntityManager::EntityManager(QSqlDatabase database) {
-    this->db = new Database(database);
-}
+//EntityManager::EntityManager(QSqlDatabase database) {
+//    auto db = new Database(database);
+//    this->db = QSharedPointer<Database>(db);
 
-EntityManager::EntityManager(const QString &databaseType, QString databasename , QString hostname, QString username,
-                             QString password, QString port) {
-    this->db = new Database(databaseType, this->createConnection(), hostname, databasename, username, password,
-                            port.toInt());
-}
+//    auto schema = DatabaseType::getSchema(DatabaseType::getDatabaseType(database.driver()),this->db);
+//    this->schema = QSharedPointer<Schema>(db);
+//}
+
+//EntityManager::EntityManager(const QString &databaseType, QString databasename , QString hostname, QString username,
+//                             QString password, QString port) {
+//    auto db = new Database(databaseType, this->createConnection(), hostname, databasename, username, password,
+//                            port.toInt());
+//    this->db = QSharedPointer<Database>(db);
+//    auto schema = new Schema(this->db);
+//    this->schema = QSharedPointer<Schema>(db);
+//}
 
-inline bool EntityManager::checkTable(Entity *entity) {
+//inline bool EntityManager::checkTable(Entity *entity) {
 //    bool rc = true;
 //    if (!this->db->containsTable(entity->getTablename())) {
 //        qDebug() << "Tabelle" <<  entity->getTablename() << "existiert noch nicht.";
@@ -43,75 +50,88 @@ inline bool EntityManager::checkTable(Entity *entity) {
 //        }
 //    }
 //    return rc;
-}
-
-QString EntityManager::createConnection() {
-    QStringList l = EntityManager::getConnectionNames();
-    QString conName = "";
-    bool ok = false;
-    qint16 i = 0;
-    while (!ok) {
-        if (l.contains("con" + QString::number(i))) {
-            ++i;
-        } else {
-            l.append("con" + QString::number(i));
-            ok = true;
-            conName = "con" + QString::number(i);
-            EntityManager::setConnectionNames(l);
-        }
-    }
-    return conName;
-}
-
-void EntityManager::removeConnectionName(const QString &name) {
-    EntityManager::connectionNames.removeOne(name);
-}
-
-EntityManager::~EntityManager() {
-    EntityManager::removeConnectionName(this->db->getConnectionName());
-    delete db;
-}
-
-QStringList EntityManager::getConnectionNames() {
-    return EntityManager::connectionNames;
-}
-
-void EntityManager::setConnectionNames(QStringList list) {
-    EntityManager::connectionNames = list;
-}
-
-void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q, bool ignoreID) {
-    QHash<QString, QVariant>::const_iterator i = h->constBegin();
-    while (i != h->constEnd()) {
-        if (!ignoreID || (ignoreID && !(i.key() == "id"))) {
-            q.bindValue(":" + i.key(), i.value());
-        }
-        ++i;
-    }
-}
-
-//qint8 EntityManager::count(Entity* entity, bool ignoreID) {
+//}
+
+//QSharedPointer<Database> EntityManager::getDb() const {
+//    return db;
+//}
+
+//void EntityManager::setDb(const QSharedPointer<Database> &value) {
+//    db = value;
+//}
+
+//QSharedPointer<Schema> EntityManager::getSchema() const {
+//    return schema;
+//}
+
+//void EntityManager::setSchema(const QSharedPointer<Schema> &value) {
+//    schema = value;
+//}
+//QString EntityManager::createConnection() {
+//    QStringList l = EntityManager::getConnectionNames();
+//    QString conName = "";
+//    bool ok = false;
+//    qint16 i = 0;
+//    while (!ok) {
+//        if (l.contains("con" + QString::number(i))) {
+//            ++i;
+//        } else {
+//            l.append("con" + QString::number(i));
+//            ok = true;
+//            conName = "con" + QString::number(i);
+//            EntityManager::setConnectionNames(l);
+//        }
+//    }
+//    return conName;
+//}
+
+//void EntityManager::removeConnectionName(const QString &name) {
+//    EntityManager::connectionNames.removeOne(name);
+//}
+
+//EntityManager::~EntityManager() {
+//    EntityManager::removeConnectionName(this->db->getConnectionName());
+//    delete db;
+//}
+
+//QStringList EntityManager::getConnectionNames() {
+//    return EntityManager::connectionNames;
+//}
+
+//void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q, bool ignoreID) {
+//    QHash<QString, QVariant>::const_iterator i = h->constBegin();
+//    while (i != h->constEnd()) {
+//        if (!ignoreID || (ignoreID && !(i.key() == "id"))) {
+//            q.bindValue(":" + i.key(), i.value());
+//        }
+//        ++i;
+//    }
+//}
+
+//qint8 EntityManager::count(Entity *entity, bool ignoreID) {
 //    qint8 rc = 0;
-//    QSqlQuery q = this->db->getQuery("SELECT COUNT(*) FROM " + entity->getTablename() + this->where(entity->getAttributeValues(),"AND",ignoreID));
-//    this->bindValues(entity->getAttributeValues(),q);
+//    QSqlQuery q = this->db->getQuery("SELECT COUNT(*) FROM " + entity->getTablename() + this->where(
+//                                         entity->getAttributeValues(), "AND", ignoreID));
+//    this->bindValues(entity->getAttributeValues(), q);
 //    this->db->select(q);
-//    if(q.next()) {
+//    if (q.next()) {
 //        rc = q.value(0).toInt();
 //    }
 //    return rc;
 //}
 
-//QString EntityManager::buildCreateQuery(QHash<QString,QVariant>::const_iterator i, QHash<QString,QVariant>::const_iterator end, QString &p1, QString &p2) {
+//QString EntityManager::buildCreateQuery(QHash<QString, QVariant>::const_iterator i,
+//                                        QHash<QString, QVariant>::const_iterator end, QString &p1, QString &p2) {
 //    bool first = true;
-//    while(i != end) {
-//        if(!first) {
+//    while (i != end) {
+//        if (!first) {
 //            p1 += ",";
 //            p2 += ",";
 //        } else {
 //            first = false;
 //        }
 //        p1 += i.key();
-//        p2 += ":"+i.key();
+//        p2 += ":" + i.key();
 //        ++i;
 //    }
 //    p1 += ")";
@@ -121,16 +141,17 @@ void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q,
 
 //bool EntityManager::create(Entity *entity) {
 //    bool rc = false;
-//    if(this->checkTable(entity) && this->count(entity) == 0) {
+//    if (this->checkTable(entity) && this->count(entity) == 0) {
 //        QSqlQuery q = this->db->getQuery();
 //        QString p1 = "INSERT INTO " + entity->getTablename() + "(";
 //        QString p2 = "VALUES(";
 //        entity->setId(this->db->getLastId());
-//        if(!entity->getAttributeValues()->isEmpty()) {
-//            q.prepare(this->buildCreateQuery(entity->getAttributeValues()->constBegin(),entity->getAttributeValues()->constEnd(),p1,p2));
+//        if (!entity->getAttributeValues()->isEmpty()) {
+//            q.prepare(this->buildCreateQuery(entity->getAttributeValues()->constBegin(), entity->getAttributeValues()->constEnd(),
+//                                             p1, p2));
 //        }
-//        this->bindValues(entity->getAttributeValues(),q);
-//        if(this->db->updateSequenceCounter(q)) {
+//        this->bindValues(entity->getAttributeValues(), q);
+//        if (this->db->updateSequenceCounter(q)) {
 //            entity->setId(this->findId(entity));
 //            rc = true;
 //        }
@@ -138,28 +159,30 @@ void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q,
 //    return rc;
 //}
 
-//QHash<QString,QVariant> EntityManager::find(qint64 id, QString tblname) {
-//    QSqlQuery q = this->db->getQuery("SELECT * FROM " + tblname +" WHERE id= :id LIMIT 1;");
-//    q.bindValue(":id",id);
+//QHash<QString, QVariant> EntityManager::find(qint64 id, QString tblname) {
+//    QSqlQuery q = this->db->getQuery("SELECT * FROM " + tblname + " WHERE id= :id LIMIT 1;");
+//    q.bindValue(":id", id);
 //    this->db->select(q);
 //    QSqlRecord rec = q.record();
-//    QHash<QString,QVariant> map = QHash<QString, QVariant>();
-//    if(q.next()) {
+//    QHash<QString, QVariant> map = QHash<QString, QVariant>();
+//    if (q.next()) {
 //        for (int var = 0; var < rec.count(); ++var) {
-//            map.insert(rec.fieldName(var),q.value(rec.indexOf(rec.fieldName(var)))); // parameters of q.value can maybe replaced with var
+//            map.insert(rec.fieldName(var), q.value(rec.indexOf(rec.fieldName(
+//                    var)))); // parameters of q.value can maybe replaced with var
 //        }
 //    }
 //    return map;
 //}
 
-//QList<QHash <QString,QVariant> > EntityManager::findByAttributes(QHash<QString, QVariant> *m, const QString &tblname, bool ignoreID) {
-//    QSqlQuery q = this->db->getQuery("SELECT * FROM " + tblname + this->where(m,"AND",ignoreID));
-//    this->bindValues(m,q,true);
+//QList<QHash <QString, QVariant> > EntityManager::findByAttributes(QHash<QString, QVariant> *m, const QString &tblname,
+//        bool ignoreID) {
+//    QSqlQuery q = this->db->getQuery("SELECT * FROM " + tblname + this->where(m, "AND", ignoreID));
+//    this->bindValues(m, q, true);
 //    return this->convertQueryResult(q);
 //}
 
 //QList<QHash<QString, QVariant> > EntityManager::convertQueryResult(QSqlQuery &q) {
-//    QList<QHash <QString, QVariant> > listmap = QList<QHash <QString,QVariant> >();
+//    QList<QHash <QString, QVariant> > listmap = QList<QHash <QString, QVariant> >();
 //    this->db->select(q);
 //    QSqlRecord rec = q.record();
 //    QStringList l = QStringList();
@@ -167,26 +190,27 @@ void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q,
 //    for (int var = 0; var < field_count; ++var) {
 //        l.append(rec.fieldName(var));
 //    }
-//    QHash<QString,QVariant> map = QHash<QString, QVariant>();
-//    while(q.next()) {
+//    QHash<QString, QVariant> map = QHash<QString, QVariant>();
+//    while (q.next()) {
 //        for (int var = 0; var < field_count; ++var) {
-//            map.insert(l.at(var),q.value(rec.indexOf(l.at(var))));
+//            map.insert(l.at(var), q.value(rec.indexOf(l.at(var))));
 //        }
 //        listmap.append(map);
 //    }
 //    return listmap;
 //}
 
-//QList<QHash <QString,QVariant> > EntityManager::findAll(QString tblname) {
-//    QSqlQuery q =this->db->getQuery("SELECT * FROM " + tblname + ";");
+//QList<QHash <QString, QVariant> > EntityManager::findAll(QString tblname) {
+//    QSqlQuery q = this->db->getQuery("SELECT * FROM " + tblname + ";");
 //    return this->convertQueryResult(q);
 //}
 
 //bool EntityManager::merge(Entity *entity) {
-//    if(this->count(entity) == 0 && entity->getId() != -1) {
-//        QSqlQuery q = this->db->getQuery("UPDATE " + entity->getTablename() + " SET " +this->attributes(entity->getAttributeValues()) + " WHERE id=:idM;");
-//        this->bindValues(entity->getAttributeValues(),q);
-//        q.bindValue(":idM",entity->getId());
+//    if (this->count(entity) == 0 && entity->getId() != -1) {
+//        QSqlQuery q = this->db->getQuery("UPDATE " + entity->getTablename() + " SET " + this->attributes(
+//                                             entity->getAttributeValues()) + " WHERE id=:idM;");
+//        this->bindValues(entity->getAttributeValues(), q);
+//        q.bindValue(":idM", entity->getId());
 //        return this->db->transaction(q);
 //    } else {
 //        return false;
@@ -196,10 +220,11 @@ void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q,
 
 //qint64 EntityManager::findId(Entity *entity) {
 //    qint64 r = -1;
-//    QSqlQuery q = this->db->getQuery("SELECT id FROM " + entity->getTablename() + this->where(entity->getAttributeValues(),"AND",true) + " LIMIT 1");
-//    this->bindValues(entity->getAttributeValues(),q);
+//    QSqlQuery q = this->db->getQuery("SELECT id FROM " + entity->getTablename() + this->where(entity->getAttributeValues(),
+//                                     "AND", true) + " LIMIT 1");
+//    this->bindValues(entity->getAttributeValues(), q);
 //    this->db->select(q);
-//    if(q.next()) {
+//    if (q.next()) {
 //        r = q.value(0).toInt();
 //    }
 //    return r;
@@ -207,14 +232,14 @@ void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q,
 
 //QString EntityManager::attributes(QHash<QString, QVariant> *m, QString conjunction, bool ignoreID) {
 //    QString rc = "";
-//    if(!m->isEmpty()) {
+//    if (!m->isEmpty()) {
 //        QHash<QString, QVariant>::const_iterator i = m->constBegin();
-//        while(i != m->constEnd()) {
-//            if(!ignoreID || (ignoreID && !(i.key() == "id"))) {
-//                if(!(rc == "")) {
+//        while (i != m->constEnd()) {
+//            if (!ignoreID || (ignoreID && !(i.key() == "id"))) {
+//                if (!(rc == "")) {
 //                    rc += " " + conjunction + " ";
 //                }
-//                rc += i.key() + "= :" +i.key();
+//                rc += i.key() + "= :" + i.key();
 //            }
 //            ++i;
 //        }
@@ -224,22 +249,22 @@ void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q,
 
 
 //QString EntityManager::where(QHash<QString, QVariant> *m, QString conjunction, bool ignoreID) {
-//    if(m->size() == 0 || (ignoreID && m->contains("id") && m->size() == 1)) {
+//    if (m->size() == 0 || (ignoreID && m->contains("id") && m->size() == 1)) {
 //        return "";
 //    }
-//    return " WHERE " + this->attributes(m,conjunction,ignoreID);
+//    return " WHERE " + this->attributes(m, conjunction, ignoreID);
 //}
 
 //QString EntityManager::where(Entity *entity, QString conjunction, bool ignoreID) {
-//    return this->where(entity->getAttributeValues(),conjunction,ignoreID);
+//    return this->where(entity->getAttributeValues(), conjunction, ignoreID);
 //}
 
-//QList<QHash <QString,QVariant> > EntityManager::findByAttributes(Entity *entity, bool ignoreID) {
-//    return this->findByAttributes(entity->getAttributeValues(), entity->getTablename(),ignoreID);
+//QList<QHash <QString, QVariant> > EntityManager::findByAttributes(Entity *entity, bool ignoreID) {
+//    return this->findByAttributes(entity->getAttributeValues(), entity->getTablename(), ignoreID);
 //}
 
 //bool EntityManager::save(Entity *entity) {
-//    if(entity->getId() > -1) {
+//    if (entity->getId() > -1) {
 //        return this->merge(entity);
 //    } else {
 //        return this->create(entity);
@@ -250,8 +275,8 @@ void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q,
 //bool EntityManager::remove(Entity *&entity) {
 //    bool rc = false;
 //    QSqlQuery q = this->db->getQuery("DELETE FROM " + entity->getTablename() + " WHERE id= :id;");
-//    q.bindValue(":id",entity->getId());
-//    if(this->db->transaction(q)) {
+//    q.bindValue(":id", entity->getId());
+//    if (this->db->transaction(q)) {
 //        delete entity;
 //        entity = 0;
 //        rc = true;
@@ -267,7 +292,7 @@ void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q,
 //    s.append(c).append(entity->getTablename()).append(c).append("(");
 //    QHash<QString, QString>::const_iterator i = m.constBegin();
 //    while (i != m.constEnd()) {
-//        if(first) {
+//        if (first) {
 //            first = false;
 //        } else {
 //            s.append(',');
@@ -282,9 +307,9 @@ void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q,
 //bool EntityManager::createTable(Entity *entity) {
 //    bool rc = false;
 //    this->db->containsTable(entity->getTablename()) ? rc = true : rc = false;
-//    if(!rc) {
+//    if (!rc) {
 //        QSqlQuery q = this->db->getQuery(this->createTableQuery(entity));
-//        if(this->db->transaction(q)) {
+//        if (this->db->transaction(q)) {
 //            this->db->refreshTableList();
 //            rc = true;
 //        }
diff --git a/src/entitymanager.h b/src/entitymanager.h
index 6160488..644abc4 100644
--- a/src/entitymanager.h
+++ b/src/entitymanager.h
@@ -22,6 +22,7 @@
 #include <QString>
 #include <QStringList>
 #include <QDebug>
+#include "schema.h"
 #include <QtSql/QSqlError>
 #include "entity.h"
 #include "database.h"
@@ -31,8 +32,9 @@ namespace CuteEntityManager {
 class EntityManager {
   private:
     static QStringList connectionNames;
+    QSharedPointer<Schema> schema;
     static void setConnectionNames(QStringList list);
-    Database *db;
+    QSharedPointer<Database> db;
     QString createConnection();
     QString createTableQuery(Entity *entity);
     QString attributes(QHash<QString, QVariant> *m, QString conjunction = ",", bool ignoreID = false);
@@ -66,6 +68,10 @@ class EntityManager {
     bool removeAll(QString tblname);
     bool createTable(Entity *entity);
     qint8 count(Entity *entity, bool ignoreID = true);
+    QSharedPointer<Database> getDb() const;
+    void setDb(const QSharedPointer<Database> &value);
+    QSharedPointer<Schema> getSchema() const;
+    void setSchema(const QSharedPointer<Schema> &value);
 };
 }
 #endif // ENTITYMANAGER_H
diff --git a/src/enums/databasetype.h b/src/enums/databasetype.h
index b984f9f..16d5774 100644
--- a/src/enums/databasetype.h
+++ b/src/enums/databasetype.h
@@ -21,7 +21,6 @@
 #include "../schema/sqliteschema.h"
 
 namespace CuteEntityManager {
-class Schema;
 class Database;
 enum DatabaseType {
     SQLITE = 0,
@@ -29,17 +28,17 @@ enum DatabaseType {
     MYSQL = 2
 };
 
-static const DatabaseType getDatabaseType(QString s) {
+static  DatabaseType getDatabaseType(QString s) {
     if (s == "qmysql") {
-        return CuteEntityManager::MYSQL;
+        return DatabaseType::MYSQL;
     } else if (s == "qpgsql") {
-        return CuteEntityManager::PGSQL;
+        return DatabaseType::PGSQL;
     } else {
-        return CuteEntityManager::SQLITE;
+        return DatabaseType::SQLITE;
     }
 }
 
-static const QSharedPointer<Schema> getSchema(int db, QSharedPointer<Database> database) {
+static QSharedPointer<Schema> getSchema(int db, QSharedPointer<Database> database) {
     switch (db) {
     case SQLITE:
         return QSharedPointer<Schema>(new SqliteSchema(database));;
diff --git a/src/schema.h b/src/schema.h
index 66c3cf9..03466a8 100644
--- a/src/schema.h
+++ b/src/schema.h
@@ -53,7 +53,6 @@ class Schema {
     virtual QStringList getTableNames(QString schema = "");
     //virtual QueryBuilder getQueryBuilder();
     //virtual QueryBuilder createQueryBuilder();
-    virtual QStringList findUniqueIndexes(TableSchema schema);
     virtual QVariant getLastInsertID();
     virtual void refresh();
     virtual QString getRawTable(QString name);
diff --git a/src/schema/sqliteschema.cpp b/src/schema/sqliteschema.cpp
index 9a01796..c9c3b64 100644
--- a/src/schema/sqliteschema.cpp
+++ b/src/schema/sqliteschema.cpp
@@ -13,6 +13,29 @@ SqliteSchema::~SqliteSchema() {
 }
 
 QHash<QString, QString> *SqliteSchema::getTypeMap() {
+    /**
+   this->typeMap.data()->insert("bool", "SMALLINT");
+   this->typeMap.data()->insert("short", "SMALLINT");
+   this->typeMap.data()->insert("int", "INTEGER");
+   this->typeMap.data()->insert("long", "INTEGER");
+   this->typeMap.data()->insert("long long", "INTEGER");
+   this->typeMap.data()->insert("float", "FLOAT");
+   this->typeMap.data()->insert("double", "FLOAT");
+   this->typeMap.data()->insert("long double", "FLOAT");
+   this->typeMap.data()->insert("unsigned short", "SMALLINT");
+   this->typeMap.data()->insert("unsigned int", "INTEGER");
+   this->typeMap.data()->insert("unsigned long", "INTEGER");
+   this->typeMap.data()->insert("unsigned long long", "INTEGER");
+   this->typeMap.data()->insert("std::string", "TEXT");
+   this->typeMap.data()->insert("std::wstring", "TEXT");
+   this->typeMap.data()->insert("QString", "TEXT");
+   this->typeMap.data()->insert("QVariant", "TEXT");
+   this->typeMap.data()->insert("QUuid", "TEXT");
+   this->typeMap.data()->insert("QDate", "DATE");
+   this->typeMap.data()->insert("QTime", "TIME");
+   this->typeMap.data()->insert("QDateTime", "TIMESTAMP");
+   this->typeMap.data()->insert("QByteArray", "BLOB");
+      */
     if (this->typeMap.data()->empty()) {
         this->typeMap.data()->insert(TYPE_SMALLINT, "tinyint");
         this->typeMap.data()->insert(TYPE_BOOLEAN, "boolean");
