diff --git a/sci-publications/src/main/java/org/scientificcms/publications/Expertise.java b/sci-publications/src/main/java/org/scientificcms/publications/Expertise.java
new file mode 100644
index 0000000..1c8198b
--- /dev/null
+++ b/sci-publications/src/main/java/org/scientificcms/publications/Expertise.java
@@ -0,0 +1,127 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.scientificcms.publications;
+
+import org.librecms.assets.Organization;
+
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+import static org.scientificcms.publications.SciPublicationsConstants.*;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@Entity
+@Table(name = "EXPERTISES", schema = DB_SCHEMA)
+public class Expertise extends Publication {
+
+ private static final long serialVersionUID = 1L;
+
+ @Column(name = "PLACE", length = 512)
+ private String place;
+
+ @Column(name = "NUMBER_OF_PAGES")
+ private Integer numberOfPages;
+
+ @OneToOne
+ @JoinColumn(name = "ORGANIZATION_ID")
+ private Organization organization;
+
+ @OneToOne
+ @JoinColumn(name = "ORDERER_ID")
+ private Organization orderer;
+
+ public String getPlace() {
+ return place;
+ }
+
+ public void setPlace(final String place) {
+ this.place = place;
+ }
+
+ public Integer getNumberOfPages() {
+ return numberOfPages;
+ }
+
+ public void setNumberOfPages(final Integer numberOfPages) {
+ this.numberOfPages = numberOfPages;
+ }
+
+ public Organization getOrganization() {
+ return organization;
+ }
+
+ public void setOrganization(final Organization organization) {
+ this.organization = organization;
+ }
+
+ public Organization getOrderer() {
+ return orderer;
+ }
+
+ public void setOrderer(final Organization orderer) {
+ this.orderer = orderer;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = super.hashCode();
+ hash = 17 * hash + Objects.hashCode(place);
+ hash = 17 * hash + Objects.hashCode(numberOfPages);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!super.equals(obj)) {
+ return false;
+ }
+ if (!(obj instanceof Expertise)) {
+ return false;
+ }
+ final Expertise other = (Expertise) obj;
+ if (!other.canEqual(this)) {
+ return false;
+ }
+ if (!Objects.equals(numberOfPages, other.getNumberOfPages())) {
+ return false;
+ }
+ return Objects.equals(place, other.getPlace());
+ }
+
+ @Override
+ public boolean canEqual(final Object obj) {
+ return obj instanceof Expertise;
+ }
+
+ @Override
+ public String toString(final String data) {
+
+ return super.toString(String.format(", place = \"%s\", "
+ + "numberOfPages = %d, "
+ + "organization = %s, "
+ + "orderer = %s%s",
+ place,
+ Objects.toString(numberOfPages),
+ Objects.toString(organization),
+ Objects.toString(orderer),
+ data));
+ }
+
+}
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/InternetArticle.java b/sci-publications/src/main/java/org/scientificcms/publications/InternetArticle.java
new file mode 100644
index 0000000..6a1bfb3
--- /dev/null
+++ b/sci-publications/src/main/java/org/scientificcms/publications/InternetArticle.java
@@ -0,0 +1,249 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.scientificcms.publications;
+
+import org.librecms.assets.Organization;
+
+import java.time.LocalDate;
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+import static org.scientificcms.publications.SciPublicationsConstants.*;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@Entity
+@Table(name = "INTERNET_ARTICLES", schema = DB_SCHEMA)
+public class InternetArticle extends Publication {
+
+ private static final long serialVersionUID = 1L;
+
+ @Column(name = "PLACE", length = 512)
+ private String place;
+
+ @Column(name = "NUMBER", length = 256)
+ private String number;
+
+ @Column(name = "NUMBER_OF_PAGES")
+ private Integer numberOfPages;
+
+ @Column(name = "EDITION", length = 512)
+ private String edition;
+
+ @Column(name = "ISSN", length = 9)
+ private String issn;
+
+ @Column(name = "LAST_ACCESSED")
+ private LocalDate lastAccessed;
+
+ @Column(name = "PUBLICATION_DATE")
+ private LocalDate publicationDate;
+
+ @Column(name = "URL", length = 2048)
+ private String url;
+
+ @Column(name = "URN", length = 2048)
+ private String urn;
+
+ @Column(name = "DOI", length = 2048)
+ private String doi;
+
+ @OneToOne
+ @JoinColumn(name = "ORGANIZATION_ID")
+ private Organization organization;
+
+ public String getPlace() {
+ return place;
+ }
+
+ public void setPlace(final String place) {
+ this.place = place;
+ }
+
+ public String getNumber() {
+ return number;
+ }
+
+ public void setNumber(final String number) {
+ this.number = number;
+ }
+
+ public Integer getNumberOfPages() {
+ return numberOfPages;
+ }
+
+ public void setNumberOfPages(final Integer numberOfPages) {
+ this.numberOfPages = numberOfPages;
+ }
+
+ public String getEdition() {
+ return edition;
+ }
+
+ public void setEdition(final String edition) {
+ this.edition = edition;
+ }
+
+ public String getIssn() {
+ return issn;
+ }
+
+ public void setIssn(final String issn) {
+ this.issn = issn;
+ }
+
+ public LocalDate getLastAccessed() {
+ return lastAccessed;
+ }
+
+ public void setLastAccessed(final LocalDate lastAccessed) {
+ this.lastAccessed = lastAccessed;
+ }
+
+ public LocalDate getPublicationDate() {
+ return publicationDate;
+ }
+
+ public void setPublicationDate(final LocalDate publicationDate) {
+ this.publicationDate = publicationDate;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(final String url) {
+ this.url = url;
+ }
+
+ public String getUrn() {
+ return urn;
+ }
+
+ public void setUrn(final String urn) {
+ this.urn = urn;
+ }
+
+ public String getDoi() {
+ return doi;
+ }
+
+ public void setDoi(final String doi) {
+ this.doi = doi;
+ }
+
+ public Organization getOrganization() {
+ return organization;
+ }
+
+ public void setOrganization(final Organization organization) {
+ this.organization = organization;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = super.hashCode();
+ hash = 97 * hash + Objects.hashCode(place);
+ hash = 97 * hash + Objects.hashCode(number);
+ hash = 97 * hash + Objects.hashCode(numberOfPages);
+ hash = 97 * hash + Objects.hashCode(edition);
+ hash = 97 * hash + Objects.hashCode(issn);
+ hash = 97 * hash + Objects.hashCode(lastAccessed);
+ hash = 97 * hash + Objects.hashCode(publicationDate);
+ hash = 97 * hash + Objects.hashCode(url);
+ hash = 97 * hash + Objects.hashCode(urn);
+ hash = 97 * hash + Objects.hashCode(doi);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!super.equals(obj)) {
+ return false;
+ }
+ if (!(obj instanceof InternetArticle)) {
+ return false;
+ }
+ final InternetArticle other = (InternetArticle) obj;
+ if (!other.canEqual(this)) {
+ return false;
+ }
+ if (!Objects.equals(place, other.getPlace())) {
+ return false;
+ }
+ if (!Objects.equals(number, other.getNumber())) {
+ return false;
+ }
+ if (!Objects.equals(edition, other.getEdition())) {
+ return false;
+ }
+ if (!Objects.equals(issn, other.getIssn())) {
+ return false;
+ }
+ if (!Objects.equals(url, other.getUrl())) {
+ return false;
+ }
+ if (!Objects.equals(urn, other.getUrn())) {
+ return false;
+ }
+ if (!Objects.equals(doi, other.getDoi())) {
+ return false;
+ }
+ if (!Objects.equals(numberOfPages, other.getNumberOfPages())) {
+ return false;
+ }
+ if (!Objects.equals(lastAccessed, other.getLastAccessed())) {
+ return false;
+ }
+ return Objects.equals(publicationDate, other.getPublicationDate());
+ }
+
+ @Override
+ public boolean canEqual(final Object obj) {
+ return obj instanceof InternetArticle;
+ }
+
+ @Override
+ public String toString(final String data) {
+ return super.toString(String.format(", place = \"%s\", "
+ + "number = \"%s\", "
+ + "edition = \"%s\", "
+ + "issn = \"%s\", "
+ + "url = \"%s\", "
+ + "urn = \"%s\", "
+ + "doi = \"%s\", "
+ + "numberOfPages = %d, "
+ + "lastAccessed = %s, "
+ + "publicationDate = %s, "
+ + "organization = %s%s",
+ place,
+ number,
+ edition,
+ issn,
+ url,
+ urn,
+ doi,
+ numberOfPages,
+ Objects.toString(lastAccessed),
+ Objects.toString(publicationDate),
+ Objects.toString(organization),
+ data));
+ }
+
+}