diff --git a/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketContext.java b/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketContext.java
index eba8e8e..5bbbb62 100644
--- a/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketContext.java
+++ b/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketContext.java
@@ -15,13 +15,15 @@
  */
 package org.onosproject.net.packet;
 
-import java.util.concurrent.atomic.AtomicBoolean;
-
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.flow.TrafficTreatment.Builder;
 
+import java.util.concurrent.atomic.AtomicBoolean;
 
+/**
+ * Default implementation of a packet context.
+ */
 public abstract class DefaultPacketContext implements PacketContext {
 
     private final long time;
@@ -31,7 +33,14 @@
 
     private final AtomicBoolean block;
 
-
+    /**
+     * Creates a new packet context.
+     *
+     * @param time creation time
+     * @param inPkt inbound packet
+     * @param outPkt outbound packet
+     * @param block whether the context is blocked or not
+     */
     protected DefaultPacketContext(long time, InboundPacket inPkt,
             OutboundPacket outPkt, boolean block) {
         super();
diff --git a/openflow/api/src/main/java/org/onosproject/openflow/controller/DefaultOpenFlowPacketContext.java b/openflow/api/src/main/java/org/onosproject/openflow/controller/DefaultOpenFlowPacketContext.java
index 7a265a0..ecc49bd 100644
--- a/openflow/api/src/main/java/org/onosproject/openflow/controller/DefaultOpenFlowPacketContext.java
+++ b/openflow/api/src/main/java/org/onosproject/openflow/controller/DefaultOpenFlowPacketContext.java
@@ -19,6 +19,7 @@
 import org.onlab.packet.Ethernet;
 import org.projectfloodlight.openflow.protocol.OFPacketIn;
 import org.projectfloodlight.openflow.protocol.OFPacketOut;
+import org.projectfloodlight.openflow.protocol.OFVersion;
 import org.projectfloodlight.openflow.protocol.action.OFAction;
 import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
 import org.projectfloodlight.openflow.protocol.match.MatchField;
@@ -29,6 +30,9 @@
 import java.util.Collections;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+/**
+ * Default implementation of an OpenFlowPacketContext.
+ */
 public final class DefaultOpenFlowPacketContext implements OpenFlowPacketContext {
 
     private final AtomicBoolean free = new AtomicBoolean(true);
@@ -99,6 +103,13 @@
         return new Dpid(sw.getId());
     }
 
+    /**
+     * Creates an OpenFlow packet context based on a packet-in.
+     *
+     * @param s OpenFlow switch
+     * @param pkt OpenFlow packet-in
+     * @return the OpenFlow packet context
+     */
     public static OpenFlowPacketContext packetContextFromPacketIn(OpenFlowSwitch s,
                                                                   OFPacketIn pkt) {
         return new DefaultOpenFlowPacketContext(s, pkt);
@@ -110,12 +121,10 @@
     }
 
     private OFPort pktinInPort() {
-        //FIXME: this has to change in loxi
-        try {
+        if (pktin.getVersion() == OFVersion.OF_10) {
             return pktin.getInPort();
-        } catch (UnsupportedOperationException e) {
-            return pktin.getMatch().get(MatchField.IN_PORT);
         }
+        return pktin.getMatch().get(MatchField.IN_PORT);
     }
 
     @Override
diff --git a/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowCorePacketContext.java b/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowCorePacketContext.java
index 5b7487b..9ea728a 100644
--- a/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowCorePacketContext.java
+++ b/providers/openflow/packet/src/main/java/org/onosproject/provider/of/packet/impl/OpenFlowCorePacketContext.java
@@ -28,10 +28,22 @@
 
 import java.util.List;
 
+/**
+ * Packet context used with the OpenFlow providers.
+ */
 public class OpenFlowCorePacketContext extends DefaultPacketContext {
 
     private final OpenFlowPacketContext ofPktCtx;
 
+    /**
+     * Creates a new OpenFlow core packet context.
+     *
+     * @param time creation time
+     * @param inPkt inbound packet
+     * @param outPkt outbound packet
+     * @param block whether the context is blocked or not
+     * @param ofPktCtx OpenFlow packet context
+     */
     protected OpenFlowCorePacketContext(long time, InboundPacket inPkt,
                                         OutboundPacket outPkt, boolean block,
                                         OpenFlowPacketContext ofPktCtx) {
