diff --git a/solr-conf/schema-solr3x.xml b/solr-conf/schema-solr3x.xml
index f299383..28903c2 100644
--- a/solr-conf/schema-solr3x.xml
+++ b/solr-conf/schema-solr3x.xml
@@ -10,7 +10,7 @@
  http://wiki.apache.org/solr/SchemaXml
 -->
 
-<schema name="drupal-3.0-beta20-solr3" version="1.3">
+<schema name="solr-3.x-drupal-7" version="1.0">
     <!-- attribute "name" is the name of this schema and is only used for display purposes.
          Applications should change this to reflect the nature of the search collection.
          version="1.2" is Solr's version number for the schema syntax and semantics.  It should
@@ -350,14 +350,31 @@
        fields or fields that need an index-time boost need norms.
    -->
 
-<!-- The document id is usually derived from a site-spcific key (hash) and the entity type and ID like:
-     $document->id = $hash . '/node/' . $node->nid; -->
+<!--
+   The document id is usually derived from a site-spcific key (hash) and the
+   entity type and ID like:
+   Search Api :
+     The format used is $document->id = $index_id . '-' . $item_id
+   Apache Solr Search Integration
+     The format used is $document->id = $site_hash . '/' . $entity_type . '/' . $entity->id;
+
+   -->
 
    <field name="id" type="string" indexed="true" stored="true" required="true" />
+
+   <!-- Search Api specific fields -->
+   <!-- item_id contains the entity ID, e.g. a node's nid. -->
+   <field name="item_id"  type="string" indexed="true" stored="true" />
+   <!-- index_id is the machine name of the search index this entry belongs to. -->
+   <field name="index_id" type="string" indexed="true" stored="true" />
+   <!-- Since sorting by ID is explicitly allowed, store item_id also in a sortable way. -->
+   <copyField source="item_id" dest="ss_search_api_id" />
+
+   <!-- Apache Solr Search Integration specific fields -->
    <!-- entity_id is the numeric object ID, e.g. Node ID, File ID -->
    <field name="entity_id"  type="long" indexed="true" stored="true" />
    <!-- entity_type is 'node', 'file', 'user', or some other Drupal object type -->
-   <field name="entity_type" type="string" indexed="true" stored="true" required="true" />
+   <field name="entity_type" type="string" indexed="true" stored="true" />
    <!-- bundle is a node type, or as appropriate for other entity types -->
    <field name="bundle" type="string" indexed="true" stored="true"/>
    <field name="bundle_name" type="string" indexed="true" stored="true"/>
@@ -376,7 +393,7 @@
    <field name="path" type="string" indexed="true" stored="true"/>
    <field name="path_alias" type="text" indexed="true" stored="true" termVectors="true" omitNorms="true"/>
 
- <!-- These are the fields that correspond to a Drupal node. The beauty of having
+   <!-- These are the fields that correspond to a Drupal node. The beauty of having
      Lucene store title, body, type, etc., is that we retrieve them with the search
      result set and don't need to go to the database with a node_load. -->
 
@@ -390,15 +407,19 @@
         when each document was indexed.-->
    <field name="timestamp" type="tdate" indexed="true" stored="true" default="NOW" multiValued="false"/>
 
-	<!-- This field is used to build the spellchecker index -->
-   <field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/>
-
-  <!-- copyField commands copy one field to another at the time a document
+   <!-- copyField commands copy one field to another at the time a document
         is added to the index.  It's used either to index the same field differently,
         or to add multiple fields to the same field for easier/faster searching.  -->
    <copyField source="label" dest="spell"/>
    <copyField source="content" dest="spell"/>
 
+   <!-- Common non-dynamic fields for both -->
+	 <!-- This field is used to build the spellchecker index -->
+   <field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/>
+   <copyField source="t_*" dest="spell"/>
+   <copyField source="ts_*" dest="spell"/>
+   <copyField source="tm_*" dest="spell"/>
+
    <!-- Dynamic field definitions.  If a field name is not found, dynamicFields
         will be used if the name matches any of the patterns.
         RESTRICTION: the glob-like pattern in the name attribute must have
@@ -432,6 +453,8 @@
    <!-- Normal text fields are for full text - the relevance of a match depends on the length of the text -->
    <dynamicField name="ts_*"  type="text"    indexed="true"  stored="true" multiValued="false" termVectors="true"/>
    <dynamicField name="tm_*"  type="text"    indexed="true"  stored="true" multiValued="true" termVectors="true"/>
+   <!-- Search Api needs a t_* field for backwards compatibility -->
+   <dynamicField name="t_*"  type="text"    indexed="true"  stored="true" multiValued="true" termVectors="true"/>
    <!-- Unstemmed text fields for full text - the relevance of a match depends on the length of the text -->
    <dynamicField name="tus_*" type="text_und" indexed="true"  stored="true" multiValued="false" termVectors="true"/>
    <dynamicField name="tum_*" type="text_und" indexed="true"  stored="true" multiValued="true" termVectors="true"/>
@@ -443,6 +466,12 @@
    <dynamicField name="tem_*" type="edge_n2_kw_text" indexed="true" stored="true" multiValued="true" omitTermFreqAndPositions="true" />
    <dynamicField name="tws_*" type="text_ws" indexed="true" stored="true" multiValued="false"/>
    <dynamicField name="twm_*" type="text_ws" indexed="true" stored="true" multiValued="true"/>
+   <!-- These fields are used for facetting on string fields, so case and
+        special characters are correctly displayed. -->
+   <dynamicField name="f_ss_*" type="string" multiValued="false" termVectors="true" />
+   <dynamicField name="f_sm_*" type="string" multiValued="true" termVectors="true" />
+   <copyField source="ss_*" dest="f_ss_*" />
+   <copyField source="sm_*" dest="f_sm_*" />
 
    <!-- trie dates are preferred, so give them the 2 letter prefix -->
    <dynamicField name="ds_*"  type="tdate"   indexed="true"  stored="true" multiValued="false"/>
