diff --git a/framework/webtools/src/org/ofbiz/webtools/artifactinfo/FormWidgetArtifactInfo.java b/framework/webtools/src/org/ofbiz/webtools/artifactinfo/FormWidgetArtifactInfo.java
index 46f0f93..d601bfb 100644
--- a/framework/webtools/src/org/ofbiz/webtools/artifactinfo/FormWidgetArtifactInfo.java
+++ b/framework/webtools/src/org/ofbiz/webtools/artifactinfo/FormWidgetArtifactInfo.java
@@ -33,7 +33,7 @@
 import org.ofbiz.base.util.UtilURL;
 import org.ofbiz.widget.artifact.ArtifactInfoContext;
 import org.ofbiz.widget.artifact.ArtifactInfoGatherer;
-import org.ofbiz.widget.model.ModelForm;
+import org.ofbiz.widget.model.*;
 import org.xml.sax.SAXException;
 
 /**
@@ -73,7 +73,11 @@
         ArtifactInfoContext infoContext = new ArtifactInfoContext();
         ArtifactInfoGatherer infoGatherer = new ArtifactInfoGatherer(infoContext);
         try {
-            infoGatherer.visit(this.modelForm);
+            if (this.modelForm instanceof ModelSingleForm) {
+                infoGatherer.visit((ModelSingleForm) this.modelForm);
+            } else {
+                infoGatherer.visit((ModelGrid) this.modelForm);
+            }
         } catch (Exception e) {
             throw new GeneralException(e);
         }
diff --git a/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java b/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java
index 6c33396..82c6faa 100644
--- a/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java
+++ b/framework/widget/src/org/ofbiz/widget/artifact/ArtifactInfoGatherer.java
@@ -33,22 +33,14 @@
 import org.ofbiz.widget.model.AbstractModelAction.Script;
 import org.ofbiz.widget.model.AbstractModelAction.Service;
 import org.ofbiz.widget.model.AbstractModelAction.SetField;
-import org.ofbiz.widget.model.FieldInfo;
-import org.ofbiz.widget.model.HtmlWidget;
+import org.ofbiz.widget.model.*;
 import org.ofbiz.widget.model.HtmlWidget.HtmlTemplate;
 import org.ofbiz.widget.model.HtmlWidget.HtmlTemplateDecorator;
 import org.ofbiz.widget.model.HtmlWidget.HtmlTemplateDecoratorSection;
-import org.ofbiz.widget.model.IterateSectionWidget;
-import org.ofbiz.widget.model.ModelAction;
-import org.ofbiz.widget.model.ModelActionVisitor;
-import org.ofbiz.widget.model.ModelFieldVisitor;
-import org.ofbiz.widget.model.ModelForm;
 import org.ofbiz.widget.model.ModelForm.AltTarget;
 import org.ofbiz.widget.model.ModelForm.AutoFieldsEntity;
 import org.ofbiz.widget.model.ModelForm.AutoFieldsService;
-import org.ofbiz.widget.model.ModelFormAction;
 import org.ofbiz.widget.model.ModelFormAction.CallParentActions;
-import org.ofbiz.widget.model.ModelFormField;
 import org.ofbiz.widget.model.ModelFormField.CheckField;
 import org.ofbiz.widget.model.ModelFormField.ContainerField;
 import org.ofbiz.widget.model.ModelFormField.DateFindField;
@@ -71,11 +63,6 @@
 import org.ofbiz.widget.model.ModelFormField.TextField;
 import org.ofbiz.widget.model.ModelFormField.TextFindField;
 import org.ofbiz.widget.model.ModelFormField.TextareaField;
-import org.ofbiz.widget.model.ModelMenu;
-import org.ofbiz.widget.model.ModelMenuAction;
-import org.ofbiz.widget.model.ModelMenuItem;
-import org.ofbiz.widget.model.ModelScreen;
-import org.ofbiz.widget.model.ModelScreenWidget;
 import org.ofbiz.widget.model.ModelScreenWidget.Column;
 import org.ofbiz.widget.model.ModelScreenWidget.ColumnContainer;
 import org.ofbiz.widget.model.ModelScreenWidget.Container;
@@ -96,11 +83,8 @@
 import org.ofbiz.widget.model.ModelScreenWidget.Screenlet;
 import org.ofbiz.widget.model.ModelScreenWidget.Section;
 import org.ofbiz.widget.model.ModelScreenWidget.Tree;
-import org.ofbiz.widget.model.ModelTree;
 import org.ofbiz.widget.model.ModelTree.ModelNode;
 import org.ofbiz.widget.model.ModelTree.ModelNode.ModelSubNode;
-import org.ofbiz.widget.model.ModelTreeAction;
-import org.ofbiz.widget.model.ModelWidgetVisitor;
 
 /**
  * An object that gathers artifact information from screen widgets.
@@ -240,7 +224,7 @@
     }
 
     @Override
-    public void visit(ModelForm modelForm) throws Exception {
+    public void visit(ModelSingleForm modelForm) throws Exception {
         if (modelForm.getActions() != null) {
             for (ModelAction action : modelForm.getActions()) {
                 action.accept(this);
@@ -318,6 +302,12 @@
     }
 
     @Override
+    public void visit(ModelGrid modelGrid) throws Exception {
+        // TODO: Finish implementation
+        
+    }
+
+    @Override
     public void visit(ModelFormAction.Service service) throws Exception {
         infoContext.addServiceName(service.getServiceName());
         // TODO: Look for entityName in performFind service call
diff --git a/framework/widget/src/org/ofbiz/widget/model/ModelForm.java b/framework/widget/src/org/ofbiz/widget/model/ModelForm.java
index 191c78b..b2e0d20 100644
--- a/framework/widget/src/org/ofbiz/widget/model/ModelForm.java
+++ b/framework/widget/src/org/ofbiz/widget/model/ModelForm.java
@@ -734,11 +734,6 @@
         this.focusFieldName = focusFieldName;
     }
 
-    @Override
-    public void accept(ModelWidgetVisitor visitor) throws Exception {
-        visitor.visit(this);
-    }
-
     private void addAutoFieldsFromEntity(AutoFieldsEntity autoFieldsEntity, ModelReader entityModelReader,
             Set<String> useWhenFields, List<ModelFormFieldBuilder> fieldBuilderList, Map<String, ModelFormFieldBuilder> fieldBuilderMap) {
         // read entity def and auto-create fields
diff --git a/framework/widget/src/org/ofbiz/widget/model/ModelWidgetVisitor.java b/framework/widget/src/org/ofbiz/widget/model/ModelWidgetVisitor.java
index 9ad6785..9728c3f 100644
--- a/framework/widget/src/org/ofbiz/widget/model/ModelWidgetVisitor.java
+++ b/framework/widget/src/org/ofbiz/widget/model/ModelWidgetVisitor.java
@@ -18,7 +18,6 @@
  *******************************************************************************/
 package org.ofbiz.widget.model;
 
