Index: main/waeup.ikoba/trunk/src/waeup/ikoba/interfaces.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/interfaces.py	(revision 12326)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/interfaces.py	(revision 12327)
@@ -213,5 +213,5 @@
 # We have to keep the following two classes here. In products.interfaces they
 # will cause circular imports.
-class IProductOptionEntry(Interface):
+class IProductOption(Interface):
     """A product option entry.
 
@@ -231,5 +231,5 @@
         )
 
-class IProductOptionEntryField(IObject):
+class IProductOptionField(IObject):
     """A zope.schema-like field for usage in interfaces.
 
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/products/interfaces.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/products/interfaces.py	(revision 12326)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/products/interfaces.py	(revision 12327)
@@ -22,5 +22,5 @@
     ContextualDictSourceFactoryBase)
 from waeup.ikoba.interfaces import MessageFactory as _
-from waeup.ikoba.products.productoptions import ProductOptionEntryField
+from waeup.ikoba.products.productoptions import ProductOptionField
 
 class ConCatSource(ContextualDictSourceFactoryBase):
@@ -66,5 +66,5 @@
     options = schema.List(
         title = _(u'Options/Fees'),
-        value_type = ProductOptionEntryField(),
+        value_type = ProductOptionField(),
         required = False,
         readonly = False,
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/products/productoptions.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/products/productoptions.py	(revision 12326)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/products/productoptions.py	(revision 12327)
@@ -24,19 +24,19 @@
 from zope.schema.fieldproperty import FieldProperty
 from zope.schema import Object
-from waeup.ikoba.interfaces import IProductOptionEntry, IProductOptionEntryField
+from waeup.ikoba.interfaces import IProductOption, IProductOptionField
 from waeup.ikoba.widgets.objectwidget import (
     IkobaObjectWidget, IkobaObjectDisplayWidget
     )
 
-class ProductOptionEntry(grok.Model):
+class ProductOption(grok.Model):
     """A product option entry contains a title, fee and currency.
     """
-    grok.implements(IProductOptionEntry)
-    title = FieldProperty(IProductOptionEntry['title'])
-    fee = FieldProperty(IProductOptionEntry['fee'])
-    currency = FieldProperty(IProductOptionEntry['currency'])
+    grok.implements(IProductOption)
+    title = FieldProperty(IProductOption['title'])
+    fee = FieldProperty(IProductOption['fee'])
+    currency = FieldProperty(IProductOption['currency'])
 
     def __init__(self, title=None, fee=None, currency=None):
-        super(ProductOptionEntry, self).__init__()
+        super(ProductOption, self).__init__()
         if title is not None:
             self.title = title
@@ -58,5 +58,5 @@
     @classmethod
     def from_string(cls, string):
-        """Create new ProductOptionEntry instance based on `string`.
+        """Create new ProductOption instance based on `string`.
 
         The string is expected to be in format as delivered by
@@ -65,7 +65,7 @@
         This is a classmethod. This means, you normally will call::
 
-          ProductOptionEntry.from_string(mystring)
+          ProductOption.from_string(mystring)
 
-        i.e. use the `ProductOptionEntry` class, not an instance thereof.
+        i.e. use the `ProductOption` class, not an instance thereof.
         """
         string = string.replace("u''", "None")
@@ -77,5 +77,5 @@
         return cls(title, fee, currency)
 
-class ProductOptionEntryField(Object):
+class ProductOptionField(Object):
     """A zope.schema-like field for usage in interfaces.
 
@@ -84,23 +84,23 @@
 
       class IMyInterface(Interface):
-          my_option_entry = ProductOptionEntryField()
+          my_option_entry = ProductOptionField()
 
     Default widgets are registered to render product option entry fields.
     """
-    grok.implements(IProductOptionEntryField)
+    grok.implements(IProductOptionField)
 
     def __init__(self, **kw):
-        super(ProductOptionEntryField, self).__init__(IProductOptionEntry, **kw)
+        super(ProductOptionField, self).__init__(IProductOption, **kw)
         return
 
-# register IkobaObjectWidgets as default widgets for IProductOptionEntryFields
-@grok.adapter(IProductOptionEntryField, IBrowserRequest)
+# register IkobaObjectWidgets as default widgets for IProductOptionFields
+@grok.adapter(IProductOptionField, IBrowserRequest)
 @grok.implementer(IInputWidget)
-def option_entry_input_widget(obj, req):
-    return IkobaObjectWidget(obj, req, ProductOptionEntry)
+def option_input_widget(obj, req):
+    return IkobaObjectWidget(obj, req, ProductOption)
 
-# register a display widget for IProductOptionEntryFields
-@grok.adapter(IProductOptionEntryField, IBrowserRequest)
+# register a display widget for IProductOptionFields
+@grok.adapter(IProductOptionField, IBrowserRequest)
 @grok.implementer(IDisplayWidget)
-def option_entry_display_widget(obj, req):
-    return IkobaObjectDisplayWidget(obj, req, ProductOptionEntry)
+def option_display_widget(obj, req):
+    return IkobaObjectDisplayWidget(obj, req, ProductOption)
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/products/tests/test_batching.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/products/tests/test_batching.py	(revision 12326)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/products/tests/test_batching.py	(revision 12327)
@@ -38,5 +38,5 @@
 from waeup.ikoba.products.batching import ProductProcessor
 from waeup.ikoba.products.product import Product
-from waeup.ikoba.products.productoptions import ProductOptionEntry
+from waeup.ikoba.products.productoptions import ProductOption
 from waeup.ikoba.testing import FunctionalLayer, FunctionalTestCase
 
@@ -83,5 +83,5 @@
         product = Product()
         product.product_id = u'LIC'
-        options = ProductOptionEntry()
+        options = ProductOption()
         options.title = u'Base Fee'
         options.fee = Decimal('800.6')
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/products/tests/test_browser.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/products/tests/test_browser.py	(revision 12326)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/products/tests/test_browser.py	(revision 12327)
@@ -44,5 +44,5 @@
 from waeup.ikoba.tests.test_async import FunctionalAsyncTestCase
 from waeup.ikoba.browser.tests.test_pdf import samples_dir
-from waeup.ikoba.products.productoptions import ProductOptionEntry
+from waeup.ikoba.products.productoptions import ProductOption
 
 def lookup_submit_value(name, value, browser):
@@ -218,5 +218,5 @@
 
     def test_product_options(self):
-        prodoptions = ProductOptionEntry()
+        prodoptions = ProductOption()
         prodoptions.title = u'My option'
         prodoptions.fee = Decimal('99.9')
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/products/tests/test_productoptions.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/products/tests/test_productoptions.py	(revision 12326)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/products/tests/test_productoptions.py	(revision 12327)
@@ -5,9 +5,9 @@
 from zope.interface.verify import verifyObject, verifyClass
 from zope.schema.interfaces import ConstraintNotSatisfied, WrongType
-from waeup.ikoba.interfaces import IProductOptionEntry, IProductOptionEntryField, IIkobaUtils
-from waeup.ikoba.products.productoptions import ProductOptionEntry, ProductOptionEntryField
+from waeup.ikoba.interfaces import IProductOption, IProductOptionField, IIkobaUtils
+from waeup.ikoba.products.productoptions import ProductOption, ProductOptionField
 from waeup.ikoba.utils.utils import IkobaUtils
 
-class ProductOptionEntryTests(unittest.TestCase):
+class ProductOptionTests(unittest.TestCase):
 
     def setUp(self):
@@ -26,13 +26,13 @@
     def test_ifaces(self):
         # make sure we implement the promised interfaces.
-        obj = ProductOptionEntry()
-        verifyObject(IProductOptionEntry, obj)
-        verifyClass(IProductOptionEntry, ProductOptionEntry)
+        obj = ProductOption()
+        verifyObject(IProductOption, obj)
+        verifyClass(IProductOption, ProductOption)
         return
 
     def test_init(self):
         # we can pass initial values
-        item1 = ProductOptionEntry()
-        item2 = ProductOptionEntry(
+        item1 = ProductOption()
+        item2 = ProductOption(
             self.valid_title, self.valid_fee, self.valid_currency)
         self.assertTrue(item1.title is None)
@@ -46,13 +46,13 @@
     def test_illegal_value(self):
         # we do not accept values which do not meet the interface
-        item = ProductOptionEntry()
+        item = ProductOption()
         self.assertRaises(
-            WrongType, ProductOptionEntry, 6, 500, 'invalid')
+            WrongType, ProductOption, 6, 500, 'invalid')
         return
 
     def test_to_string(self):
         # the string representation is handy for export
-        item1 = ProductOptionEntry()
-        item2 = ProductOptionEntry(
+        item1 = ProductOption()
+        item2 = ProductOption(
             self.valid_title, self.valid_fee, self.valid_currency)
         self.assertEqual(item1.to_string(), u"(None, None, None)")
@@ -65,7 +65,7 @@
         myinput = u"(u'%s',u'%s',u'%s')" % (
             self.valid_title, self.valid_fee, self.valid_currency)
-        item1 = ProductOptionEntry.from_string(myinput)
-        item2 = ProductOptionEntry.from_string(u"(u'', u'', u'')")
-        item3 = ProductOptionEntry.from_string(u"(None, None, None)")
+        item1 = ProductOption.from_string(myinput)
+        item2 = ProductOption.from_string(u"(u'', u'', u'')")
+        item3 = ProductOption.from_string(u"(None, None, None)")
         self.assertEqual(item1.title, self.valid_title)
         self.assertEqual(item1.fee, self.valid_fee)
@@ -79,11 +79,11 @@
         return
 
-class ProductOptionEntryFieldTests(unittest.TestCase):
+class ProductOptionFieldTests(unittest.TestCase):
 
     def test_ifaces(self):
         # make sure we implement the promised interfaces.
-        obj = ProductOptionEntryField()
-        verifyObject(IProductOptionEntryField, obj)
-        verifyClass(IProductOptionEntryField, ProductOptionEntryField)
+        obj = ProductOptionField()
+        verifyObject(IProductOptionField, obj)
+        verifyClass(IProductOptionField, ProductOptionField)
         return
 
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/utils/converters.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/utils/converters.py	(revision 12326)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/utils/converters.py	(revision 12327)
@@ -30,8 +30,8 @@
 from zope.schema.interfaces import IList
 from waeup.ikoba.interfaces import (
-    IObjectConverter, IProductOptionEntryField, IFieldConverter,
+    IObjectConverter, IProductOptionField, IFieldConverter,
     DELETION_MARKER, IGNORE_MARKER)
 from waeup.ikoba.schema.interfaces import IPhoneNumber
-from waeup.ikoba.products.productoptions import ProductOptionEntry
+from waeup.ikoba.products.productoptions import ProductOption
 
 class ExtendedCheckBoxWidget(CheckBoxWidget):
@@ -175,11 +175,11 @@
         return result
 
-class ProductOptionEntryConverter(grok.Adapter):
-    grok.context(IProductOptionEntryField)
+class ProductOptionConverter(grok.Adapter):
+    grok.context(IProductOptionField)
     grok.implements(IFieldConverter)
 
     def request_data(self, name, value, schema_field, prefix='',
                      mode='create'):
-        """Turn CSV values into ProductOptionEntry-compatible form data.
+        """Turn CSV values into ProductOption-compatible form data.
 
         Expects as `value` a _string_ like ``(u'mytitle',
@@ -194,9 +194,9 @@
         where the values are tokens from appropriate sources.
 
-        Such dicts can be transformed into real ProductOptionEntry objects by
+        Such dicts can be transformed into real ProductOption objects by
         input widgets used in converters.
         """
         try:
-            entry = ProductOptionEntry.from_string(value)
+            entry = ProductOption.from_string(value)
             title, fee, currency = entry.title, entry.fee, entry.currency
         except:
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/utils/tests/test_converters.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/utils/tests/test_converters.py	(revision 12326)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/utils/tests/test_converters.py	(revision 12327)
@@ -38,8 +38,8 @@
     SimpleIkobaVocabulary, IFieldConverter,
     DELETION_MARKER, IGNORE_MARKER)
