Index: typo3/sysext/t3skin/stylesheets/structure/module_web_page.css
===================================================================
--- typo3/sysext/t3skin/stylesheets/structure/module_web_page.css	(revision 8138)
+++ typo3/sysext/t3skin/stylesheets/structure/module_web_page.css	(working copy)
@@ -14,6 +14,7 @@
 	padding-left: 20px;
 	padding-right: 20px;
 	position: relative;
+	min-width: 150px;
 }
 
 .t3-page-colHeader a {
Index: typo3/sysext/cms/layout/class.tx_cms_layout.php
===================================================================
--- typo3/sysext/cms/layout/class.tx_cms_layout.php	(revision 8138)
+++ typo3/sysext/cms/layout/class.tx_cms_layout.php	(working copy)
@@ -157,11 +157,39 @@
 	);
 	var $CType_labels=array();				// Used to store labels for CTypes for tt_content elements
 	var $itemLabels=array();				// Used to store labels for the various fields in tt_content elements
+	
+	var $pObj;
 
 
 
 
+		// Clipboard is initialized:
+	function __construct()	{
+		
+			// Start clipboard
+		$this->clipObj = t3lib_div::makeInstance('t3lib_clipboard');
+		
+			// Initialize - reads the clipboard content from the user session
+		$this->clipObj->initializeClipboard();
 
+			// Clipboard actions are handled:
+		$CB = t3lib_div::_GET('CB');	
+		if ($this->cmd == 'setCB') {
+				
+				// CBH is all the fields selected for the clipboard, CBC is the checkbox fields which were checked. By merging we get a full array of checked/unchecked elements
+				// This is set to the 'el' array of the CB after being parsed so only the table in question is registered.
+			$CB['el'] = $this->clipObj->cleanUpCBC(array_merge((array)t3lib_div::_POST('CBH'), (array)t3lib_div::_POST('CBC')), $this->cmd_table);
+		}
+		
+			// If the clipboard is NOT shown, set the pad to 'normal'.
+		$CB['setP'] = 'normal';	
+		
+			// Execute commands.
+		$this->clipObj->setCmd($CB);
+		
+		$this->clipObj->cleanCurrent();
+		$this->clipObj->endClipboard();
+	}
 
 
 	/*****************************************
@@ -493,7 +521,7 @@
 
 						// Add new-icon link, header:
 					$newP = $this->newContentElementOnClick($id,$key,$lP);
-					$head[$key].= $this->tt_content_drawColHeader(t3lib_BEfunc::getProcessedValue('tt_content','colPos',$key), ($this->doEdit&&count($rowArr)?'&edit[tt_content]['.$editUidList.']=edit'.$pageTitleParamForAltDoc:''), $newP);
+					$head[$key].= $this->tt_content_drawColHeader(t3lib_BEfunc::getProcessedValue('tt_content','colPos',$key), ($this->doEdit&&count($rowArr)?'&edit[tt_content]['.$editUidList.']=edit'.$pageTitleParamForAltDoc:''), $newP, $key);
 					$editUidList = '';
 				}
 
@@ -721,7 +749,7 @@
 						<tr>
 							<td></td>
 							<td valign="top" colspan="3">'.
-								$this->tt_content_drawColHeader(t3lib_BEfunc::getProcessedValue('tt_content','colPos',$key), ($this->doEdit&&count($rowArr)?'&edit[tt_content]['.$editUidList.']=edit'.$pageTitleParamForAltDoc:''), $newP).
+								$this->tt_content_drawColHeader(t3lib_BEfunc::getProcessedValue('tt_content','colPos',$key), ($this->doEdit&&count($rowArr)?'&edit[tt_content]['.$editUidList.']=edit'.$pageTitleParamForAltDoc:''), $newP, $key).
 								$theNewButton.
 								'<br /></td>
 						</tr>';
@@ -1497,7 +1525,7 @@
 	 * @param	string		New element params (Syntax: &edit[...] for alt_doc.php)
 	 * @return	string		HTML table
 	 */
-	function tt_content_drawColHeader($colName,$editParams,$newParams)	{
+	function tt_content_drawColHeader($colName,$editParams,$newParams, $colKey)	{
 
 		$icons = '';
 			// Create command links:
@@ -1514,6 +1542,8 @@
 					t3lib_iconWorks::getSpriteIcon('actions-document-open') .
 					'</a>';
 			}
+
+			$icons .= $this->getPasteLink($colKey);
 		}
 		if (strlen($icons)) {
 			$icons = '<div class="t3-page-colHeader-icons">' . $icons . '</div>';
@@ -1537,7 +1567,7 @@
 	 * @return	string		HTML table with the record header.
 	 */
 	function tt_content_drawHeader($row,$space=0,$disableMoveAndNewButtons=FALSE,$langMode=FALSE)	{
-		global $TCA;
+		global $TCA, $LANG;
 
 			// Load full table description:
 		t3lib_div::loadTCA('tt_content');
@@ -1642,7 +1672,43 @@
 					$out .= '</span>';
 				}
 			}
