diff --git a/pybis/src/python/CHANGELOG.md b/pybis/src/python/CHANGELOG.md
index f47e23bfc910b6782c63384ea52e5a421b52c4e6..99519fb77c689d25ab834ef790849321410da406 100644
--- a/pybis/src/python/CHANGELOG.md
+++ b/pybis/src/python/CHANGELOG.md
@@ -1,3 +1,8 @@
+## Changes with pybis-1.14.2
+
+- properties can be provided with either upper or lowercase
+- bugfix of duplicate property columns
+
 ## Changes with pybis-1.14.1
 
 - small bugfix
diff --git a/pybis/src/python/pybis/__init__.py b/pybis/src/python/pybis/__init__.py
index 7b94fc5306abb72d168cd0a88475390d47b2c083..4faee4d623ff3e8411113cd8487bfe786853b7cd 100644
--- a/pybis/src/python/pybis/__init__.py
+++ b/pybis/src/python/pybis/__init__.py
@@ -1,7 +1,7 @@
 name = 'pybis'
 __author__ = 'Swen Vermeul'
 __email__ = 'swen@ethz.ch'
-__version__ = '1.14.1'
+__version__ = '1.14.2'
 
 from . import pybis
 from .pybis import DataSet
diff --git a/pybis/src/python/pybis/pybis.py b/pybis/src/python/pybis/pybis.py
index 0f7f74482ac660a7216bf159354273e8cc0d27af..3d066535f903ca70df4ea8c3790376f82925bebf 100644
--- a/pybis/src/python/pybis/pybis.py
+++ b/pybis/src/python/pybis/pybis.py
@@ -1803,15 +1803,18 @@ class Openbis:
             "operator": "AND"
         }
 
-        options = self._get_fetchopts_for_attrs(attrs)
+        attrs_fetchoptions = self._get_fetchopts_for_attrs(attrs)
 
         # build the various fetch options
         fetchopts = fetch_option['sample']
         fetchopts['from'] = start_with
         fetchopts['count'] = count
 
-        for option in ['tags', 'properties', 'registrator', 'modifier']+options:
+        default_fetchopts = ['tags', 'registrator', 'modifier']
+        for option in default_fetchopts+attrs_fetchoptions:
             fetchopts[option] = fetch_option[option]
+        if props is not None:
+            fetchopts['properties'] = fetch_option['properties']
 
         request = {
             "method": "searchSamples",
@@ -2086,6 +2089,7 @@ class Openbis:
             if any([entity in attr for entity in ['space','project']]):
                 fetchopts['experiment'] = fetch_option['experiment']
                 fetchopts['experiment']['project'] = fetch_option['project']
+
         request = {
             "method": "searchDataSets",
             "params": [self.token,
@@ -3547,22 +3551,15 @@ class Openbis:
                     continue
 
                 else:
+                    # property name is provided
                     for i, dataSet in enumerate(response):
                         try:
-                            datasets.loc[i, prop.upper()] = dataSet.get('properties',{}).get(prop,'')
+                            datasets.loc[i, prop.upper()] = dataSet.get('properties',{}).get(prop,'') or dataSet.get('properties',{}).get(prop.upper(),'')
                         except AttributeError:
                             pass
                     display_attrs.append(prop.upper())
 
 
-                if datasets.get('properties') is not None:
-                    datasets[prop.upper()] = datasets['properties'].map(
-                        lambda x: x.get(prop.upper(), '')
-                    )
-                else:
-                    datasets[prop.upper()] = ''
-                display_attrs.append(prop.upper())
-
         return Things(
             openbis_obj = self,
             entity = 'dataset',
@@ -3775,22 +3772,14 @@ class Openbis:
                     continue
 
                 else:
+                    # property name is provided
                     for i, sample in enumerate(response):
                         try:
-                            samples.loc[i, prop.upper()] = sample.get('properties',{}).get(prop,'')
+                            samples.loc[i, prop.upper()] = sample.get('properties',{}).get(prop,'') or sample.get('properties',{}).get(prop.upper(),'')
                         except AttributeError:
                             pass
                     display_attrs.append(prop.upper())
 
-
-                if samples.get('properties') is not None:
-                    samples[prop.upper()] = samples['properties'].map(
-                        lambda x: x.get(prop.upper(), '')
-                    )
-                else:
-                    samples[prop.upper()] = ''
-                display_attrs.append(prop.upper())
-
         return Things(
             openbis_obj = self,
             entity = 'sample',
diff --git a/pybis/src/python/setup.py b/pybis/src/python/setup.py
index e8b7e9e5e17f128951265e2bf4c2ee9d7e5052d9..2983b8b19611d34e1b3dfc4bd849e668b50388f0 100644
--- a/pybis/src/python/setup.py
+++ b/pybis/src/python/setup.py
@@ -10,7 +10,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
 
 setup(
     name='PyBIS',
-    version= '1.14.1',
+    version= '1.14.2',
     author='Swen Vermeul • ID SIS • ETH Zürich',
     author_email='swen@ethz.ch',
     description='openBIS connection and interaction, optimized for using with Jupyter',