diff --git a/django/contrib/gis/admin/options.py b/django/contrib/gis/admin/options.py
index 71fb87b..07cd88c 100644
--- a/django/contrib/gis/admin/options.py
+++ b/django/contrib/gis/admin/options.py
@@ -66,12 +66,27 @@ class GeoModelAdmin(ModelAdmin):
         in the `widget` attribute) using the settings from the attributes set 
         in this class.
         """
-        is_collection = db_field._geom in ('MULTIPOINT', 'MULTILINESTRING', 'MULTIPOLYGON', 'GEOMETRYCOLLECTION')
-        if is_collection:
-            if db_field._geom == 'GEOMETRYCOLLECTION': collection_type = 'Any'
-            else: collection_type = OGRGeomType(db_field._geom.replace('MULTI', ''))
+        is_unknown = db_field._geom in ('GEOMETRY',)
+        if not is_unknown:
+            #If it is not generic, get the parameters from the db_field
+            is_collection = db_field._geom in ('MULTIPOINT', 'MULTILINESTRING', 'MULTIPOLYGON', 'GEOMETRYCOLLECTION')
+            if is_collection:
+                if db_field._geom == 'GEOMETRYCOLLECTION': collection_type = 'Any'
+                else: collection_type = OGRGeomType(db_field._geom.replace('MULTI', ''))
+            else:
+                collection_type = 'None'
+            is_linestring = db_field._geom in ('LINESTRING', 'MULTILINESTRING')
+            is_polygon = db_field._geom in ('POLYGON', 'MULTIPOLYGON')
+            is_point = db_field._geom in ('POINT', 'MULTIPOINT')
+            geom_type = OGRGeomType(db_field._geom)
         else:
+            #If it is generic, set sensible defaults
+            is_collection = False
             collection_type = 'None'
+            is_linestring = False
+            is_polygon = False
+            is_point = False
+            geom_type = OGRGeomType('Unknown')
 
         class OLMap(self.widget):
             template = self.map_template
@@ -81,15 +96,16 @@ class GeoModelAdmin(ModelAdmin):
                       'default_lat' : self.default_lat,
                       'default_zoom' : self.default_zoom,
                       'display_wkt' : self.debug or self.display_wkt,
-                      'geom_type' : OGRGeomType(db_field._geom),
+                      'geom_type' : geom_type,
                       'field_name' : db_field.name,
+                      'is_unknown': is_unknown,
                       'is_collection' : is_collection,
                       'scrollable' : self.scrollable,
                       'layerswitcher' : self.layerswitcher,
                       'collection_type' : collection_type,
-                      'is_linestring' : db_field._geom in ('LINESTRING', 'MULTILINESTRING'),
-                      'is_polygon' : db_field._geom in ('POLYGON', 'MULTIPOLYGON'),
-                      'is_point' : db_field._geom in ('POINT', 'MULTIPOINT'),
+                      'is_linestring' : is_linestring,
+                      'is_polygon' : is_polygon,
+                      'is_point' : is_point,
                       'num_zoom' : self.num_zoom,
                       'max_zoom' : self.max_zoom,
                       'min_zoom' : self.min_zoom,
diff --git a/django/contrib/gis/admin/widgets.py b/django/contrib/gis/admin/widgets.py
index 27abc8f..9732efa 100644
--- a/django/contrib/gis/admin/widgets.py
+++ b/django/contrib/gis/admin/widgets.py
@@ -2,7 +2,7 @@ from django.contrib.gis.gdal import OGRException
 from django.contrib.gis.geos import GEOSGeometry, GEOSException
 from django.forms.widgets import Textarea
 from django.template.loader import render_to_string
-
+from django.contrib.gis.gdal import OGRGeomType
 class OpenLayersWidget(Textarea):
     """
     Renders an OpenLayers map using the WKT of the geometry.
@@ -23,8 +23,7 @@ class OpenLayersWidget(Textarea):
                 value = GEOSGeometry(value)
             except (GEOSException, ValueError):
                 value = None
-
-        if value and value.geom_type.upper() != self.geom_type:
+        if value and value.geom_type.upper() != self.geom_type and self.geom_type != 'GEOMETRY':
             value = None
 
         # Constructing the dictionary of the map options.
@@ -51,6 +50,25 @@ class OpenLayersWidget(Textarea):
             # geometry.
             self.params['wkt'] = wkt
 
+            # Check if the field is generic so the proper values are overriden
+            if self.params['is_unknown']:
+                self.params['geom_type'] = OGRGeomType(value.geom_type)
+                if value.geom_type.upper() == 'LINESTRING': 
+                    self.params['is_linestring'] = True
+                elif value.geom_type.upper() == 'POLYGON': 
+                    self.params['is_polygon'] = True
+                elif value.geom_type.upper() == 'POINT': 
+                    self.params['is_polygon'] = True
+                elif value.geom_type.upper() in ('MULTIPOINT', 'MULTILINESTRING', 'MULTIPOLYGON', 'GEOMETRYCOLLECTION'):
+                    self.params['is_collection']=True
+                    if value.geom_type.upper() == 'GEOMETRYCOLLECTION': self.params['collection_type'] = 'Any'
+                    else: self.params['collection_type'] = OGRGeomType(db_field._geom.replace('MULTI', ''))
+        else:
+            if self.params['is_unknown']:
+                # If the geometry is unknown and the value is not set, make it as flexible as possible.
+                self.params['geom_type'] = OGRGeomType('GEOMETRYCOLLECTION')
+                self.params['is_collection']=True
+                self.params['collection_type'] = 'Any'           
         return render_to_string(self.template, self.params)
     
     def map_options(self):