-import org.ofbiz.widget.model.HtmlWidget;
 
 /**
  *  A <code>ModelWidget</code> visitor.
@@ -35,7 +34,9 @@
 
     void visit(IterateSectionWidget iterateSectionWidget) throws Exception;
 
-    void visit(ModelForm modelForm) throws Exception;
+    void visit(ModelSingleForm modelForm) throws Exception;
+
+    void visit(ModelGrid modelGrid) throws Exception;
 
     void visit(ModelMenu modelMenu) throws Exception;
 
diff --git a/framework/widget/src/org/ofbiz/widget/model/XmlWidgetVisitor.java b/framework/widget/src/org/ofbiz/widget/model/XmlWidgetVisitor.java
index a40e3c2..049d996 100644
--- a/framework/widget/src/org/ofbiz/widget/model/XmlWidgetVisitor.java
+++ b/framework/widget/src/org/ofbiz/widget/model/XmlWidgetVisitor.java
@@ -237,7 +237,7 @@
     }
 
     @Override
-    public void visit(ModelForm modelForm) throws Exception {
+    public void visit(ModelSingleForm modelForm) throws Exception {
         writer.append("<form");
         visitModelWidget(modelForm);
         if (modelForm.getParentModelForm() != null) {
@@ -345,12 +345,21 @@
     }
 
     @Override
-    public void visit(Grid grid) throws Exception {
-        // TODO Auto-generated method stub
+    public void visit(ModelGrid modelGrid) throws Exception {
+        // TODO: Finish implementation
         
     }
 
     @Override
+    public void visit(Grid grid) throws Exception {
+        writer.append("<include-grid");
+        visitModelWidget(grid);
+        visitAttribute("location", grid.getLocationExdr());
+        visitAttribute("share-scope", grid.getShareScopeExdr());
+        writer.append("/>");
+    }
+
+    @Override
     public void visit(ModelMenu modelMenu) throws Exception {
         writer.append("<menu");
         visitModelWidget(modelMenu);
