diff --git a/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java b/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
index 8da3df5b8552548a9ff6a53dcc8bab63e9a07653..2be66f8edd56a40c4cdc4a8726166405a5b7804a 100644
--- a/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
+++ b/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
@@ -23,9 +23,12 @@
  */
 package com.syncleus.ferma;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.function.Function;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.structure.*;
@@ -232,6 +235,23 @@ public abstract class AbstractVertexFrame extends AbstractElementFrame implement
         return this.setLinkBothExplicit(new DefaultClassInitializer<>(kind), labels);
     }
 
+    private Object getPropertySupportingMultiproperty(final String name) {
+        final Iterator<VertexProperty<Object>> propertyIterator = getElement().properties(name);
+        List<Object> results = new ArrayList<>();
+        while (propertyIterator.hasNext()) {
+            Property<Object> property = propertyIterator.next();
+            if (property.isPresent()) {
+                results.add(property.value());
+            }
+        }
+
+        if (results.size() == 1) {
+            return results.get(0);
+        } else {
+            return results;
+        }
+    }
+
     @Override
     public JsonObject toJson() {
         final JsonObject json = new JsonObject();
@@ -241,15 +261,27 @@ public abstract class AbstractVertexFrame extends AbstractElementFrame implement
             json.addProperty("id", getId(String.class));
         json.addProperty("elementClass", "vertex");
         for (final String key : getPropertyKeys()) {
-
-            final Object value = getProperty(key);
+            Object value = getPropertySupportingMultiproperty(key);
             if (value instanceof Number)
                 json.addProperty(key, (Number) value);
             else if(value instanceof Boolean)
                 json.addProperty(key, (Boolean) value);
             else if(value instanceof Character)
                 json.addProperty(key, (Character) value);
-            else
+            else if (value instanceof List) {
+                JsonArray jsonArray = new JsonArray();
+                ((List) value).forEach(item -> {
+                    if (item instanceof Number)
+                        jsonArray.add((Number) item);
+                    else if(item instanceof Boolean)
+                        jsonArray.add((Boolean) item);
+                    else if(item instanceof Character)
+                        jsonArray.add((Character) item);
+                    else
+                        jsonArray.add(item.toString());
+                });
+                json.add(key, jsonArray);
+            } else
                 json.addProperty(key, value.toString());
         }
         return json;
diff --git a/src/test/java/com/syncleus/ferma/AbstractElementFrameTest.java b/src/test/java/com/syncleus/ferma/AbstractElementFrameTest.java
index a3355dd031ebb28d3c0c7d572cc825f85b8fdbbb..fda8706fc0d53944f8eb87f1207989d46f135002 100644
--- a/src/test/java/com/syncleus/ferma/AbstractElementFrameTest.java
+++ b/src/test/java/com/syncleus/ferma/AbstractElementFrameTest.java
@@ -17,6 +17,8 @@ package com.syncleus.ferma;
 
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
 import org.junit.Assert;
 import org.junit.Before;
@@ -26,6 +28,8 @@ import com.google.common.collect.Sets;
 import com.google.gson.JsonObject;
 import com.syncleus.ferma.graphtypes.javaclass.JavaAccessModifier;
 import java.io.IOException;
+import java.util.Iterator;
+
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.junit.After;
 
@@ -211,6 +215,31 @@ public class AbstractElementFrameTest {
         Assert.assertEquals(expected.getProperty(charPropName), (Character) actual.get(charPropName).getAsCharacter());
     }
 
+    @Test
+    public void testVtoJSonMultiproperty() {
+        String stringPropName = "custom-string-property";
+        String stringPropValue = "custom-string-value";
+        String charPropName = "custom-char-property";
+        Character charPropValue = 'D';
+        String intPropName = "custom-int-property";
+        int intPropValue = 1234;
+        Person expected = fg.addFramedVertex(Person.DEFAULT_INITIALIZER,
+            T.id, "some-id",
+            stringPropName, stringPropValue,
+            charPropName, charPropValue,
+            intPropName, intPropValue);
+        Vertex vertex = expected.getElement();
+
+        String key = "multiproperty";
+        vertex.property(VertexProperty.Cardinality.list, key, "value1");
+        vertex.property(VertexProperty.Cardinality.list, key, "value2");
+        vertex.property(VertexProperty.Cardinality.list, key, "value3");
+        vertex.property(VertexProperty.Cardinality.list, key, "value4");
+
+        JsonObject actual = expected.toJson();
+        Assert.assertNotNull(actual);
+    }
+
     @Test
     public void testEtoJson() {
         JsonObject actual = e1.toJson();