diff --git a/osam-core/common/pom.xml b/osam-core/common/pom.xml
index 8c0fc70..cdb1e2f 100644
--- a/osam-core/common/pom.xml
+++ b/osam-core/common/pom.xml
@@ -30,5 +30,13 @@
     <modelVersion>4.0.0</modelVersion>
     <artifactId>common</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>osam-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
 
 </project>
\ No newline at end of file
diff --git a/osam-core/core/src/main/java/org/onap/osam/core/AccessPodServiceImpl.java b/osam-core/core/src/main/java/org/onap/osam/core/AccessPodServiceImpl.java
index 1ba8bad..4113d1b 100644
--- a/osam-core/core/src/main/java/org/onap/osam/core/AccessPodServiceImpl.java
+++ b/osam-core/core/src/main/java/org/onap/osam/core/AccessPodServiceImpl.java
@@ -53,8 +53,9 @@
 
     @Override
     public AccessPod addOrUpdate(AccessPod value) {
-        PNF pnf = aaiClient.queryPnf(value.getPnfId());
-        Optional<AccessPod> accessPodOptional = accessPodRepository.findByPnfId(pnf.getPnfId());
+        //aai logic is commented out, to allow manual registering of SEBA PODs in OSAM Core
+        //PNF pnf = aaiClient.queryPnf(value.getPnfId());
+        Optional<AccessPod> accessPodOptional = accessPodRepository.findByPnfId(value.getPnfId());
         if (accessPodOptional.isPresent()) {
             AccessPod tmp = accessPodOptional.get();
             value.setId(tmp.getId());
diff --git a/osam-core/external/src/main/java/org/onap/osam/external/grpc/AbstractOLTClient.java b/osam-core/external/src/main/java/org/onap/osam/external/grpc/AbstractOLTClient.java
index 27c697d..81f2851 100644
--- a/osam-core/external/src/main/java/org/onap/osam/external/grpc/AbstractOLTClient.java
+++ b/osam-core/external/src/main/java/org/onap/osam/external/grpc/AbstractOLTClient.java
@@ -88,6 +88,7 @@
 
   @PostConstruct
   private void init() {
+      log.info("Abstract OLT connection properties - host: {}, port: {}", host, port);
       ManagedChannel managedChannel = ManagedChannelBuilder
                 .forAddress(host, port).usePlaintext().build();
 
@@ -117,6 +118,8 @@
               .setXOSPassword(pass)
               .build();
 
+      log.info("AddChassisMessage message: {}", request);
+
       AddChassisReturn response = blockingStub.createChassis(request);
       if(!StringUtils.isEmpty(response.getDeviceID())) {
           log.info("Chassis created in AbstractOLT with clli : {}",clli);
@@ -146,6 +149,7 @@
                     .setType(oltType)
                     .build();
 
+            log.info("AddOLTChassisMessage message: {}", request);
             AddOLTChassisReturn response = blockingStub.createOLTChassis(request);
             deviceID = response.getDeviceID();
             chassisDeviceId = response.getChassisDeviceID();
@@ -177,14 +181,12 @@
             log.error("preProvisionOnt RPC failed", e);
             throw new AbstractOLTException("preProvisionOnt failed for ont : {}", ontDevice);
         }
-
       return result;
     }
 
     public boolean provisionONT(ONTDevice ontDevice) {
 
         boolean result = false;
-
         try {
             AddOntMessage request = OntMessageFactory.getOntMessage(ontDevice);
             AddOntReturn response = blockingStub.provisionOnt(request);
diff --git a/osam-core/model/src/main/resources/application.properties b/osam-core/model/src/main/resources/application.properties
index 81ed287..3d2b5cb 100644
--- a/osam-core/model/src/main/resources/application.properties
+++ b/osam-core/model/src/main/resources/application.properties
@@ -4,7 +4,7 @@
 
 spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
 spring.jpa.hibernate.ddl-auto=update
-
+server.port=8888
 logging.level.org.onap.osam=DEBUG
 #logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
 #logging.level.org.hibernate.type=TRACE
\ No newline at end of file
diff --git a/osam-core/web/src/main/java/org/onap/osam/controller/AccessPodRestController.java b/osam-core/web/src/main/java/org/onap/osam/controller/AccessPodRestController.java
index ad901c5..46b21f7 100644
--- a/osam-core/web/src/main/java/org/onap/osam/controller/AccessPodRestController.java
+++ b/osam-core/web/src/main/java/org/onap/osam/controller/AccessPodRestController.java
@@ -23,7 +23,7 @@
 package org.onap.osam.controller;
 
 import lombok.extern.slf4j.Slf4j;
-import org.onap.osam.dto.AccessPodDTO;
+import org.onap.osam.common.dto.AccessPodDTO;
 import org.onap.osam.helper.DTOMapper;
 import org.onap.osam.model.dao.AccessPod;
 import org.onap.osam.api.service.AccessPodService;
diff --git a/osam-core/web/src/main/java/org/onap/osam/controller/DeviceController.java b/osam-core/web/src/main/java/org/onap/osam/controller/DeviceController.java
index b5b0103..f6c7aec 100644
--- a/osam-core/web/src/main/java/org/onap/osam/controller/DeviceController.java
+++ b/osam-core/web/src/main/java/org/onap/osam/controller/DeviceController.java
@@ -24,9 +24,9 @@
 
 import lombok.extern.slf4j.Slf4j;
 import org.onap.osam.api.service.DeviceService;
-import org.onap.osam.dto.ChassisDTO;
-import org.onap.osam.dto.OLTChassisDTO;
-import org.onap.osam.dto.ONTDTO;
+import org.onap.osam.common.dto.ChassisDTO;
+import org.onap.osam.common.dto.OLTChassisDTO;
+import org.onap.osam.common.dto.ONTDTO;
 import org.onap.osam.helper.DTOMapper;
 import org.onap.osam.model.dao.*;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/osam-core/web/src/main/java/org/onap/osam/controller/TopologyController.java b/osam-core/web/src/main/java/org/onap/osam/controller/TopologyController.java
index 6f760ee..18ea729 100644
--- a/osam-core/web/src/main/java/org/onap/osam/controller/TopologyController.java
+++ b/osam-core/web/src/main/java/org/onap/osam/controller/TopologyController.java
@@ -25,7 +25,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.onap.osam.api.service.AccessPodService;
 import org.onap.osam.api.service.DeviceService;
-import org.onap.osam.dto.AccessPodDTO;
+import org.onap.osam.common.dto.AccessPodDTO;
 import org.onap.osam.helper.DTOMapper;
 import org.onap.osam.model.dao.AccessPod;
 import org.onap.osam.model.dao.Chassis;
diff --git a/osam-core/web/src/main/java/org/onap/osam/dto/AccessPodDTO.java b/osam-core/web/src/main/java/org/onap/osam/dto/AccessPodDTO.java
deleted file mode 100644
index 52570c7..0000000
--- a/osam-core/web/src/main/java/org/onap/osam/dto/AccessPodDTO.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * OSAM Core
- * ================================================================================
- * Copyright (C) 2018 Netsia
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-
-
-package org.onap.osam.dto;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonRootName;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import java.util.List;
-
-/**
- * Created by cemturker on 01.10.2018.
- */
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonRootName("AccessPod")
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class AccessPodDTO {
-    private Long id;
-    private String pnfId;
-    private String ip;
-    private String port;
-    private String coreIp;
-    private String corePort;
-    private String username;
-    private String password;
-    private List<ChassisDTO> chassises;
-
-    @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder("AccessPodDTO{");
-        sb.append("id=").append(id);
-        sb.append(", pnfId='").append(pnfId).append('\'');
-        sb.append(", ip='").append(ip).append('\'');
-        sb.append(", port='").append(port).append('\'');
-        sb.append(", coreIp='").append(coreIp).append('\'');
-        sb.append(", corePort='").append(corePort).append('\'');
-        sb.append(", username='").append(username).append('\'');
-        sb.append(", password='").append(password).append('\'');
-        sb.append(", chassises=").append(chassises);
-        sb.append('}');
-        return sb.toString();
-    }
-}
diff --git a/osam-core/web/src/main/java/org/onap/osam/dto/ChassisDTO.java b/osam-core/web/src/main/java/org/onap/osam/dto/ChassisDTO.java
deleted file mode 100644
index 96462cf..0000000
--- a/osam-core/web/src/main/java/org/onap/osam/dto/ChassisDTO.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * OSAM Core
- * ================================================================================
- * Copyright (C) 2018 Netsia
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-
-
-package org.onap.osam.dto;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonRootName;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@JsonRootName("Chassis")
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class ChassisDTO {
-    private Long id;
-    private String clli;
-    private String pnfId;
-    private int shelf;
-    private int rack;
-    private List<OLTChassisDTO> olts;
-}
diff --git a/osam-core/web/src/main/java/org/onap/osam/dto/OLTChassisDTO.java b/osam-core/web/src/main/java/org/onap/osam/dto/OLTChassisDTO.java
deleted file mode 100644
index 1937e35..0000000
--- a/osam-core/web/src/main/java/org/onap/osam/dto/OLTChassisDTO.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * OSAM Core
- * ================================================================================
- * Copyright (C) 2018 Netsia
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-
-
-package org.onap.osam.dto;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonRootName;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@JsonRootName("OLT")
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class OLTChassisDTO {
-    private String clli;
-    private String oltDriver;
-    private String oltType;
-    private int portNumber;
-    private String ipAddress;
-    private String name;
-    private List<OLTPortDTO> oltPorts;
-    private Long id;
-}
diff --git a/osam-core/web/src/main/java/org/onap/osam/dto/OLTPortDTO.java b/osam-core/web/src/main/java/org/onap/osam/dto/OLTPortDTO.java
deleted file mode 100644
index 1a376fa..0000000
--- a/osam-core/web/src/main/java/org/onap/osam/dto/OLTPortDTO.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * OSAM Core
- * ================================================================================
- * Copyright (C) 2018 Netsia
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-
-
-package org.onap.osam.dto;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonRootName;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-import org.onap.osam.model.dao.ActivityState;
-import org.onap.osam.model.dao.AdminState;
-
-import java.util.List;
-
-/**
- * Created by cemturker on 03.10.2018.
- */
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonRootName("OLTPort")
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class OLTPortDTO {
-    private Long id;
-    private Integer portNumber;
-    private ActivityState portAuthState;
-    private AdminState adminState;
-    private List<ONTDTO> ontDevices;
-
-    @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder("OLTPortDTO{");
-        sb.append("id=").append(id);
-        sb.append(", portNumber=").append(portNumber);
-        sb.append(", portAuthState=").append(portAuthState);
-        sb.append(", adminState=").append(adminState);
-        sb.append(", ontDevices=").append(ontDevices);
-        sb.append('}');
-        return sb.toString();
-    }
-}
diff --git a/osam-core/web/src/main/java/org/onap/osam/dto/ONTDTO.java b/osam-core/web/src/main/java/org/onap/osam/dto/ONTDTO.java
deleted file mode 100644
index d6fd982..0000000
--- a/osam-core/web/src/main/java/org/onap/osam/dto/ONTDTO.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * OSAM Core
- * ================================================================================
- * Copyright (C) 2018 Netsia
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-
-
-package org.onap.osam.dto;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonRootName;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@JsonRootName("ONTDevice")
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class ONTDTO {
-
-    private String clli;
-    private String serialNumber;
-    private int slotNumber;
-    private int portNumber;
-    private int ontNumber;
-    private Long id;
-    private int stag;
-    private int ctag;
-    private String nasPortId;
-    private String circuitId;
-    private String technologyProfile;
-    private String speedProfile;
-}
diff --git a/osam-core/web/src/main/java/org/onap/osam/helper/DTOMapper.java b/osam-core/web/src/main/java/org/onap/osam/helper/DTOMapper.java
index 81d14f5..8a941ee 100644
--- a/osam-core/web/src/main/java/org/onap/osam/helper/DTOMapper.java
+++ b/osam-core/web/src/main/java/org/onap/osam/helper/DTOMapper.java
@@ -23,11 +23,11 @@
 package org.onap.osam.helper;
 
 import com.google.common.collect.Lists;
-import org.onap.osam.dto.AccessPodDTO;
-import org.onap.osam.dto.ChassisDTO;
-import org.onap.osam.dto.OLTChassisDTO;
-import org.onap.osam.dto.OLTPortDTO;
-import org.onap.osam.dto.ONTDTO;
+import org.onap.osam.common.dto.AccessPodDTO;
+import org.onap.osam.common.dto.ChassisDTO;
+import org.onap.osam.common.dto.OLTChassisDTO;
+import org.onap.osam.common.dto.OLTPortDTO;
+import org.onap.osam.common.dto.ONTDTO;
 import org.onap.osam.model.dao.*;
 
 import java.util.ArrayList;
@@ -177,8 +177,8 @@
     private static OLTPortDTO convertOLTPortToDTO(OLTPort oltPort) {
         OLTPortDTO oltPortDTO = new OLTPortDTO();
         oltPortDTO.setId(oltPort.getId());
-        oltPortDTO.setAdminState(oltPort.getAdminState());
-        oltPortDTO.setPortAuthState(oltPort.getPortAuthState());
+        oltPortDTO.setAdminState(oltPort.getAdminState().name());
+        oltPortDTO.setPortAuthState(oltPort.getPortAuthState().name());
         oltPortDTO.setPortNumber(oltPort.getPortNumber());
         return oltPortDTO;
     }
