diff --git a/impl/src/main/java/org/onosproject/segmentrouting/cli/TrafficMatchRemoveCommand.java b/impl/src/main/java/org/onosproject/segmentrouting/cli/TrafficMatchRemoveCommand.java
index f6f0212..bda4468 100644
--- a/impl/src/main/java/org/onosproject/segmentrouting/cli/TrafficMatchRemoveCommand.java
+++ b/impl/src/main/java/org/onosproject/segmentrouting/cli/TrafficMatchRemoveCommand.java
@@ -15,7 +15,6 @@
  */
 package org.onosproject.segmentrouting.cli;
 
-
 import org.apache.karaf.shell.api.action.Argument;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/AbstractPolicy.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/AbstractPolicy.java
deleted file mode 100644
index 0ba6d05..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/AbstractPolicy.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-/**
- * Abstract implementation of the policy interface.
- */
-public abstract class AbstractPolicy implements Policy {
-    // Shared state among policies
-    protected PolicyId policyId;
-    private PolicyType policyType;
-
-    /**
-     * Init the basic information of a policy.
-     *
-     * @param pType the policy type
-     */
-    protected AbstractPolicy(PolicyType pType) {
-        policyType = pType;
-    }
-
-    @Override
-    public PolicyId policyId() {
-        return policyId;
-    }
-
-    @Override
-    public PolicyType policyType() {
-        return policyType;
-    }
-
-    /**
-     * Computes the policy id. The actual computation is left to
-     * the implementation class that can decide how to generate the
-     * policy id.
-     *
-     * @return the computed policy id
-     */
-    protected abstract PolicyId computePolicyId();
-
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/DropPolicy.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/DropPolicy.java
deleted file mode 100644
index ac2e05e..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/DropPolicy.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-import java.util.Objects;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-/**
- * Implementation of the drop policy.
- */
-public final class DropPolicy extends AbstractPolicy {
-    /**
-     * Builds up a DROP policy.
-     */
-    public DropPolicy() {
-        super(PolicyType.DROP);
-        policyId = computePolicyId();
-    }
-
-    @Override
-    protected PolicyId computePolicyId() {
-        return PolicyId.of(policyType().name());
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (!(obj instanceof DropPolicy)) {
-            return false;
-        }
-        final DropPolicy other = (DropPolicy) obj;
-        return Objects.equals(policyType(), other.policyType()) &&
-                Objects.equals(policyId(), other.policyId());
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(policyId(), policyType());
-    }
-
-    @Override
-    public String toString() {
-        return toStringHelper(this)
-                .add("policyId", policyId())
-                .add("policyType", policyType())
-                .toString();
-    }
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/Policy.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/Policy.java
deleted file mode 100644
index bc1acf0..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/Policy.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-/**
- * Represents a policy in TOST.
- */
-public interface Policy {
-    /**
-     * Represents the type of a policy.
-     */
-    enum PolicyType {
-        /**
-         * The policy drops the associated traffic.
-         */
-        DROP,
-
-        /**
-         * The policy redirects traffic using custom routing.
-         */
-        REDIRECT
-    }
-
-    /**
-     * Returns the policy id.
-     *
-     * @return the policy id
-     */
-    PolicyId policyId();
-
-    /**
-     * Returns the policy type.
-     *
-     * @return the type of a policy
-     */
-    PolicyType policyType();
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyData.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyData.java
deleted file mode 100644
index 5e207ae..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyData.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-import java.util.List;
-
-/**
- * Policy data retrieved from the system.
- */
-public final class PolicyData {
-    // We want to provide access to the policy data as well as
-    // the policy operations in the system and their status
-    private final PolicyState policyState;
-    private final Policy policy;
-    private final List<String> operations;
-
-    /**
-     * Creates a policy data.
-     *
-     * @param pState the policy state
-     * @param pol the policy
-     * @param ops the operations associated
-     */
-    public PolicyData(PolicyState pState, Policy pol, List<String> ops) {
-        policy = pol;
-        policyState = pState;
-        operations = ops;
-    }
-
-    /**
-     * Returns the current state of the policy.
-     *
-     * @return the policy state
-     */
-    public PolicyState policyState() {
-        return policyState;
-    }
-
-
-    /**
-     * Returns the policy associated.
-     *
-     * @return the policy
-     */
-    public Policy policy() {
-        return policy;
-    }
-
-    /**
-     * Returns the operations in the system in form of strings.
-     *
-     * @return the operations
-     */
-    public List<String> operations() {
-        return operations;
-    }
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyId.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyId.java
deleted file mode 100644
index e3e0cc1..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyId.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-import org.onlab.util.Identifier;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Representation of a policy id.
- */
-public final class PolicyId extends Identifier<String> {
-
-    protected PolicyId(String id) {
-        super(id);
-    }
-
-    /**
-     * Returns the id of the policy given the value.
-     *
-     * @param name policy id value
-     * @return policy id
-     */
-    public static PolicyId of(String name) {
-        checkNotNull(name);
-        checkArgument(!name.isEmpty(), "Name cannot be empty");
-        return new PolicyId(name);
-    }
-
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyService.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyService.java
deleted file mode 100644
index 2e188ab..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyService.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-import java.util.Set;
-
-/**
- * Policies to drop, reroute, apply QoS and overlay the traffic.
- */
-public interface PolicyService {
-    /**
-     * Traffic match priority.
-     */
-    int TRAFFIC_MATCH_PRIORITY = 60000;
-
-    /**
-     * Creates or updates a policy.
-     *
-     * @param policy the policy to create
-     * @return the id of the policy being created. Otherwise null.
-     */
-    PolicyId addOrUpdatePolicy(Policy policy);
-
-    /**
-     * Issues a policy removal.
-     *
-     * @param policyId the id of the policy to remove
-     * @return whether or not the operation was successful
-     */
-    boolean removePolicy(PolicyId policyId);
-
-    /**
-     * Returns a set of policies. The policy types can be used
-     * as filter.
-     *
-     * @param filter the policy types
-     * @return the policies stored in the system observing
-     * the filtering rule
-     */
-    Set<PolicyData> policies(Set<Policy.PolicyType> filter);
-
-    /**
-     * Attaches a traffic match to a policy.
-     *
-     * @param trafficMatch the traffic match
-     * @return the traffic match id or null if not successful
-     */
-    TrafficMatchId addOrUpdateTrafficMatch(TrafficMatch trafficMatch);
-
-    /**
-     * Issues a traffic match removal.
-     *
-     * @param trafficMatchId the id of the traffic match to remove
-     * @return whether or not the operation was successful
-     */
-    boolean removeTrafficMatch(TrafficMatchId trafficMatchId);
-
-    /**
-     * Returns a set of traffic matches.
-     *
-     * @return the traffic matches stored in the system
-     */
-    Set<TrafficMatchData> trafficMatches();
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyState.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyState.java
deleted file mode 100644
index 290852d..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/PolicyState.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-/**
- * Represents the state of a policy as seen by the system.
- */
-// TODO consider to add a FAILED state for an invalid policy that cannot be fulfilled even after a retry
-public enum PolicyState {
-    /**
-     * The policy is in the process of being added.
-     */
-    PENDING_ADD,
-
-    /**
-     * The policy has been added.
-     */
-    ADDED,
-
-    /**
-     * The policy is in the process of being removed.
-     */
-    PENDING_REMOVE
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/RedirectPolicy.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/RedirectPolicy.java
deleted file mode 100644
index d64d487..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/RedirectPolicy.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import org.onosproject.net.DeviceId;
-
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import java.util.TreeSet;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-import static com.google.common.base.Preconditions.checkArgument;
-
-/**
- * Implementation of the redirect policy.
- */
-public final class RedirectPolicy extends AbstractPolicy {
-    private List<DeviceId> spinesToEnforce = Lists.newArrayList();
-
-    /**
-     * Builds up a REDIRECT policy.
-     *
-     * @param spines the spines to enforce
-     */
-    public RedirectPolicy(Set<DeviceId> spines) {
-        super(PolicyType.REDIRECT);
-        checkArgument(!spines.isEmpty(), "Must have at least one spine");
-        // Creates an ordered set
-        TreeSet<DeviceId> sortedSpines = Sets.newTreeSet(Comparator.comparing(DeviceId::toString));
-        sortedSpines.addAll(spines);
-        spinesToEnforce.addAll(sortedSpines);
-        policyId = computePolicyId();
-    }
-
-    /**
-     * Returns the spines to be enforced during the path computation.
-     *
-     * @return the spines to be enforced
-     */
-    public List<DeviceId> spinesToEnforce() {
-        return spinesToEnforce;
-    }
-
-    @Override
-    protected PolicyId computePolicyId() {
-        return PolicyId.of(policyType().name() + spinesToEnforce);
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (!(obj instanceof RedirectPolicy)) {
-            return false;
-        }
-        final RedirectPolicy other = (RedirectPolicy) obj;
-        return Objects.equals(policyType(), other.policyType()) &&
-                Objects.equals(policyId(), other.policyId()) &&
-                Objects.equals(spinesToEnforce, other.spinesToEnforce);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(policyId(), policyType(), spinesToEnforce);
-    }
-
-    @Override
-    public String toString() {
-        return toStringHelper(this)
-                .add("policyId", policyId())
-                .add("policyType", policyType())
-                .add("spinesToEnforce", spinesToEnforce)
-                .toString();
-    }
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatch.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatch.java
deleted file mode 100644
index 83098fe..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatch.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-
-import com.google.common.hash.Funnel;
-import com.google.common.hash.HashCode;
-import com.google.common.hash.HashFunction;
-import com.google.common.hash.Hashing;
-import org.onosproject.net.flow.TrafficSelector;
-
-import java.util.Objects;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-/**
- * Representation of a traffic match.
- */
-public final class TrafficMatch {
-    // Traffic match internal state
-    private TrafficMatchId trafficMatchId;
-    private TrafficSelector trafficSelector;
-    private PolicyId policyId;
-
-    /**
-     * Builds a traffic match.
-     *
-     * @param trafficselector the traffic selector
-     * @param policyid the associated policy id
-     */
-    public TrafficMatch(TrafficSelector trafficselector, PolicyId policyid) {
-        trafficSelector = trafficselector;
-        trafficMatchId = TrafficMatchId.trafficMatchId(computeTrafficMatchId());
-        policyId = policyid;
-    }
-
-    /**
-     * Returns the traffic match id.
-     *
-     * @return the id of the traffic match
-     */
-    public TrafficMatchId trafficMatchId() {
-        return trafficMatchId;
-    }
-
-    /**
-     * Returns the id of the policy associated with.
-     *
-     * @return the policy id
-     */
-    public PolicyId policyId() {
-        return policyId;
-    }
-
-    /**
-     * Returns the traffic selector associated with.
-     *
-     * @return the traffic selector
-     */
-    public TrafficSelector trafficSelector() {
-        return trafficSelector;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(trafficMatchId, trafficSelector, policyId);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof TrafficMatch) {
-            final TrafficMatch other = (TrafficMatch) obj;
-            return Objects.equals(this.trafficMatchId, other.trafficMatchId) &&
-                    Objects.equals(trafficSelector, other.trafficSelector) &&
-                    Objects.equals(policyId, other.policyId);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return toStringHelper(this)
-                .add("trafficMatchId", trafficMatchId)
-                .add("trafficSelector", trafficSelector)
-                .add("policyId", policyId)
-                .toString();
-    }
-
-    // Compute the id using the traffic selector. This method results to be consistent across the cluster.
-    private int computeTrafficMatchId() {
-        Funnel<TrafficSelector> selectorFunnel = (from, into) -> from.criteria()
-                .forEach(c -> into.putUnencodedChars(c.toString()));
-        HashFunction hashFunction = Hashing.murmur3_32();
-        HashCode hashCode = hashFunction.newHasher()
-                .putObject(trafficSelector, selectorFunnel)
-                .hash();
-        return hashCode.asInt();
-    }
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchData.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchData.java
deleted file mode 100644
index 3932b4c..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchData.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-import java.util.List;
-
-/**
- * Traffic match data retrieved from the system.
- */
-public final class TrafficMatchData {
-    // We want to provide access to the traffic match data as well as
-    // the traffic match operations in the system and their status
-    private final TrafficMatchState trafficMatchState;
-    private final TrafficMatch trafficMatch;
-    private final List<String> operations;
-
-
-    public TrafficMatchData(TrafficMatchState tState, TrafficMatch tMatch, List<String> ops) {
-        trafficMatch = tMatch;
-        trafficMatchState = tState;
-        operations = ops;
-    }
-
-    /**
-     * Returns the current state of the traffic match.
-     *
-     * @return the traffic match state
-     */
-    public TrafficMatchState trafficMatchState() {
-        return trafficMatchState;
-    }
-
-
-    /**
-     * Returns the traffic match associated.
-     *
-     * @return the traffic match
-     */
-    public TrafficMatch trafficMatch() {
-        return trafficMatch;
-    }
-
-    /**
-     * Returns the operations in the system in form of strings.
-     *
-     * @return the operations
-     */
-    public List<String> operations() {
-        return operations;
-    }
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchId.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchId.java
deleted file mode 100644
index 5833f66..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchId.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-import org.onlab.util.Identifier;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Representation of a traffic match id.
- */
-public final class TrafficMatchId extends Identifier<Integer> {
-
-    protected TrafficMatchId(int value) {
-        super(value);
-    }
-
-    /**
-     * Converts an int into a traffic match id.
-     *
-     * @param value the value of the id
-     * @return the traffic match id
-     */
-    public static TrafficMatchId trafficMatchId(int value) {
-        return new TrafficMatchId(value);
-    }
-
-    /**
-     * Returns the id of the traffic match given the value.
-     *
-     * @param name traffic match id value
-     * @return traffic match id
-     */
-    public static TrafficMatchId of(String name) {
-        checkNotNull(name);
-        checkArgument(!name.isEmpty(), "Name cannot be empty");
-        return new TrafficMatchId(Integer.parseInt(name));
-    }
-
-    @Override
-    public String toString() {
-        return String.valueOf(this.identifier);
-    }
-
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchState.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchState.java
deleted file mode 100644
index ab79e2f..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchState.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.segmentrouting.policy.api;
-
-/**
- * Represents the state of a traffic match as seen by the system.
- */
-// TODO consider to add a FAILED state for an invalid traffic match that cannot be fulfilled even after a retry
-public enum TrafficMatchState {
-    /**
-     * The traffic match is in the process of being added.
-     */
-    PENDING_ADD,
-
-    /**
-     * The traffic match has been added.
-     */
-    ADDED,
-
-    /**
-     * The traffic match is in the process of being removed.
-     */
-    PENDING_REMOVE
-}
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/package-info.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/api/package-info.java
deleted file mode 100644
index cfbaa28..0000000
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2018-present Open Networking Foundation
- *
- * 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.
- */
-
-/**
- * Policy API.
- */
-package org.onosproject.segmentrouting.policy.api;
\ No newline at end of file
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/DropPolicyCodec.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/impl/DropPolicyCodec.java
similarity index 92%
rename from impl/src/main/java/org/onosproject/segmentrouting/policy/api/DropPolicyCodec.java
rename to impl/src/main/java/org/onosproject/segmentrouting/policy/impl/DropPolicyCodec.java
index 407bd08..2d6f321 100644
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/DropPolicyCodec.java
+++ b/impl/src/main/java/org/onosproject/segmentrouting/policy/impl/DropPolicyCodec.java
@@ -13,12 +13,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.segmentrouting.policy.api;
+package org.onosproject.segmentrouting.policy.impl;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
+import org.onosproject.segmentrouting.policy.api.DropPolicy;
 
 /**
  * Codec of DropPolicy class.
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/impl/PolicyManager.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/impl/PolicyManager.java
index 87fa61a..f1dc285 100644
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/impl/PolicyManager.java
+++ b/impl/src/main/java/org/onosproject/segmentrouting/policy/impl/PolicyManager.java
@@ -47,22 +47,19 @@
 import org.onosproject.net.intent.WorkPartitionService;
 import org.onosproject.net.link.LinkService;
 import org.onosproject.segmentrouting.SegmentRoutingService;
-import org.onosproject.segmentrouting.config.DeviceConfigNotFoundException;
 import org.onosproject.segmentrouting.policy.api.DropPolicy;
-import org.onosproject.segmentrouting.policy.api.DropPolicyCodec;
 import org.onosproject.segmentrouting.policy.api.Policy;
-import org.onosproject.segmentrouting.policy.api.Policy.PolicyType;
 import org.onosproject.segmentrouting.policy.api.PolicyData;
 import org.onosproject.segmentrouting.policy.api.PolicyId;
 import org.onosproject.segmentrouting.policy.api.PolicyService;
 import org.onosproject.segmentrouting.policy.api.PolicyState;
 import org.onosproject.segmentrouting.policy.api.RedirectPolicy;
-import org.onosproject.segmentrouting.policy.api.RedirectPolicyCodec;
 import org.onosproject.segmentrouting.policy.api.TrafficMatch;
-import org.onosproject.segmentrouting.policy.api.TrafficMatchCodec;
 import org.onosproject.segmentrouting.policy.api.TrafficMatchData;
 import org.onosproject.segmentrouting.policy.api.TrafficMatchId;
 import org.onosproject.segmentrouting.policy.api.TrafficMatchState;
+import org.onosproject.segmentrouting.config.DeviceConfigNotFoundException;
+import org.onosproject.segmentrouting.policy.api.Policy.PolicyType;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onosproject.store.service.ConsistentMap;
 import org.onosproject.store.service.MapEvent;
@@ -101,7 +98,7 @@
     static final String KEY_SEPARATOR = "|";
 
     // Supported policies
-    private static final Set<Policy.PolicyType> SUPPORTED_POLICIES = ImmutableSet.of(
+    private static final Set<PolicyType> SUPPORTED_POLICIES = ImmutableSet.of(
             PolicyType.DROP, PolicyType.REDIRECT);
 
     // Driver should use this meta to match port_is_edge field in the ACL table
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/RedirectPolicyCodec.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/impl/RedirectPolicyCodec.java
similarity index 95%
rename from impl/src/main/java/org/onosproject/segmentrouting/policy/api/RedirectPolicyCodec.java
rename to impl/src/main/java/org/onosproject/segmentrouting/policy/impl/RedirectPolicyCodec.java
index efb2828..f3c4ab9 100644
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/RedirectPolicyCodec.java
+++ b/impl/src/main/java/org/onosproject/segmentrouting/policy/impl/RedirectPolicyCodec.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.segmentrouting.policy.api;
+package org.onosproject.segmentrouting.policy.impl;
 
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -21,6 +21,7 @@
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.net.DeviceId;
+import org.onosproject.segmentrouting.policy.api.RedirectPolicy;
 
 import java.util.LinkedList;
 import java.util.List;
diff --git a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchCodec.java b/impl/src/main/java/org/onosproject/segmentrouting/policy/impl/TrafficMatchCodec.java
similarity index 93%
rename from impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchCodec.java
rename to impl/src/main/java/org/onosproject/segmentrouting/policy/impl/TrafficMatchCodec.java
index 1f4f8be..fe6d464 100644
--- a/impl/src/main/java/org/onosproject/segmentrouting/policy/api/TrafficMatchCodec.java
+++ b/impl/src/main/java/org/onosproject/segmentrouting/policy/impl/TrafficMatchCodec.java
@@ -13,13 +13,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.segmentrouting.policy.api;
+package org.onosproject.segmentrouting.policy.impl;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.segmentrouting.policy.api.PolicyId;
+import org.onosproject.segmentrouting.policy.api.TrafficMatch;
 
 import static org.onlab.util.Tools.nullIsIllegal;
 
