diff --git a/base/src/org/compiere/model/GridTab.java b/base/src/org/compiere/model/GridTab.java
index 78d016d640..20ef74481c 100644
--- a/base/src/org/compiere/model/GridTab.java
+++ b/base/src/org/compiere/model/GridTab.java
@@ -74,6 +74,8 @@ import org.compiere.util.ValueNamePair;
  *  			<li>BF [ 1742159 ] Editable number field for inactive record
  *  			<li>BF [ 1968598 ] Callout is not called if tab is processed
  *  			<li>BF [ 2104022 ] GridTab.processCallout: throws NPE if callout returns null
+ *  			<li>FR [ 2846871 ] Add method org.compiere.model.GridTab.getIncludedTabs
+ *  				https://sourceforge.net/tracker/?func=detail&aid=2846871&group_id=176962&atid=879335
  *  @author Victor Perez , e-Evolution.SC [1877902] Implement JSR 223 Scripting APIs to Callout
  *  @author Carlos Ruiz, qss FR [1877902]
  *  @see  http://sourceforge.net/tracker/?func=detail&atid=879335&aid=1877902&group_id=176962 to FR [1877902]
@@ -2944,5 +2946,29 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable
 		}
 		
 	}
-
+	
+	/**
+	 * 
+	 * @return list of all tabs included in this tab
+	 */
+	public List<GridTab> getIncludedTabs()
+	{
+		List<GridTab> list = new ArrayList<GridTab>(1);
+		for (GridField field : getFields())
+		{
+			if (field.getIncluded_Tab_ID() > 0)
+			{
+				for (int i = 0; i < m_window.getTabCount(); i++)
+				{
+					final GridTab detailTab = m_window.getTab(i);
+					if (detailTab.getAD_Tab_ID() == field.getIncluded_Tab_ID())
+					{
+						list.add(detailTab);
+						break;
+					}
+				}
+			}
+		}
+		return list;
+	}
 }	//	GridTab