   end
 
   defp do_run(%CreateColumn{} = cc, w) do
-    data = Map.take(cc, [:dataTypeName, :name])
-    |> Map.merge(cc.properties)
+    data = merge_column(cc)
 
     with {:ok, json} <- Poison.encode(data) do
       Http.post("/views/#{cc.fourfour}/columns", w, json)
+    end
+  end
+
+  defp do_run(%CreateColumns{columns: ccs}, w) do
+    data = %{"columns" => Enum.map(ccs, &merge_column/1)}
+
+    with {:ok, json} <- Poison.encode(data) do
+      Http.post("/views/#{hd(ccs).fourfour}/columns?method=multiCreate", w, json)
     end
   end
 

    end
  end

  def run(%Write{} = w) do
    Enum.reduce_while(Enum.reverse(w.operations), [], fn op, acc ->
        case do_run(op, w) do
          {:error, _} = err -> {:halt, [err | acc]}
          {:ok, _} = ok     -> {:cont, [ok  | acc]}

    dataTypeName: nil,
    fourfour: nil,
    properties: %{} # description, fieldName
  end

  defmodule CreateColumns do
    defstruct columns: []
  end

  defmodule CreateView do
