« March 2010 | Main | May 2010 »
April 2010
April 30, 2010
Convergence Recap
Want to know what’s new with Dynamics CRM, but didn’t get a chance to attend Convergence 2010?
Customer Effective’s Scott Sewell will be presenting a recap of Convergence 2010 on Tuesday, May 4th at 9:00 AM PST for the XRM Virtual User Group. You can register for this session or join the XRM Virtual User Group here.
If you are not a member of the XRM Virtual User Group you should be. Whether you are new to extending Microsoft CRM or an old pro, they have both beginner and advanced sessions, and you can’t beat the price—it’s free.
Posted by Joel Lindstrom on April 30, 2010 at 03:45 PM in Customer Effective News, Dynamics CRM Community | Permalink | Comments (2) | TrackBack (0)
April 29, 2010
Microsoft CRM Online Mail merge to email or fax the letter
I was recently working with a customer that uses the mail merge function often to send a contract to a specific contact and either email it or fax it. The issue they ran into is that when they emailed the merged document to the customer, the customer constantly got prompted about the data source being missing. It turns out that they were saving the document too early. The mail merge had not yet finished which was causing the issue. In a previous blog post I documented the steps to perform the merge. Below I show at what point you could save the document to send it off to a customer attached to an email. Please note that this best applies to merging a template with one record at a time.
1. Open the Contact you wish to perform the mail merge with and initiate the merge from the Actions menu.
2. Select your mail merge template, click OK, and then choose Open.
3. When presented with the document in Word, click the Add-ins menu and select CRM (Word 2007).
4. An extra carriage return automatically gets added to your document so you will want to remove the extra carriage return.
5. Click “Next: Preview your letters” in the lower right hand corner of Word denoted with the red dot in the screen shot.
6. When you are presented with the merge document you may be tempted to save it at this point. Do not save the document because the merge is not complete. If you save at this point, the document will be expecting its data source. If the document gets emailed to someone, they will not have access to the data source (Microsoft CRM).
7. Click “Next: Complete the merge” denoted with the red dot..
8. Now, click “Edit invidual letters …” denoted with the red dot.
9. When prompted with the Merge to New Document dialog, click OK.
10. Click the Office icon in the top left corner of Word and select Save.
11. Provide a file name and click Save in the location you wish.
12. If you get prompted with the pop up below, simply click OK.
13. You can now create an email and attach the letter. If you need to fax it, send the fax and then create a fax activity in CRM and attach it.
Posted by Mark Weilandt on April 29, 2010 at 09:58 PM | Permalink | Comments (0) | TrackBack (0)
Delete Old CRM 4.0 Trace Files before running a New Trace
In my previous post, I pointed to the new hosted location of the CRM 4.0 Trace File utility.
The CRM Trace output is great because it produces very detailed information on what is happening on the server during a specific time.
One thing to note however is that the log files can become VERY large – and starting a new trace does not remove the log files from previously executed traces.
Additionally, the trace utility zips up everything in this directory each time, and if the directory contains old trace files, the actual file in question may be located among hundreds of older logs.)
To maintain the directory, you can manually delete the files from the server by opening Windows file explorer and navigating to the C:\Program Files\Microsoft CRM\Trace\ directory.
The file names follow a specific format:
[SERVERNAME]-w3wp-CRMWeb-[DATE YYYYMMDD]-[SEQUENCE#].log
[SERVERNAME]-CrmAsyncService-bin-[DATE YYYYMMDD]-[SEQUENCE#].log
(The actual directory used by the trace may be located elsewhere on your server. – You may need to search the drive to find the actual location for your environment.)
Files that are in use won’t be available to delete without a re-start, but deleting the older files should be sufficient.
A tip suggested by Steve Onufrock is to use a simple batch file to delete the older logs before initiating a new trace.
REM ==============================
ECHO ON
del /q DriveLetter:\Program Files\Microsoft CRM\Trace\*.log
ECHO OFF
REM ==============================
[You’ll need to verify the location of the trace directory before implementing it – and please use this carefully, since you’re deleting files on the server, a small mistake could render your server unusable.]
Posted by Scott Sewell on April 29, 2010 at 09:25 AM in Microsoft CRM Implementation, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
April 28, 2010
CRM 4.0 Server Trace and Support Tools' New Home
The indispensable Microsoft Dynamics CRM Trace, Support & Diagnostic tools have moved to a new location -
The tools are invaluable for troubleshooting permissions errors and other surprises. -
http://support.microsoft.com/kb/907490 describes the process for enabling the trace manually, but the CRM Diagnostic Tool puts a nice face on it – and will zip up a copy of the resulting trace and environment information into a package for support.
NOTE: This tool does not work remotely, it has to be executed locally on the Target server!

They were created and formerly hosted/managed by Benjamin Lecoq – a former Microsoft Escalation Engineer.
Posted by Scott Sewell on April 28, 2010 at 11:33 AM in Microsoft CRM Implementation, Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
April 27, 2010
Live from Convergence 2010
We’re down in Atlanta for Convergence 2010, Microsoft’s annual get-together for Microsoft Dynamics partners and customers. Since it was in our back yard in Atlanta this year, we saw a very good representation of CEI’s customers at the conference. If you weren’t here, you missed out on a fantastic Customer Effective customer dinner at McCormick & Schmick's Seafood Restaurant. I would definitely recommend coming next year for the food alone.
There have been a high level of announcements and buzz around Microsoft and the cloud, showing that Microsoft is taking cloud computing very seriously—for example, expanding Dynamics CRM Online to 32 new markets.
The keynotes and the big announcements are great, but my favorite part about Convergence is getting to meet the people. I got to catch up with the CRM product team. They are a great bunch of people—all short on sleep from long hours working on the upcoming release of CRM 5, but they always take the time to answer questions, and they really value feedback on what they are doing. Speaking of which, if you are not registered at Microsoft Connect, you should be—that’s where you can send product feedback and suggestions to the CRM team. There still is time to send feedback/request changes for CRM version 5, but time is running out. I’m really getting excited about CRM 5—we’ll tell you more about that later. It was also great to run into some of my CRM MVP buddies, people like Larry Lentz, Julie Yack, Mitch Millam and others. These guys are always there to help in the CRM Community, and great people to know. I got to hang out with CRM MVP Scott Sewell—we both work for Customer Effective, but since he’s in NYC and I’m in SC, I have to come to Convergence to see him.
I was able to spend some time working at the Microsoft Dynamics CRM booth on the expo floor, and got to meet a lot of CRM users. I also got a lot of questions from users of other Dynamics platforms, such as AX, GP, and NAV who were considering adding Dynamics CRM. The booth had workstations set up with CRM and some of the new accelerators, so it was a great place for users and prospective users to take a hands on test drive.
I continue to be amazed at the impact that Twitter has had on conferences like Convergence. There is no way that anyone could attend every session that they wanted to, but I just followed the hashtag #CONV10, and I was able to see a lot of what was happening in the sessions that I couldn’t attend. Scott Sewell had one of the best feeds going,, and if you want to know what happened at Convergence from a CRM perspective, read his feed (and follow him).
Posted by Joel Lindstrom on April 27, 2010 at 08:31 AM in Customer Effective News | Permalink | Comments (0) | TrackBack (0)
April 20, 2010
Editing a Mail Merge template in CRM 4.0
Editing a template in CRM 4.0 is fairly simple but there are a few things to be aware of. I documented the steps below for eveyone and as a reminder for myself.
1. Click on “Settings” in the Wunderbar.
2. Click on “Templates” in the top left navigation area.
3. Select “Mail Merge Templates”.
4. Double click the template you wish to edit and click the “Edit template in Word” from the toolbar.
5. Word will open with the template displayed and some additional information about performing the merge similar to what you see below. This document is a temp file.
6. Click on the “Add-ins” menu on the right side of the Word 2007 ribbon and then click “CRM”.
7. When presented with the Recipients dialog box, click OK even though there are no Recipients selected.
8. You are now presented with your mail merge template. Check that an extra carriage return was not automatically inserted in the first line of your template.
9. Make the necessary changes to your template.
10. Click the Office menu button in the top left hand corner, choose Save As, and select “Other Formats”.
11. The document must be saved as an xml file (Word 2003 XML file is the type to select). I typically will name my templates with a version # in the name such as “Welcome Letter v 1.3.xml” so I can keep track of various versions.
12. Close your Word document and return to the Mail Merge Template record you started from. Click “Remove” to remove the existing template. Click OK to confirm that you wish to remove the template.
13. Click the Browse button to select the new template you just created. Then click Attach.
14. Click Save and Close and you are finished.
If you wish to add new merge fields to your document, you will need to click the “Data Fields” button in Step 4 above before clicking the “Edit Template in Word” button on the toolbar. Select the new merge fields you wish to add. Then, when you Edit the Template in Word, the merge fields will be available when you click the “Insert Merge Fields” button in the Word ribbon.
Posted by Mark Weilandt on April 20, 2010 at 08:08 PM in Microsoft CRM Tricks and Tips | Permalink | Comments (2) | TrackBack (0)
Validate Microsoft CRM Task Data At Close
I really like the task activity in Microsoft Dynamics CRM. As opposed to a mode specific activity, like a phone call, fax, letter, or an appointment (which typically means that you are doing something with someone), a task is a good, workhorse activity which can serve many different purposes—it can be a notification to a user, a to-do item, or a way of assigning an action to someone else. Also, since you don’t have the option to create custom activity entities, the task serves as a valuable catch-all for miscellaneous types of activities.
In its role as the venerable workhorse activity type, it is frequently of value to add some additional fields to the task entity. A “task type” picklist, for example, is very useful to help segment tasks of various types in CRM views. The task type can also be the catalyst for business logic for hiding or requiring certain other fields on the task form. For example, if you have task type of “assignment,” you may want to have some fields that are required for the user to complete so you have record of assignment completion, and what was done; however, just making those fields required on the task form is not sufficient, because for other types of tasks, the assignment completion fields do not make sense, and you don’t want to prevent users from being able to use the task entity for other types of tasks. A common approach is to use javascript to dynamically set requirement level or hide/reveal fields based on the record type. At Customer Effective, we have developed a javascript library that simplifies common CRM javascript functions, and you can also find many good javascript examples on blogs such as CRM MVP Ronald Lemmen's blog.
One consideration when it comes to activities, such as tasks, is the ways that CRM tasks can be closed. Activities are a bit different than other entities in CRM, because they do not have the idea of active/inactive, like an account does. Instead you have the idea of “Open” and “Closed.” This is important, because if you decide to customize the task entity, you need to consider how a user will interact with it. When a task is closed, the activity is deactivated, it can no longer be edited, and there is no “reopen” option.
Consider again the case where you have a task type or task status that causes certain fields to be dynamically required. We have an assignment task on which we wish to make the assignment completion status required. An issue that you may run into is that a user can click “more actions” and close the task without first completing the dynamically required fields. They can also close the task from the view (by clicking “more actions”), bypassing the requirement level on the fields for this task type. Then the task is closed, the fields you want to be completed are blank, and the task can’t be reopened (through the UI). As long as a user has write permissions for activities, they can close activities.
There are a couple of ways that you can approach this. On the form, it is possible using javascript to hide the “close” option from the “Actions” menu; however, some things to think about before doing that:
- You don’t want to prevent users from closing tasks, just prevent them from prematurely closing tasks.
- You may not want to remove the close option for all task types.
- Removing the options from the “Actions” menu is not supported—it works, but Microsoft doesn’t support it, and there’s a good chance it won’t survive an upgrade.
- Even if you hide the close option from the “Actions” menu on the form, users can still close tasks from the “Actions” menu on a view.
A second way of handing this is with a plugin that fires when a task is closed that verifies the required fields are completed, and if not, prevents the task from being closed. This is a better option than javascript, as it is supported, and it will work for all tasks, whether they are closed from the form or the view. Plug-ins can also run real-time (synchronously), so a real benefit of plug-ins are that you can real time intercept the premature closure and prevent users from closing the task until the required fields are completed.
A third option is workflow. Workflow is similar to a plug-in, in that it fires no matter from where the record is updated. It is not as powerful as a plug-in, in that it can’t be triggered by as many events, and it can only run asynchronously, but it has some major advantages, such as it can be monitored by an end user, and someone who is not a programmer can edit the workflow.
In a recent implementation, the client wanted to have a number of different task types, each with its own set of hidden or required fields, and they wanted to be sure that the necessary fields for a specific type of task were completed prior to allowing the task to be closed. The workflow option was attractive to them because they wanted to be able to support the process and make changes to it afterwards, and add additional task types without having to pay a developer to recode a plug-in.
Here’s an example of how we addressed this requirement using workflow. In this example, we have added a task type picklist with a type of “Employee productivity alert” and some fields that we want to make sure that users complete for this type of task before closing. We have used javascript to dynamically require these fields on the form, but we want the workflow to verify that these fields contain data prior to closing the task so users don’t have a “back door” way of closing the task from the view without populating these fields.
- Create a workflow that runs when task status changes.
- First step, check condition to see if task type equals “Employee productivity alert.”
- Substep—if so, check to see if fields required for this type of task contain data. If they don’t:
- Change Status Step—change status of task to Open: In progress.
- Optional—send email step to alert users that their task could not be closed due to missing data.
Now if a user should close a Employee Productivity Alert task prematurely, the system will catch that change and prevent the task from being closed without complete information for that type of task, and tasks can be more useful, as they can be configured to more closely match the specific requirements of various types of tasks.
So when should you use a plug-in vs a workflow for business logic or validation purposes? Each situation is different, but a good rule of thumb is use a plug-in if it needs to happen real time, if you have a high volume of changes (high hundreds-thousands) per day, or have a requirement that goes beyond the capabilities of CRM workflow. Consider a workflow if you won’t have a high volume of changes on a daily basis, if the business logic doesn’t need to happen real time, if you don’t have .net developers at your disposal, or if you want end-users to be able to monitor the success/failure of the job via the front-end UI.
Posted by Joel Lindstrom on April 20, 2010 at 12:12 AM | Permalink | Comments (0) | TrackBack (0)
April 18, 2010
Unable to publish an entity in CRM 4.0
I ran into an interesting situation while implementing CRM for one of our customers. I had two CRM organizations, Production (PROD) and Test (TEST). To keep the customizations current between the two organizations I consistently built new customizations in PROD and then exported the customizations and imported them to TEST.
The contact form had fields to store a School address. The School Country field already existed as nvarchar. I previously created a Country entity to use elsewhere so it was already in both organizations. The customer wanted the School Country field to be a lookup to the Country entity instead of being nvarchar. In the TEST organization, I removed the existing School Country field from the form and Published it. I then deleted the School Country (nvarchar) attribute and published the Contact form. Then I created the N:1 from Country to Contact and put the lookup field on the contact form and published the Contact form. Everything worked perfectly.
Now it came time to push that change to PROD. I exported the Contact entity from TEST and imported the customizations to PROD successfully. No error messages on import. I then tried to publish the Contact entity and got a generic error stating "An error has occured."
I had previous customization exports of the Contact entity that I used to push changes to TEST so I imported those without error. I was still unable to publish the Contact form. This was getting annoying.
While looking at the Contact form in PROD, I noticed that the School Country field looked odd. The textbox border was missing as well as the text that normally shows in the textbox. See the red underlined field in the screenshot below.
I finally edited the School Country field on the form and noticed that the attribute name was schoolcountryid, not schoolcountry. It seems that my customization came through but the lookup field that gets created from the N:1 relationship and the relationship weren’t there. The problem is that the field exists on the form but there is no underlying field for it.
Here is the solution. Create an attribute of any field type with the field name, schoolcountryid, in this case. You can locate the field name expected by looking at the name property of the field on the form. Once that field exists, you can remove it from the form and publish the entity. You should also delete the attribute you just created (schoolcountryid) from the entity and publish that change. At this point, you can recreate your relationship with the other entity and drop the lookup on the form or if you have two organizations as I do, when you export the customizations from TEST, export the Contact entity as well as the Country entity. Publish the entities you import and you are done.
Posted by Mark Weilandt on April 18, 2010 at 06:57 PM in Microsoft CRM Customizations | Permalink | Comments (0) | TrackBack (0)
April 11, 2010
Update Rollup 10 for Microsoft Dynamics CRM 4.0 is available.
Update Rollup 10 is a cumulative update rollup that includes all the fixes for the issues that are documented in Update Rollups 1 through 9.
The Build number for CRM 4.0 UR10 is 04.00.7333.2741
The updates for both Client and all Server Apps can be downloaded here: Download
For Full details about what is included in Update Rollup 10, see http://support.microsoft.com/kb/979347
* Prerequisites for installing UR10 *
For the both the CRM Outlook Client and the CRM Data Migration Manager, at a minimum, CRM Update Rollup 7 must be installed prior to installing UR10.
On the server, the previous update rollups are not required before installing UR10.
Although it’s desirable, the server and the clients do not have to be updated at the same time to the same UR.
* Hotfixes and updates that you have to enable or configure manually *
Please note – CRM Update Rollup 10 for Microsoft Dynamics CRM 4.0, like UR1-UR9 contains hotfixes and updates that you must enable or configure manually – both at the client and the server level.
It’s worth the time to take a few minutes and walk through the notes that describe the fixes that require manual configuration – usually just adding or modifying a registry key – it’s too easy to miss out on some fixes or functionality improvements available.
You can enable or configure these hotfixes and updates on the server that is running Microsoft Dynamics CRM 4.0 by following the instructions in the Microsoft Knowledge Base (KB) articles listed in the KB article.
* Auto-updating CRM Clients in a deployment *
Recent updates have removed the need to be running as a local administrator to install the CRM for Outlook Client Update Rollups. It’s now, more than ever, feasible to deploy the client updates via the CRM Client Auto Update feature. –
See this blog post for more information on how to set up / deploy the clients via AutoUpdate. http://blogs.msdn.com/crm/archive/2008/05/08/crm-client-autoupdate.aspx (The Keys needed for UR10 are listed in the section “Microsoft Dynamics CRM for Microsoft Office Outlook Auto Update IDs and Link IDs” of http://support.microsoft.com/kb/979347)
Posted by Scott Sewell on April 11, 2010 at 05:13 AM in Microsoft CRM Implementation | Permalink | Comments (0) | TrackBack (0)
April 07, 2010
Microsoft CRM Access Denied On New PC
I got a call from a friend who uses CRM at his company. He had recently got a new PC, and he could not log into Microsoft Dynamics CRM on it. The PC was correctly added to his domain, and he had valid user account in Microsoft CRM 4.0—he could log on from other pc’s, just not his new one. When he attempted to log in, he would get several prompts for credentials, then it would fail with an error of HTTP Error 401.1 - Unauthorized: Access is denied due to invalid credentials.
After investigating his Internet settings, I found that the CRM URL was in the Trusted Internet sites, not the Trusted Intranet Sites. That gave me another idea—I went to Start—>Control Panel—>Credential Manager (in Windows 7). In Credential Manager there was an entry for his domain userid. I had him delete this entry.
After he did that, he could successfully log in to his CRM site with no issues.
Turns out what happened was when he first went to CRM, he typed in the URL. Since the site wasn’t in the intranet zone, it prompted him for credentials. He mistyped his credentials, and clicked “Yes” when IE asked him if he would like to save the credentials. Then the next time that he tried to log in, Windows attempted to use the saved credentials.
Lesson learned is that for on premises deployments you should always add the CRM URL to trusted Intranet sites, and not have Windows store your credentials. The only scenario where you should allow Winodws to store your credentials is if you access CRM via an Internet Facing Deployment (and are not auto-authenticated via Active Directory).
Sometimes this can pop up several months after you have been using a computer. I have seen where a user does not add the CRM URL to the Trusted intranet sites, and when prompted for credentials they correctly enter their user name and password—when the Active Directory password policy dictates that they change their password, they will then not be able to get into CRM (without deleting the stored credentials).
Posted by Joel Lindstrom on April 07, 2010 at 03:05 PM in Microsoft CRM Tricks and Tips | Permalink | Comments (0) | TrackBack (0)
Microsoft CRM Mobile Express and Blackberry
After implementing Mobile Express in our Microsoft Dynamics CRM 4.0 environment, we found that some users with Blackberry smartphones could not open the Mobile Express site. We knew it was not a bug with Mobile Express, as these same phones could successfully launch Mobile Express in some of our client’s environments, just not ours.
Through the process of elimination, we found that the issue was Blackberry Browser related. The Blackberry actually has two browsers—the Blackberry Browser and the Internet Browser. When you launch the web browser on the Blackberry, if you go to options, General Options, you will see a dropdown for Browser. The default setting is Blackberry Browser, but you can change that setting to Internet Browser. The issue we found was that the Blackberry browser does not correctly interpret security certificates from some providers—that explained why these phones could correctly load the Mobile Express site from some environments but not from others.
After changing the setting to “Internet Browser,” Mobile Express loaded correctly for these users. Until the next phone upgrade.
Some of our Blackberry users recently upgraded to the latest version of the Blackberry Tour or Curve. We changed the browser settings on these phones to “Internet Browser,” but they still could not access Mobile Express. We found that on these new phones, after changing and saving the browser settings, it would reset back to “Blackberry Browser.”
We were able to fix this issue using the process outlined on Blackberry.com to configure an IT Policy on the BlackBerry Enterprise Server to allow only the Internet Browser on the BlackBerry smartphone. Following the change, we re-registered the policies on the phones by going to option->advanced options->host routing table->register now.
Now the Blackberries use the Internet Browser, and Mobile Express works great for them.
Posted by Joel Lindstrom on April 07, 2010 at 02:41 PM in Mobile Express | Permalink | Comments (2) | TrackBack (0)
April 06, 2010
CRM for Financial Services Webcast presented by Customer Effective
An InformationWeek Financial Services Webcast:
Increasing Customer Retention and Growth with Microsoft Dynamics® CRM and Customer Effective
Date: Thursday, April 15, 2010
Time: 9:00 AM PT / 12:00 PM ET
Duration: One Hour
Register - https://www.techwebonlineevents.com/ars/eventregistration.do?mode=eventreg&F=1002183&K=CAA1CC
Learn how you can improve your competitive advantage by increasing customer loyalty while improving efficiency, and developing more profitable relationships.
Firms are seeking a fast, flexible, and affordable solution that drives consistent, measurable improvements in every business process. See how FSIs can streamline business processes, reduce complexity and IT costs. Microsoft Dynamics® CRM provides an easily customizable, scalable platform that integrates with current systems and allows firms to expose the infrastructure for the development of new products and channels.
Hear from industry experts how to gather consistent customer data in a single information repository for a better view of customers, including better understanding of each customer's worth and better ability to enhance and cultivate profitable customer relationships. Microsoft Dynamics CRM improves customer insights by providing the tools and capabilities needed to help financial services firms increase employee productivity, grow revenue, attract and retain profitable customers.
Find ways to deliver the right information to frontline staff and consistently enhance the customer experience across all channels of your organization. Customer Effective helps financial services clients maximize their relationships using solutions based exclusively on Microsoft technology. As a Microsoft Gold Certified Partner, they are Consultants and Solution Implementers serving midmarket and enterprise financial services organizations worldwide. Customer Effective delivers business process automation and collaboration solutions and has engaged in hundreds of Microsoft Dynamics CRM implementation projects since the product’s release in 2002.
Posted by Mike Rogers on April 06, 2010 at 10:21 AM | Permalink | Comments (0) | TrackBack (0)
April 01, 2010
CRM 4.0 Workflow Considerations and Modified By
When using workflow to update records, it is important to consider how the workflow will impact other processes. For example, how does the change that the workflow is making impact integration, other workflows, or other business rules.
A good example from a recent implementation.
I recently was involved in an implementation with a company in the insurance industry that had fairly stringent security requirements. When a record is updated in CRM it is synched to their production system that is used for very important financial processes, such as claims payments. In this process the modified by user is very important, since it touches on financials and SOX compliance. Any change to production data needs to reflect the actual user who initiated the change.
In the initial implementation, workflow was used on the record to update fields post create or update. The problem we ran into was that when a workflow updates a record, it changes the modified by field to the owner of the workflow. This caused a problem because when the integration sent back the update it would update the modified by user field in their financial system to the owner of the workflow, not the user that actually initiated the change. Until a record is saved, you can’t really capture the modified by user, and after the record saved, the workflow would update the record before the integration grabbed the change.
The lesson learned here is not “don’t use workflows.” Rather it is be aware of how the workflow impacts the records, and if sending back the modified by user in an integration setting is required, workflow may not be the best fit.
In this example, we replaced the workflow with a combination of javascript and plug-ins, and were able to make the necessary system updates to the record without affecting the “Modified by” field of the record.
Posted by Joel Lindstrom on April 01, 2010 at 02:22 PM in CRM Business Process, Microsoft CRM Customizations | Permalink | Comments (2) | TrackBack (0)




Recent Comments