make repository interfaces more generic.
update version.
Merge branch 'release/0.4.0' into develop