-from waeup.ikoba.products.productoptions import ProductOptionEntryField
+from waeup.ikoba.products.productoptions import ProductOptionField
 from waeup.ikoba.utils.converters import (
     IObjectConverter, IFieldConverter, DefaultFieldConverter,
-    ListFieldConverter, PhoneNumberFieldConverter, ProductOptionEntryConverter,
+    ListFieldConverter, PhoneNumberFieldConverter, ProductOptionConverter,
     DefaultObjectConverter)
 from waeup.ikoba.utils.helpers import attrs_to_fields
@@ -94,5 +94,5 @@
     options = schema.List(
         title = u'Options',
-        value_type = ProductOptionEntryField(),
+        value_type = ProductOptionField(),
         required = True,
         default = [],
@@ -137,5 +137,5 @@
         obj2 = ListFieldConverter(None)
         obj3 = PhoneNumberFieldConverter(None)
-        obj4 = ProductOptionEntryConverter(None)
+        obj4 = ProductOptionConverter(None)
         verify.verifyObject(IFieldConverter, obj1)
         verify.verifyObject(IFieldConverter, obj2)
@@ -145,5 +145,5 @@
         verify.verifyClass(IFieldConverter, ListFieldConverter)
         verify.verifyClass(IFieldConverter, PhoneNumberFieldConverter)
-        verify.verifyClass(IFieldConverter, ProductOptionEntryConverter)
+        verify.verifyClass(IFieldConverter, ProductOptionConverter)
         return
 
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/widgets/objectwidget.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/widgets/objectwidget.py	(revision 12326)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/widgets/objectwidget.py	(revision 12327)
@@ -82,5 +82,5 @@
 
     def _getView(self, request):
-        if self.context.schema.__name__ == 'IProductOptionEntry':
+        if self.context.schema.__name__ == 'IProductOption':
             return IProductOptionWidgetDisplayView(self, request)
         return IkobaObjectWidgetView(self, request)
