If you are updating existing custom code from Plone 3 to work with Plone 4, you
may need to take the following changes into account.

* The PloneContent class has been removed.  Use marker interfaces instead to
  get a way to check for functionality that is common to some types.

* The use_folder_tabs property in portal_properties/site_properties has been
  removed.

* Products.CMFPlone.browser.ploneview.IndexIterator is now
  Products.CMFPlone.utils.IndexIterator

* Products.CMFPlone.browser.ploneview.cache_decorator is now
  plone.memoize.instance.memoize

* The keyFilteredActions method of the Plone view has been removed. Use the
  keyed_actions method of the plone_context_state view instead.

* The isRightToLeft method of the Plone view has been removed. Use the is_rtl
  method of the plone_portal_state view instead.

* The SitemapNavtreeStrategy decorator factory no longer sets the 'icon'
  attribute. Use 'item_icon' instead.

* The old CalendarPortlet, NewsPortlet, NavigationPortlet, RecentPortlet, and
  EventsPortlet classes have been removed from CMFPlone.  plone.app.portlets
  is the modern location for portlets.

* The following items from the plone_deprecated skin layer have been removed.

  - colophon.pt
  - correctPREformatting.js
  - cropText.py
  - deprecated.css.dtml
  - document_actions.pt
  - document_byline.pt
  - enabling_cookies.pt
  - enabling_cookies.pt.metadata
  - extract_date_components.py
  - folder_contents_filter.js
  - folder_contents_hideAddItems.js
  - folder_localrole_add.py
  - folder_localrole_delete.py
  - folder_localrole_form.pt
  - folder_localrole_form.pt.metadata
  - footer.pt
  - getActionIconList.py
  - getActionIconList.py.metadata
  - getAddableTypesInMenu.py
  - getCurrentUrl.py
  - getEventString.py
  - getNextMonth.py
  - getOrderedUserActions.py
  - getPersonalFolderFor.py
  - getPreviousMonth.py
  - getReplyReplies.py
  - getViewTemplateId.py
  - getWorkflowHistory.py
  - getYearAndMonthToDisplay.py
  - getZopeInfo.py
  - getZopeInfo.py.metadata
  - global_contentmenu.pt
  - global_contentviews.pt
  - global_logo.pt
  - global_pathbar.pt
  - global_personalbar.pt
  - global_searchbox.pt
  - global_sections.pt
  - global_siteactions.pt
  - global_skinswitcher.pt
  - hide_columns.py
  - isDefaultPageInFolder.py
  - isRightToLeft.py
  - keyFilteredActions.py
  - login.js
  - navigationCurrent.py
  - navigationLocalRelated.py
  - old_folder_contents.pt
  - old_folder_factories.pt
  - old_folder_factories.pt.metadata
  - plone_minwidth.js.dtml
  - plone_minwidth.js.dtml.metadata
  - plonifyActions.py
  - portlet_calendar.pt
  - portlet_events.pt
  - portlet_languages.pt
  - portlet_login.pt
  - portlet_navigation.pt
  - portlet_news.pt
  - portlet_recent.pt
  - portlet_related.pt
  - portlet_review.pt
  - prepare_slots.py
  - presentation.css.dtml
  - presentation.css.dtml.metadata
  - rejectAnonymous.py
  - review_history.pt
  - review_history.pt.metadata
  - showEditableBorder.py
  - viewThreadsAtBottom.pt

* The setDefaultSkin and setCurrentSkin methods of the Plone tool have been
  removed.

* The relaxed mode of the normalizeString method was removed. You should use
  either the URL or file name normalizer from the plone.i18n package instead.

* The BrowserView class from Products.CMFPlone.utils has been removed.  Use
  Products.Five.BrowserView instead.

* Products.CMFPlone.utils.getGlobalTranslationService is now
  Products.PageTemplates.GlobalTranslationService.getGlobalTranslationService

* The Products.CMFPlone.utils.utranslate method has been removed.  Use the
  translate method of the GlobalTranslationService instead.

* The Products.CMFPlone.utils.ulocalized_time method is now
  Products.CMFPlone.i18nl10n.ulocalized_time

* The getPILVersion method of the MigrationTool has been removed.

* The deprecated context parameter in getDefaultPage and isDefaultPage in
  utils.py has been removed.

* The following variables are no longer automatically inserted into the global
  expression context of main_template, for performance reasons. Use the expressions
  suggested below instead. (Note: Using the suggested expressions requires that
  the context have a proper acquisition chain to the portal root.)

  here_url
    context/@@plone_context_state/object_url
  portal
    context/@@plone_portal_state/portal
  utool
    context/portal_url
  putils
    context/plone_utils
  mtool
    context/portal_membership
  member
    context/@@plone_portal_state/member
  ifacetool
    context/portal_interface
  syntool
    context/portal_syndication
  wtool
    context/portal_workflow
  wf_state
    context/@@plone_context_state/workflow_state
  isAnon
    context/@@plone_portal_state/anonymous
  ztu
    modules/ZTUtils
  is_editable
    context/@@plone_context_state/is_editable
  default_language
    context/@@plone_portal_state/default_language
  portal_properties
    context/portal_properties
  normalizeString
    context/@@plone/normalizeString
  toLocalizedTime
    nocall:context/@@plone/toLocalizedTime
  acl_users
    context/acl_users
  template_id
    template/getId
  actions
    python:context.portal_actions.listFilteredActionsFor(context)
  isContextDefaultPage
    context/@@plone_context_state/is_default_page
  object_title
    context/@@plone_context_state/object_title

* The "Favorite" content type has been removed.

* The "Products.CMFPlone.browser.plone" alias for
  Products.CMFPlone.browser.ploneview has been removed.

* String exceptions were deprecated in Python 2.5 and are no longer supported
  in Python 2.6.

* The 'doctype' slot has been removed from main_template.  Should this
  flexibility be required, it's recommended to customize main_template.

* The 'actions' method of @@plone_context_state now takes a single parameter
  which is the action category that should be retrieved. This should be used
  instead of the 'keyed_actions' method which has been removed.

* Products.CMFPlone.interfaces.OrderedContainer.IOrderedContainer has been
  replaced with the canonical version of the interface in
  OFS.interfaces.IOrderedContainer

* Products.CMFPlone.utils.scale_image has been moved to the PlonePAS package,
  as that is the only place it was used.

* zope.app.cache.interfaces.ram.IRAMCache is now
  zope.ramcache.interfaces.ram.IRAMCache

* The action icons tool has been deprecated.  You should register action icons
  directly on the action now, using the icon_expr setting.

* Products.CMFPlone.CatalogTool.registerIndexableAttribute has been removed. 
  Use plone.indexer

* "Manage portlets" fallback link appearing below content when no columns are 
  available has been moved out from main_template to 
  plone.manage_portlets_fallback viewlet. So if you have customized 
  main_template you might need to update it. 
  
* Columns in templates are disabled the same way as "editor border" - via 
  REQUEST variable now instead of empty fill-slot
  
* document_relateditems.pt template is deprecated. Use  
  plone.belowcontentbody.relateditems viewlet instead.
  
* 'documentDescription' is <DIV> now. There should be a DIV for KSS to work 
  properly, but nesting <p> within the <DIV> means we have different markup 
  for description on different views
  
* When creating new view for a custom content type you should fill
  'content-core' slot instead of 'main'. All the surrounding of the 
  'content-core' slot is in main_template. And if you don't plan any special
  title or description for your view, main_template will take care of that as 
  well so you should really care about the content core only