         kind (type-kind (:type arg))
         inner-type (get-in arg [:type :inner-type])]
     (assert kind (format "argument kind is nil for: %s" arg))
-    (when (= :LIST kind)
+    (when (#{:LIST} kind)
       (assert inner-type (format "inner-type is nil for type: %s" arg)))
     (assert (or type-name inner-type) (format "Both type-name and inner-type are nil for arg:%s" arg))
     (println "args-resolver: arg:" arg)
-    {:name (:name arg)
-     :description (:description arg)
-     
-     ;; defer resolving of type for argument
-     :type-name type-name
-     :kind kind
-     :inner-type inner-type
-     :required (:required arg)
-     
-     :defaultValue (:default-value arg)}))
+    (if (= :NON_NULL kind)
+      {:kind kind
+       :inner-type (dissoc type :required)}
+      {:name (:name arg)
+       :description (:description arg)
+       
+       ;; defer resolving of type for argument
+       :type-name type-name
+       :kind kind
+       :inner-type inner-type
+       :required (:required arg)
+       
+       :defaultValue (:default-value arg)})))

                      (if (:tag type)
                        (case (:tag type)
                          :basic-type (:name type)
                          (throw (ex-info (format "Unhandled type in type-resolver:%s" type) {:type type}))))
                      ;; (cond
                      ;;   (contains? #{:type-definition

                      ;;   :default (throw (ex-info (format "Unhandled type in type-resolver:%s" type) {:type type})))
                      )
        inner-type (:inner-type type)]
    (when (not (#{:LIST :NON_NULL} kind))
      (assert type-name (format "type-name is null for type: %s." type))
      (assert kind (format "kind is nil for type: %s" type)))
    (if (#{:LIST} kind)
      (assert inner-type (format "inner-type is nil for type: %s" type)))
    (assert (or type-name inner-type) (format "Both type-name and inner-type are nil for type:%s" type))
    (if (:required type)