+			
+				// Add copy/cut icons
+			if ($this->clipObj->current === 'normal') {
 
+				$isSel = (string)$this->clipObj->isSelected('tt_content', $row['uid']);
+				$url = htmlspecialchars(
+						$this->clipObj->selUrlDB(
+							'tt_content',
+							$row['uid'],
+							1,
+							($isSel == 'copy'),
+							array('returnUrl' => '')
+						)
+					);
+				$out .= '<a href="' . $url . '" 
+							title="' . $LANG->sL('LLL:EXT:lang/locallang_core.php:cm.copy', TRUE) . '">' .
+							((!$isSel == 'copy') ? t3lib_iconWorks::getSpriteIcon('actions-edit-copy') : t3lib_iconWorks::getSpriteIcon('actions-edit-copy-release')) .
+						'</a>';
+							
+				$url = htmlspecialchars(
+					$this->clipObj->selUrlDB(
+						'tt_content',
+						$row['uid'],
+						0,
+						($isSel == 'cut'),
+						array('returnUrl' => '')
+					)
+				);
+				$out .= '<a href="' . $url . '" 
+							title="' . $LANG->sL('LLL:EXT:lang/locallang_core.php:cm.cut', TRUE) . '">'.
+							((!$isSel == 'cut') ? t3lib_iconWorks::getSpriteIcon('actions-edit-cut') : t3lib_iconWorks::getSpriteIcon('actions-edit-cut-release')) .
+						'</a>';
+			}
+			
+				// Add paste link
+			$out .= $this->getPasteLink($row['colPos'], $row['uid']);
+			
 				// Display info from records fields:
 			$infoOutput = '';
 			if (count($info))	{
@@ -2659,6 +2725,43 @@
 
 		return strip_tags($content);
 	}
+	
+	/**
+	 * Returns a link to paste elements from clipboard into a page or 
+	 * after a content element if the second parameter is set
+	 *
+	 * @param	int			The ID of the column the elements in clipboard should get pasted into
+	 * @param	int			Optional: The ID of an element the elements in clipboard should get pasted after
+	 * @return	string		The generated link
+	 */
+	protected function getPasteLink($colPos, $insertAfterUid = FALSE) {
+		global $LANG;
+		$elFromTable = $this->clipObj->elFromTable('tt_content');
+		if (count($elFromTable))	{
+			$pasteUrl = '/typo3/tce_db.php?&vC=' . $GLOBALS['BE_USER']->veriCode() . '&prErr=1&uPT=1&';
+						
+			foreach ($elFromTable as $info=>$val) {
+				$id = $this->id;
+				if($insertAfterUid) {
+					$id = '-' . $insertAfterUid;
+				}
+				list($table, $uid) = explode('|', $info);
+				$pasteUrl .= 'cmd[' . $table . '][' . $uid . '][copy]=' . $id;
+				
+			}
+			$pasteUrl .= '&overrideValues[colPos]=' . $colPos;
+			$pasteUrl .= '&redirect=' . urlencode('/typo3/sysext/cms/layout/db_layout.php?&id=' . $this->id . '&SET[function]=' . $this->pObj->MOD_SETTINGS['function']);
+			if($insertAfterUid) {
+				$title = $LANG->sL('LLL:EXT:lang/locallang_core.php:cm.pasteafter', TRUE);
+			} else {
+				$title = $LANG->sL('LLL:EXT:lang/locallang_core.php:cm.pasteinto', TRUE);
+			}
+			return '<a 
+				href="' . htmlspecialchars($pasteUrl) . '" 
+				title="' . $title . '"
+				>'. t3lib_iconWorks::getSpriteIcon('actions-document-paste-after') . '</a>';
+		}
+	}
 }
 
 
Index: typo3/sysext/cms/layout/db_layout.php
===================================================================
--- typo3/sysext/cms/layout/db_layout.php	(revision 8138)
+++ typo3/sysext/cms/layout/db_layout.php	(working copy)
@@ -955,6 +955,7 @@
 			// Initialize list object (see "class.db_layout.inc"):
 		$dblist = t3lib_div::makeInstance('tx_cms_layout');
 		$dblist->backPath = $BACK_PATH;
+		$dblist->pObj = &$this;
 		$dblist->thumbs = $this->imagemode;
 		$dblist->no_noWrap = 1;
 		$dblist->descrTable = $this->descrTable;
